【发布时间】:2011-04-26 12:42:10
【问题描述】:
您推荐哪个以及为什么?
我有几个表,当我对数据进行更改时......它应该转到具有生效日期的历史表(审计)。
另一种解决方案是在更改数据时对每个字段进行版本控制以插入新行?
发票信息的最佳方法是什么?商品名称和价格总是变化的
【问题讨论】:
标签: mysql sql database database-design
您推荐哪个以及为什么?
我有几个表,当我对数据进行更改时......它应该转到具有生效日期的历史表(审计)。
另一种解决方案是在更改数据时对每个字段进行版本控制以插入新行?
发票信息的最佳方法是什么?商品名称和价格总是变化的
【问题讨论】:
标签: mysql sql database database-design
它们分别是slowly changing dimensions、type 2 和type 4。
这两种方法都有效,可能更适合您的需求,具体取决于您的模型和查询要求。
基本上,type 2(版本控制)更适合您需要与当前值一样频繁地查询历史值,而type 4(历史表)更适合您更频繁地查询当前值时是针对最新值的更多查询(我的意思是要开发更多查询)。
【讨论】:
isActive 或每个查询的类似字段上添加过滤器。
我们使用并满意的系统:
每个需要历史的表,我们创建一个类似的表,并在末尾添加一个时间戳字段,这成为 PK 的一部分。
对原始表的每次更新,我们以相同的条件插入历史表:
update table x WHERE somthing something
insert into table x_history
select * from x WHERE something something
这可以让您的数据保持干净,并且让您的表格保持精简。
【讨论】:
我个人的偏好是在您的应用程序中使用Observer Pattern 并实现一个单独的历史记录表。这意味着您可以在需要时从历史表中提取数据,并且不会影响查询主表的速度。
【讨论】: