Sql 数据库记录-有效的开始和结束日期以及外键
是否有人有过处理数据集的经验,其中记录根据有效的开始和结束日期变得有效和无效?问题在于,这些表中的记录具有指向其他表的外键,这些表也具有有效的开始日期和结束日期 似乎您必须为几乎每个表创建新记录,以便在维护历史记录的同时允许外键更新 例如: ---宠物--Sql 数据库记录-有效的开始和结束日期以及外键,sql,database,datetime,Sql,Database,Datetime,是否有人有过处理数据集的经验,其中记录根据有效的开始和结束日期变得有效和无效?问题在于,这些表中的记录具有指向其他表的外键,这些表也具有有效的开始日期和结束日期 似乎您必须为几乎每个表创建新记录,以便在维护历史记录的同时允许外键更新 例如: ---宠物-- 狗名叫贾斯珀,主人是杰克从一月->六月,出售给肯从六月->结束的时间 ---所有者-- 杰克从1月->2月住在A栋,然后从2月->时间结束住在B栋 肯从2月->9月住在C号房子,从9月->时间结束住在D号房子 所以,如果贾斯珀在六月份收到一份
狗名叫贾斯珀,主人是杰克从一月->六月,出售给肯从六月->结束的时间 ---所有者--
杰克从1月->2月住在A栋,然后从2月->时间结束住在B栋
肯从2月->9月住在C号房子,从9月->时间结束住在D号房子 所以,如果贾斯珀在六月份收到一份报告,主人将是住在B栋的杰克。九月份同样的查询将是住在D栋的肯
建立这种关系的最佳方式是什么?以及如何对数据执行“更新”以维护适当的关系?我们处理此类问题的方法是不在同一个表中保留元素的所有权,而是在包含时间线的映射表中保留元素的所有权
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
这样,您就可以在两个表中完整地维护所有权、位置和各自的时间表
如果所有权或位置发生更改,则在相应的时间线表中更新当前所有权/位置的结束时间,并从当前时间和新的结束时间(结束时间)开始添加新条目
您还希望添加一些约束,以确保没有任何重叠的映射,但这取决于您的业务逻辑和首选项。“是否有人有过使用数据集的经验,其中记录根据有效的开始和结束日期变为有效和无效?”
是的,我有过(但那几乎是15年前的事了)
好消息:您的问题(即管理时态数据)是可以解决的
坏消息:您的问题不可能用现在存在的任何SQL系统来解决,也不可能用将来存在的任何SQL系统来解决
对于这个问题的基本处理方法,我可以推荐阅读洛伦兹、达文和达特的《时态数据和关系模型》
对于他们想法的原型实现,我可以推荐SIRA__PRISE