我正在开发一个不允许删除的应用程序。它允许编辑,但必须保留旧记录。我不确定实现这一点的最佳方法,但这是我的想法。
我打算通过创建一个与包含原始记录的表类似的表来实现这一点。示例tableA
包含原始记录,然后tableA1
包含编辑版本,反之亦然。当需要编辑时,我可以将已编辑的记录从tableA
第二个表中移出,tableA1
并添加一个可以检索原始记录的链接。这是一个好方法,还是有更好的方法?
我正在开发一个不允许删除的应用程序。它允许编辑,但必须保留旧记录。我不确定实现这一点的最佳方法,但这是我的想法。
我打算通过创建一个与包含原始记录的表类似的表来实现这一点。示例tableA
包含原始记录,然后tableA1
包含编辑版本,反之亦然。当需要编辑时,我可以将已编辑的记录从tableA
第二个表中移出,tableA1
并添加一个可以检索原始记录的链接。这是一个好方法,还是有更好的方法?
我能想到的一种方法是有一个查找表和一个数据表
**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 连接
table myText
id text date author extraInfo
table oldText
id text date
oldText.id
作为外键引用myText.id
然后在更新时创建一个触发器myValues
,将插入到myOldValues
.
这可能不是标准化或最佳设计。另一种方法是没有“文本/日期”信息,myText
并始终使用与myOldText
. 然后你就不需要触发器了,你只需要搜索最新的条目oldText
(你会顺便重命名)与相应的id
您可以使用渐变维度的数据仓库技术,将所有数据保存在同一个表中。
基本上你有你的普通列和一个 VERSION、KEY、CURRENT 和 REC_STATUS 列。当用户编辑记录时,您将记录的副本复制回表中,增加 VERSION 并将原始 REC_STATUS 设置为“已删除”,并将新插入的记录设置为“更新”或“插入”
除最新版本外,所有记录的 CURRENT 列都设置为 N,这允许简单的 SELECTS,您还可以选择查看历史记录。(还有其他列,例如 REC_START_DATE 和 REC_END_DATE)。见http://en.wikipedia.org/wiki/Slowly_changeing_dimension