1

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

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

4

3 回答 3

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 连接

于 2013-06-06T23:43:06.977 回答
1
table myText
id  text  date  author  extraInfo

table oldText
id  text  date

oldText.id作为外键引用myText.id

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

这可能不是标准化或最佳设计。另一种方法是没有“文本/日期”信息,myText并始终使用与myOldText. 然后你就不需要触发器了,你只需要搜索最新的条目oldText(你会顺便重命名)与相应的id

于 2013-06-06T23:43:21.703 回答
1

您可以使用渐变维度的数据仓库技术,将所有数据保存在同一个表中。

基本上你有你的普通列和一个 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

于 2013-06-06T23:44:20.757 回答