版本化每个字段vs历史日期字段?

时间:2011-04-26 12:42:10

标签: mysql sql database database-design

你推荐哪个以及为什么?

我有几张表,当我对数据进行更改时......应该转到具有生效日期的历史表(审计)。

另一个解决方案是对每个字段进行版本控制,以便在更改数据时插入新行吗?

发票信息的最佳方法是哪种?商品名称和价格始终在变化

3 个答案:

答案 0 :(得分:4)

这些是slowly changing dimensionstype 2type 4

这两种方法都有效,可能更适合您的需求,具体取决于您的型号和查询要求。

基本上,type 2(版本控制)更适合于需要像当前值一样查询历史值,而type 4(历史表)更适合查询当前值更常见的是,与最近的值相比,有更多的查询(我的意思是开发更多的查询)。

答案 1 :(得分:2)

我们使用并满意的系统:
每个需要历史记录的表,我们创建一个类似的表并在末尾添加一个时间戳字段,这将成为PK的一部分。
在原始表的每次更新中,我们使用相同的条件插入历史表:

update table x WHERE somthing something

insert into table x_history 
select * from x WHERE something something

这样可以保持数据清洁,桌面也很苗条。

答案 2 :(得分:0)

我个人的偏好是在您的应用程序中使用Observer Pattern并实现单独的历史记录表。这意味着您可以在需要时从历史记录表中提取数据,并且不会影响查询主表的速度。