我正在开发一个不允许删除的应用程序。它允许编辑,但必须保留旧记录。我不确定实现这个的最佳方法,但这是我的想法。
我打算通过创建一个包含原始记录的表来实现这一点。示例tableA
包含原始记录,然后tableA1
包含已编辑的版本,反之亦然。当出现编辑需求时,我可以将编辑过的记录从tableA
移动到第二个表tableA1
,并添加一个可以检索原始记录的链接。这是一个好方法,还是有更好的方法?
答案 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