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

Database design 编辑数据库中的记录并保留以前的记录的好方法是什么,database-design,data-binding,edit,database-schema,Database Design,Data Binding,Edit,Database Schema,我正在开发一个不允许删除的应用程序。它允许编辑,但必须保留旧记录。我不确定实现这一点的最佳方法,但以下是我的想法 我打算通过创建一个类似于包含原始记录的表来实现这一点。示例tableA包含原始记录,然后tableA1包含编辑版本,反之亦然。当需要编辑时,我可以将编辑的记录从tableA移动到第二个表tableA1,并添加一个可以检索原始记录的链接。这是一个好方法,还是有更好的方法?我能想到的一个方法是有一个查找表和一个数据表 **DataTable** -DataID -ColumnA -Col

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


我打算通过创建一个类似于包含原始记录的表来实现这一点。示例
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
中没有“text/date”信息,并且始终使用与
myOldText
的连接。这样,您就不需要触发器,只需在
oldText
(您将其重命名为btw)中搜索具有相应
id

的最新条目。您可以使用缓慢更改维度的数据仓库技术,将所有数据保存在同一个表中

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

对于除最新版本(允许简单选择)之外的所有记录,当前列都设置为N,并且您还可以选择查看历史记录。(还有其他列,如REC_START_DATE和REC_END_DATE)。
请参见

旧记录与新记录的使用模式是什么?@DrC指向旧记录的链接将始终显示在当前记录旁边。必须保留编辑历史记录。您希望用户多久查看一次旧记录?如果一条记录被编辑了10次,我想他们可以通过所有10个版本返回?@DrC是的,所有更改都必须保留,所有更改都必须保留。