Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库记录-有效的开始和结束日期以及外键_Sql_Database_Datetime - Fatal编程技术网

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