我正在设计一个存储产品信息的数据库,我想存储几个月的历史(价格)数据以供将来参考。但是,在一段时间之后,我想开始覆盖初始条目,只需要很少的努力就可以找到初始条目。有谁知道如何解决这个问题?我的初始设计是有一个名为历史数据的表,每天,它会提取活动数据并将其存储到带有时间戳的历史数据库中。有没有人有更好的主意?或者可以看出我的错误?
答案 0 :(得分:2)
首先,我想对您提出的解决方案发表评论。当然,薄弱的部分是,实际上,你的间隔之间可能会有不止一个变化。这意味着,记录在白天更改了三次,但您只归档最后一次更改。
可以有更好的解决方案,但必须是事件驱动的。如果您拥有支持事件或触发器(如MS SQL)的数据库服务器,则应编写一个在历史记录表中创建条目的触发器代码。如果您的服务器不支持触发器,则可以将归档代码添加到应用程序中(在保存操作期间)。
答案 1 :(得分:1)
这是一个比最初看起来更广泛的话题。马丁福勒有一个很好的narrative关于“随时间变化的事情”。
答案 2 :(得分:1)
您可以在价格表上放置触发器。这样,您可以在每次更新或删除事件时将旧价格存档在其他表格中。
答案 3 :(得分:0)
IMO如果您所需的历史数据是当天数据结束的快照,那么您的方法似乎是合理的 - 过去我使用过夜工作(SP)的类似方法来获取当天的新数据,时间戳和然后使用“删除所有具有时间戳< today-x”的数据,其中x是我想要保留的数据的时间段。
如果您需要跟踪所有历史记录更改,则需要查看触发器。
答案 4 :(得分:0)
我想在一段时间后,开始覆盖初始条目,只需要很少的努力就可以找到初始条目
我们使用Trigger将数据存储在Archive表中,正如其他人所建议的那样。我们的存档表有AuditDate的附加列,并存储“已删除”数据 - 即先前版本的数据。当前数据仅存储在实际表中。
我们使用业务规则修剪存档表,其中包括“删除超过3个月的所有存档数据,其中至少存在一个小于3个月的存档记录;删除超过6个月的所有存档数据”
因此,如果过去3个月内没有价格变动,您仍然可以获得3-6个月前的价格变动记录。
(询问您是否需要自我引用连接的示例来执行删除,或者需要在存档表中存储更改的触发器)