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

Sch*_*arz 21 mysql database-design audit

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

假设我现在有两个表:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

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

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

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

Tom*_*att 15

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

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

是我在技术展览会上做过几次的演示文稿的幻灯片。它涵盖了如何完成上述所有操作。而这里是进入更详细的文档。我必须为这份文件道歉——这是一项正在进行的工作,并非所有部分都已完成。但它应该为您提供实现从简单版本控制到全面双时访问的所有信息所需的所有信息。

  • 很不错的点!但是,我不太明白这一点`这意味着没有标志或其他指标显示哪个是当前版本,哪个是“历史”。`,如果没有标志或指标,我们如何区分当前版本和历史版本?特别是基于您建议它们应该在同一张表中的第三点。 (2认同)

Hec*_*tor 6

请查看

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.
Run Code Online (Sandbox Code Playgroud)