【发布时间】:2016-04-22 21:05:48
【问题描述】:
我需要为包含其他表的 id 的表跟踪一些历史记录:
我想跟踪 company_device 表的状态,以便我可以输入以了解关系状态何时更改(设备何时分配给公司,何时未分配等)。 company_device 表将仅包含当前的现有关系。所以我想做这样的“事情”:
但这行不通,因为它要求company_device 中有一条记录,才能在company_device_history 表中满足FK。例如,如果我
insert into company_device values (1,1);
insert into company_device_history values (1,1,'Assigned',now());
由于外键约束,我永远无法从 company_device 中删除记录。所以我目前已经解决了这个问题:
所以我不受外键的限制。
我的问题是:有没有更好的建模方法?我可以将 status 和 effective_date 添加到 company_device 表中,并根据 status 或 effective_date 进行查询,但这对我来说似乎不是一个好的解决方案。我想知道其他人会如何处理这个问题。
【问题讨论】:
-
没关系。外键是不需要的,因为如果您将其删除并将其复制到 company_device_history 中,company_device 中将不存在记录。另一种选择是支持 SQL:2011 Temporal 的数据库,例如 DB2
标签: data-modeling