设计数据库和表以保留更改记录的最佳方法?


16

我需要在项目上设置历史记录功能,以跟踪先前的更改。

假设我现在有两个表:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

示例:我在注释中有一行,并且用户想要更改消息。我想跟踪更改之前和更改之后的状态。

在这些表中的每个表上设置一列的最佳方法是什么,该列将说明某项是否“旧”。0,如果活性OR 1,如果删除/不可见。

我还想创建一个历史记录(AUDIT TRAIL)表,其中包含id先前状态的,id新状态的,这些ID与哪个表有关?


Answers:


5

请查看

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

对于在数据库设计中创建审核跟踪的方法,这是一本很好的文章。审计跟踪对于数据库的实现是必需的。您应该始终能够查看系统中数据库用户的操作。

通过在所有PTA感兴趣的表中添加一些标准PTA(时间点)列,我们可以跟踪在PTA(时间点)系统中更改了哪些行。

我建议以下内容:

DateCreated – the actual date on which the given row was inserted.
DateEffective – the date on which the given row became effective.
DateEnd – the date on which the given row ceased to be effective.
DateReplaced – the date on which the given row was replaced by another row.
OperatorCode – the unique identifier of the person (or system) that created the row.

在OLTP应用程序中应用“解决方案2:专用数据跟踪表”的最佳方法是什么。
— AA.SC

我工作的公司目前使用多种模式,一种专门用于审核跟踪。使用解决方案2时,审计表的设计确实非常简单(这正是我们在这里使用的方法)。分解不同的任务(更新库存表,更新或删除客户信息,提供给客户的信用额等),并根据用户能够执行的常见操作构建审核表。关于是否将解决方案2应用于您的数据库,这是否回答了您的问题,如果没有请澄清。谢谢!
— Hector

实际上,我们已经使用审计表使用第一种方法来审计数据,但是审计数据变得如此庞大,现在我们希望通过仅捕获更改后的列中的数据来转换我们的方法。我的问题是如何实现这种方法?跟踪表的哪一栏被更改的最佳方法是什么?..如果一个表有20多个列,其中之一是DataType Text。
— AA.SC

10

在设计数据的版本控制功能时,有一些最低要求(我认为):

  • 数据的每个版本都应独立且与其他版本无关。这意味着没有标志或其他指示符显示哪个是当前版本,哪些是“历史记录”。这也意味着更新实体意味着仅插入新版本-无需更新以前的版本。
  • 避免所谓的行跨度依赖。那就是一行的一个字段(End_Date)必须与另一行的另一个字段(Start_Date)保持同步的地方。这使得处理数据更加困难,并且是异常的极好来源。
  • 当前版本和所有过去的版本应位于同一表中。这使得可以使用相同的查询来查看“截至”特定日期的过去数据并查看当前数据。
  • 已版本化的数据的外键应与普通(未版本化)数据相同。
  • 设计应该是如此简单或普遍理解,以使新开发人员的学习曲线最小化。

这是我在技术博览会上几次演讲的幻灯片。它涵盖了上述所有方法。而这里是进入更详细的文档。我必须对此文档表示歉意-这是一项正在进行的工作,并非所有部分都已完成。但是它应该为您提供实现从简单版本控制到完整的双时间访问的所有内容所需的所有信息。


1
非常好点!但是,我对此不太了解This means no flag or other indicator showing which is the current version and which are "history.",如果没有标志或指示符,我们如何区分当前版本和历史版本?特别是根据您的第三点,您建议它们应该在同一表中。
— GMsoF

该演示文稿显示了示例设计,包括查询以从表中读取当前和/或过去的数据。如果看起来足够有趣,可以进行更深入的研究,则该文档将包含更多详细信息。
— TommCatt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.