数据库记录修订

时间:2010-06-28 09:40:14

标签: database-design version-control

我有关于数据库记录修订的问题。

首先,我的数据库表包含 name content 列。我希望保存内容(可能还有 name )列的“备份”版本以及进行此编辑的用户。
使用以前版本的审核表是否更好(我应该只保留更改的列或两者)或将所有内容保存在一个表中,只需在其中添加时间戳

注意:我的内容列将是一个文本字段,文本不是很小,会经常更改。

我还想问你是否要很难对表格及其“子”(to-to lists)进行修改。我的意思是继续修改待办事项和前面提到的表。或者如果我以某种方式在 content 列中标记那些待办事项列表会更好(它会降低读写待办事项的性能)吗?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

在大多数情况下,最好有一个单独的History表,原因如下:

  • 查询当前版本的表格很简单(这是普通应用程序中最常见的活动版本);
  • 维护数据完整性更容易(因为唯一约束和外键很简单);
  • 索引读取的性能不会降低太多。

单独表方法的一个问题是,识别属于给定版本的父记录的子记录的版本更加困难。对此没有直接的解决方案。但最糟糕的解决方案是根据版本时间戳进行过滤。

答案 1 :(得分:1)

我们总是构建另一个具有相同名称但后缀为“_audit”的表,以及两个额外的列。唯一的ID和日期时间。然后我们在更新和删除时构建触发器,将旧行放在历史表中。

这样,一次写入的数据不会占用数据库中两倍的空间,我们可以编写查询来确定特定日期的数据。