如何塑造历史记录'连接表中的表

时间:2016-04-01 20:42:26

标签: data-modeling

我需要跟踪包含其他表中的ID的表的历史记录:

enter image description here

我想跟踪company_device表的状态,以便我可以输入条目以了解关系状态何时发生变化(设备分配给公司时,以及何时取消分配等)。 company_device表只包含当前的现有关系。所以我想做点什么'像这样:

enter image description here

但这不起作用,因为它要求在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中删除记录。所以我目前已经解决了这个问题:

enter image description here

所以我不受外键限制。

我的问题是:有更好的方法对此进行建模吗?我可以将status和effective_date添加到company_device表并根据status或effective_date进行查询,但这对我来说似乎不是一个好的解决方案。我想知道别人怎么会这样做。

1 个答案:

答案 0 :(得分:0)

当专门查看问题时(即,在建模业务问题的性质时),您唯一需要的是一个表COMPANY_DEVICE_ASSIGNMENT四列C_ID,D_ID,FROM和TO,告诉您"设备D_ID已从FROM到TO"分配给公司C_ID。

系统确实存在,允许您在此基础上工作,但是他们都不会说SQL(一本优秀的书,对时态数据的主题进行了深入的处理,我甚至称之为&# 34;规范"工作,是"时间和关系理论 - 谷歌搜索它不能错过)。如果你在一个SQL系统中这样做,这个"直截了当"方法不会让你走得很远。在这种情况下,您的实际选择受到以下限制:

  • 您想要/可以/必须使用的DBMS提供的时间特性
  • 您希望/可以/必须使用哪些建模工具来支持哪些功能来生成DDL。

正如Neil的评论所述:SQL标准的最新版本具有"临时支持"作为它的主要新颖性,它们与你的问题绝对相关,但实际提供这些功能的产品相对较少且相差甚远。