编辑数据库中的记录并保留以前的记录的好方法是什么

时间:2013-06-06 23:35:46

标签: database-design data-binding edit database-schema

我正在开发一个不允许删除的应用程序。它允许编辑,但必须保留旧记录。我不确定实现这个的最佳方法,但这是我的想法。

我打算通过创建一个包含原始记录的表来实现这一点。示例tableA包含原始记录,然后tableA1包含已编辑的版本,反之亦然。当出现编辑需求时,我可以将编辑过的记录从tableA移动到第二个表tableA1,并添加一个可以检索原始记录的链接。这是一个好方法,还是有更好的方法?

3 个答案:

答案 0 :(得分:1)

我能想到的一种方法是拥有一个查找表和一个数据表

**DataTable**
-DataID
-ColumnA
-ColumnB
-ColumnC
-...

**LookupTable**
-RecordID (This is the important ID for you)
-DataID (Key From DataTable)
-Modified DateTime (or could be revisionID or something like that to allow for order of change)

我认为从这里开始就是不言自明的,要获得一条新记录,你选择你想要的记录ID的最新修改日期(或最高版本号),并将其与dataTable一起加入

答案 1 :(得分:1)

table myText
id  text  date  author  extraInfo

table oldText
id  text  date

oldText.id是引用myText.id

的外键

然后在更新myValues时创建一个触发器,该触发器将插入myOldValues

这可能不是标准化或最佳设计。另一种方法是在myText中没有“文字/日期”信息,并始终使用myOldText加入。然后你不需要触发器,你只需要搜索oldText中的最新条目(你要重命名为btw)和相应的id

答案 2 :(得分:1)

您可以使用缓慢变化维度的数据仓库技术,其中所有数据都保存在同一个表中。

基本上你有普通的列和VERSION,KEY,CURRENT和REC_STATUS列。当用户编辑记录时,您将记录的副本复制回表中,增加VERSION并将原始REC_STATUS设置为“已删除”,将新插入的记录设置为“更新”或“插入”

对于除最新版本之外的所有记录,CURRENT列都设置为N,这允许简单的SELECTS,您还可以选择查看历史记录。 (还有其他列,如REC_START_DATE和REC_END_DATE)。 见http://en.wikipedia.org/wiki/Slowly_changing_dimension

相关问题