我想设计一个数据库,描述如下: 每个产品在一个时间点只有一个状态。但是,产品的状态可能会在其生命周期内发生变化。我如何设计产品和状态之间的关系,可以很容易地查询当前特定状态的所有产品?另外,有谁可以请给我一些关于设计数据库的深入细节,这些数据库与上述问题的持续时间有关?谢谢你的帮助
答案 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)
答案 4 :(得分:0)
Google“双时态数据库”和“缓慢变化的维度”。
这两个名称实际上是相同的模式。
您需要在产品表“VALID_FROM”和“VALID_TO”中添加两个时间戳列。
当您的产品状态发生变化时,添加一个新行,其中“VALID_FROM”为now()其他一些已知的有效数据/时间,并将“VALID_TO”设置为9999-12-31 23:59:59或其他一些日期荒谬遥远的未来。 您还需要将先前当前行上的“9999-12-31 ...”日期删除到当前“VALID_FROM”时间 - 1微秒。
然后,您可以在任何给定时间轻松查询产品状态。