Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 两个表中的重复数据用于记录保存设计?_Database_Database Design - Fatal编程技术网

Database 两个表中的重复数据用于记录保存设计?

Database 两个表中的重复数据用于记录保存设计?,database,database-design,Database,Database Design,我正在为我的公司设计各种数据库。我担心数据库中存在重复,因为据我所知,我们必须减少重复,并在大多数情况下保持表的规范化 但是,我有一项业务要求,即记录的数据不得一直更新。比如说, 我有三张桌子 病假|员工|职位 简在担任主管时申请休假 几年后,当她成为经理时,她又申请了一次休假 然后,管理员决定将主管(ID:1)的职位名称更改为工程师(ID:1) 系统应根据过去的位置生成报告 07/03/2014 Jane Executive 06/03/2017 Jane Manager 系统不应将报告

我正在为我的公司设计各种数据库。我担心数据库中存在重复,因为据我所知,我们必须减少重复,并在大多数情况下保持表的规范化

但是,我有一项业务要求,即记录的数据不得一直更新。比如说,

我有三张桌子 病假|员工|职位


简在担任主管时申请休假 几年后,当她成为经理时,她又申请了一次休假

然后,管理员决定将主管(ID:1)的职位名称更改为工程师(ID:1)

系统应根据过去的位置生成报告

07/03/2014 Jane Executive  
06/03/2017 Jane Manager
系统不应将报告中的主管更改为工程师

目前的病假表设计是

PK_ID, Leave Type, Leave Date, FK_EmployeeID, FK_PositionID, FK_PositionName
以上是一个糟糕的数据库设计还是有其他方法来处理这个问题

因为如果我使用

PK_ID, Leave Type, Leave Date, FK_EmployeeID
系统将始终查询最新的职位标题,但不会查询旧的职位标题


或者我需要采用版本化数据概念以获得最佳实践?

我真的不认为这有什么问题。 如果表[position]实际上是[positions],那么您可以查询EmployeeID持有的所有职位,然后再子查询结果列表以获取休假数据

下面是一个很好的例子:


您好,我重新表述了我的问题简在担任高管时申请了休假,几年后她在担任经理时又申请了一次休假。然后,管理员决定将主管(ID:1)的职位名称更改为工程师(ID:1)系统应根据过去的职位2014年3月7日Jane Executive 2017年3月6日Jane Manager生成报告。系统不应将报告中的主管更改为工程师。休假表中仍有职位ID和职位名称,您可以根据EmployeeID+LeaveDate对其进行索引,因此,如果职位名称更改,您将看到那个