2009-06-18 21 views
2

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

似乎您必须最终为每个表创建新记录以允许外键更新,同时保留历史记录。

例子:

---宠物---
狗命名的碧玉,主人是杰克扬 - >君和君卖给肯 - >时间

---所有者结束---
杰克住在A楼,从jan - > feb,然后B楼从feb - >时间的尽头
Ken住在C公寓,从二月 - >九月,D楼从九月 - >时间的尽头

因此,如果在6月份的贾斯珀报告中,老板将在杰克生活在何使用B.同样的查询运行九月将肯在众议院D.

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

回答

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

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

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

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

坏消息:你的问题不能用今天存在的任何SQL系统解决,并且不可能用将来存在的任何SQL系统解决。

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

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

相关问题