在数据库表中创建“更改日志”表的最佳实践是什么?

3
我们正在更新名为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中。

这种做法存在哪些漏洞?还可以遵循哪些更好的做法?

2个回答

1

是否需要一个日志表或者一个合适的历史记录呢?

Oracle已经有了开箱即用的历史记录功能。

我怀疑MySQL没有这个功能,你可能需要采用其他方法。

Oracle的优点是它不会出错 - 这是一个核心功能。手工制作的缺点是,它是手工制作的。很多SPs、触发器或其他恶意绕过的东西。


1
我认为需要了解这背后的需求。是要人类可读性(审计、调试等),还是机器可读性(例如事件源架构模式)?您需要多经常查看以前的版本?变化频率有多高?
如果是事件源,请查看Stack Overflow上的一些答案,例如使用RDBMS作为事件源存储最佳事件源数据库策略。如果想了解更多介绍,可以观看Martin Fowler视频

记录MySQL更改使用MySQL触发器将所有表更改记录到辅助表上还有SO答案,以及另一种方法(使用一个表,但添加类似版本号以显示每个记录的有效性)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接