mysql - 如何处理必要的重复条目

标签 mysql sql

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

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

所以,如您所见,约翰于 7 月 1 日离开了公司。然而,他稍后被重新雇用(比如说,我不知道,2015 年 2 月 1 日)。社区会做什么?

a) 复制他的条目并为他分配一个完全不同的 ID? -可能的缺点:在计算人员流失、新员工等时可能会扭曲统计数据。

b) 为重新雇用添加一个新列,尽管这种情况很少发生并且可能基本上不会被使用。 -可能的缺点:可能会与程序中的其他功能发生冲突,例如搜索当前员工,除非选中。

c) 删除学期日期:不可能。统计数据需要显示在任何给定时间雇用和任命的所有人员,这会导致计算不准确。

d) 其他:_____ <

我倾向于选项“a”。我认为可能有一种方法可以调整计算,以反射(reflect)在计算损耗和增长时存在重新雇用的情况。社区怎么看?

最佳答案

在您发布的 3 个解决方案中,选项 A 是最可行的。正如您提到的,选项 a 的最大缺点是您会丢失从长远来看可能有值(value)的历史数据。

我同意您对“b”和“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 进行查询,以获取您特别感兴趣的数据,并且可以包含无限数量的员工事件。您始终可以选择给定键集中的最后一个事件。

关于mysql - 如何处理必要的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41212091/

相关文章:

mysql - SQL:在groupby数据中查找前n个

mysql - NOT NULL 单元格的 SQL 语法

php - 如何使用 php/mysql 预加载或类似方法优化 mysql 查询

java - JDBC 查询错误

sql - 基于不同表的表和表单 - 查看表中是否存在公共(public)记录并在表单中插入 "yes"或 "no"值

mysql - Entity Framework Code First - MySQL - 错误找不到表

java - 我正在尝试通过 jdbc 连接 MySQL 数据库,但代码抛出错误 "java.lang.ClassNotFoundException: com.mysql.jdbc.Driver"

python - Sqlalchemy 在查询过程中失去连接

java - LINQ for Java 工具

java - java.sql.Blob 包含什么?