如何处理必要的重复条目

时间:2016-12-18 19:33:55

标签: mysql sql

请帮助我解决这个难题。克服以下情况的最佳做法是什么?请考虑以下数据库:

ID | Name | HIREDATE | TERMDATE 01 | John | 01/01/14 | 07/01/14

所以,约翰在这里,你可以看到7月1日离开公司。然而,他在以后被重新雇用(Say,I dunno,2/1/15)。社区会做什么?

a)复制他的参赛作品并给他一个完全不同的身份证? - 可能的缺点:在计算诸如减员,新员工等事情时,可能会倾斜统计数据等。

b)添加一个新的列用于重新安装,尽管它很少发生并且可能在很大程度上未被使用。 - 可能的缺点:可能会与程序中的其他功能发生冲突,例如搜索当前员工,除非选中。

c)删除期限日期:无从谈起。统计数据需要显示在任何给定时间雇用和命名的所有内容,这将使计算无法实现。

d)其他:_________<

我倾向于选择" a"。我认为可能有一种方法可以调整计算,以反映在计算损耗和增长时存在的重新计算。社区的想法是什么?

2 个答案:

答案 0 :(得分:1)

在您发布的3个解决方案中,选项a是最可行的。正如您所提到的,选项a的最大缺点是您丢失了长期可能有价值的历史数据。

我同意你对''和' c'并且不能真正想到那些最佳的情况。

就个人而言,几乎在所有情况下,我都会使用"选项d"除非由于某种原因我不关心历史数据。具体来说,我会有一个辅助表,为员工存储各种元数据。该表的格式类似于

META_ID | EMPLOYEE_ID | KEY | VALUE

通过这种方式,您可以拥有任意数量的租用和终止日期(以及您将来需要添加的任何其他元数据,例如PROMOTION_DATE)。具体到你的例子:

META_ID | EMPLOYEE_ID | KEY    | VALUE
1         1             hired    01/01/14
2         1             termed   07/01/14
3         1             hired    02/01/15

您可以使用JOINS进行查询,以获取您特别感兴趣的数据,并且可以拥有无​​限数量的员工事件。您始终可以在给定的一组键中选择最后一个事件。

答案 1 :(得分:0)

您的问题源于尝试使用同一个表解决两个不同的问题:代表当前员工,并代表就业历史。通常,这些数据用于完全不同的目的,并且由于数据保护法的原因,存储的数据可能必须不同。

为当前员工提供一个表,为历史数据提供另一个表。