设计与时间属性有关的数据库

时间:2010-11-03 01:13:43

标签: mysql sql-server database database-design

我想设计一个数据库,描述如下: 每个产品在一个时间点只有一个状态。但是,产品的状态可能会在其生命周期内发生变化。我如何设计产品和状态之间的关系,可以很容易地查询当前特定状态的所有产品?另外,有谁可以请给我一些关于设计数据库的深入细节,这些数据库与上述问题的持续时间有关?谢谢你的帮助

5 个答案:

答案 0 :(得分:7)

答案 1 :(得分:2)

“另外,有谁可以请给我一些关于设计数据库的深入细节,这些数据库与上述问题的持续时间有关?”

嗯,有一本400页的书,名为“时间数据和关系模型”,可以解决你的问题。

该书还解决了其他答复者在答复中没有解决的许多问题,因为时间不够或缺乏空间或缺乏知识。

本书的介绍还明确指出“这本书不是关于今天任何用户都可以(商业上)获得的技术。”。

我可以观察到的是,想要SQL系统的时态特性的用户,简单而简单,只是想要。

PS

即使这些400页可以“压缩一点”,我希望你不要指望我在这里的几段中总结一下有用的所有内容......

答案 2 :(得分:1)

与此类似的表:

product
-----------
product_id
status_id
name

status
-----------
status_id
name

product_history
---------------
product_id
status_id
status_time

然后在产品上写一个触发器,在状态发生变化的每次更新中记录状态和时间戳(sysdate)

答案 3 :(得分:1)

alt text

答案 4 :(得分:0)

Google“双时态数据库”和“缓慢变化的维度”。

这两个名称实际上是相同的模式。

您需要在产品表“VALID_FROM”和“VALID_TO”中添加两个时间戳列。

当您的产品状态发生变化时,添加一个新行,其中“VALID_FROM”为now()其他一些已知的有效数据/时间,并将“VALID_TO”设置为9999-12-31 23:59:59或其他一些日期荒谬遥远的未来。 您还需要将先前当前行上的“9999-12-31 ...”日期删除到当前“VALID_FROM”时间 - 1微秒。

然后,您可以在任何给定时间轻松查询产品状态。