Database design 使用数据库中的历史记录更新值

Database design 使用数据库中的历史记录更新值,database-design,Database Design,我有下一种情况。在我的数据库中,我得到了两个表和它们之间的一个关系: 文档 PK_文件 FK_员工 正文 员工 PK_员工 名称 姓 因此,当我更新(删除)现有员工时,文档必须具有创建时存在的员工的值。我该怎么做 Upd 1: 例如: 我正在创建一个新文档(PK_Doc=1)并在组合框中选择Employee(Edward Norton)。后来爱德华·诺顿成了爱德华·哈里森。因此,当我打开一个文档(PK_Doc=1)时,combobox with employee的当前值应该是Edward Nor

我有下一种情况。在我的数据库中,我得到了两个表和它们之间的一个关系:

文档
PK_文件
FK_员工
正文

员工
PK_员工
名称

因此,当我更新(删除)现有员工时,文档必须具有创建时存在的员工的值。我该怎么做

Upd 1:
例如:
我正在创建一个新文档(PK_Doc=1)并在组合框中选择Employee(Edward Norton)。后来爱德华·诺顿成了爱德华·哈里森。因此,当我打开一个文档(PK_Doc=1)时,combobox with employee的当前值应该是Edward Norton

您需要一个employee_History表,其中至少包含以下列

主键\员工\历史\ Id 员工Id(非约束) 名称 姓 有效期自(日期)

在员工创建/更新/删除场景中,您在员工历史记录中创建了一条新记录——我将使用SQL触发器来实现这一点


将文档指向不可变的Employee_History表记录,而不是可变的Employee记录。

换句话说,您需要处理一些。Bony建议使用第四种,但你还有其他选择。如果您需要精确的审计跟踪,请参见。

问题不清楚:请提供数据示例以显示您描述的场景的开始和结束。请注意,如果文档中有FK,则无法从员工中删除行。添加Upd 1。这是完整的场景吗?我认为这是一种很好的工作方式。但我会努力解决我的问题,而不添加新的历史表格。我想我可以在Employee中添加两列:Guid和RowDate。和在文档表FK中设置为Guid。因此,当编辑员工时-我将添加一个具有相同Guid的新行。我希望此应用程序仅供个人使用-我永远不会在任何商业设置中批准此方法!实际上,您将有一个表,它看起来包含EmployeeHistory记录,包含EmployeeHistory记录,还有一个Id,看起来它实际上与某个雇员相匹配,只是作为指向该雇员历史中某个任意点的指针,真实Id是您添加的GUID。非常混乱和笨拙的模式设计。参考Denis的链接,我认为您的建议可能是类型2,但您需要清楚地说出您的姓名以避免混淆。感谢提供非常有用的链接。我希望,我的英语足够快地理解这个维基页面