Database design 数据库记录修订

Database design 数据库记录修订,database-design,version-control,Database Design,Version Control,我必须回答有关数据库记录修订的问题 首先,我有一个包含名称和内容列的数据库表。我希望保存内容(可能还有名称)列的“备份”版本以及进行此编辑的用户。 使用以前版本的审计表(我应该只保留更改的列还是同时保留更改的列)还是将所有内容保存在一个表中,只在其中添加时间戳 注意:我的内容栏将是一个文本字段,包含不太小的文本,这些文本将经常更改 我还想问你们,修改表格及其“子项”(列表)是否会变得非常困难。我的意思是保留待办事项和前面提到的表格的修订。或者,如果我以某种方式在内容列中标记这些待办事项列表,效果

我必须回答有关数据库记录修订的问题

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

注意:我的内容栏将是一个文本字段,包含不太小的文本,这些文本将经常更改

我还想问你们,修改表格及其“子项”(列表)是否会变得非常困难。我的意思是保留待办事项和前面提到的表格的修订。或者,如果我以某种方式在内容列中标记这些待办事项列表,效果会更好吗(这会降低读写待办事项的性能吗)


提前谢谢你

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

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

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

我们总是用相同的名称构建另一个表,但后缀为“\u audit”,并增加两列。唯一Id和日期时间。然后,我们在update和delete上构建触发器,将旧行放入历史表中

这样,只写一次的数据就不会占用数据库中两倍的空间,我们可以编写查询来确定数据在某一天的状态