数据库记录 - 有效的开始和结束日期和外键

时间:2009-06-18 07:18:19

标签: sql database datetime

根据有效的开始和结束日期,有没有人有过使用数据集的经验,其中记录有效且无效?问题是这些表中的记录是否具有其他具有有效开始和结束日期的表的外键

似乎你必须最终为每个表创建新记录,以便在维护历史记录时允许外键更新。

示例:

---宠物---
狗叫jasper,老板是杰恩来自jan - >君并且从Jun卖给Ken - >时间结束

---所有者---
   杰克住在J的房子A - > feb,然后来自feb的House B - >时间结束
   肯住在F楼的C楼 - > 9月,House D从9月开始 - >时间结束

所以,如果6月份jasper的报告,所有者将成为住在B的杰克。同样的9月份查询将是House D中的Ken。

如何建立这种关系的最佳方式?以及如何对数据执行“更新”以维持适当的关系?

2 个答案:

答案 0 :(得分:4)

我们用于解决此类问题的方法是不将元素的所有权保留在同一个表中,而是保存在包含时间轴的映射表中。

Table DOGS
 - ID
 - NAME

Table OWNER
 - ID
 - NAME

Table LOCATION
 - ID
 - HOUSE_NAME

Table DOGS_OWNERSHIP:
 - DOG_ID (FK->DOGS.ID)
 - OWNER_ID (FK->OWNER.ID)
 - START_TIME
 - END_TIME

Table OWNER_LOCATION
 - OWNER_ID (FK->OWNER.ID)
 - LOCATION_ID (FK->LOCATION.ID)
 - START_TIME
 - END_TIME

这样,您可以在两个表格中完全保留所有权,位置和相应的时间表。

如果所有权或位置发生更改,则更新相应时间轴表中当前所有权/位置的END_TIME,并从当前时间和新结束时间(结束时间)开始添加新条目。

您还想添加一些约束以确保没有任何重叠映射,但这取决于您的业务逻辑和首选项。

答案 1 :(得分:1)

“根据有效的开始和结束日期,有没有人有使用数据集的经验,其中记录有效且无效?”

是的我(但差不多15年前)。

好消息:你的问题(管理时态数据)是可以解决的。

坏消息:您的问题无法解决当前存在的任何SQL系统,并且不太可能与将来会出现的任何SQL系统解决。

对于问题的基本处理,我可以推荐阅读Lorentzos,Darwen和Date的“时间数据和关系模型”。

对于他们想法的原型实现,我可以推荐SIRA_PRISE。