【问题标题】:What are best practices for creating table for "log of changes" in Database Table?在数据库表中为“更改日志”创建表的最佳实践是什么?
【发布时间】:2016-09-24 10:18:40
【问题描述】:

我们正在更新表 XYZ 有以下字段:

First Name|Middle Name|Last Name|Address|DOB|Country|County|(etc.) 

最初,我们正在调用一些 Web 服务,它正在为 XYZ 中的一行发送更新的信息,例如更新名字或 DOB 更新或两者或全部或无。

现在需要在数据库中创建一个日志表来存储旧记录的摘要和对 XYZ 所做的更改。应报告每个受影响的行。

在新表中创建类似的字段是否很好,比如 ABC:

First Name|Middle Name|Last Name|Address|DOB|Country|County|Update_Date 

带有名为“Update_datetime”的附加字段

现在每次调用服务时,我们将从上一行(即 XYZ)中选择值,并将其更新为 ABC 并带有更新日期。

这种做法有哪些漏洞?可以遵循哪些其他更好的做法?

【问题讨论】:

    标签: mysql oracle database-design


    【解决方案1】:

    我回应需要知道这背后的要求。它是人类可读的(审计、调试等)还是机器可读的(例如事件溯源架构模式)?您需要多久返回查看以前的版本?事情多久变化一次?

    如果是事件溯源,那么 Stack Overflow 上有一些关于该问题的答案,例如Using an RDBMS as event sourcing storagebest event sourcing db strategy。有关更多介绍,例如Martin Fowler video

    logging changes in MySQLUsing MySQL triggers to log all table changes to a secondary table 上也有 SO 答案以及另一种方法(使用 1 个表,但添加 sort-of version numbers to show each record's validity)。

    【讨论】:

      【解决方案2】:

      是否需要日志表或适当的历史记录?

      Oracle 有历史功能Out of the box

      我怀疑 MySQL 会这样做 - 你可能必须采取不同的方式。

      Oracle 的优点是它不会失败 - 这是一个核心特性。手卷的缺点是,它是手卷的。人们可以有意或无意地绕过许多 SP、触发器或其他讨厌的东西。

      【讨论】:

        猜你喜欢
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        相关资源
        最近更新 更多