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

时间:2016-05-26 12:05:07

标签: mysql oracle database-design

我们正在更新表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 个答案:

答案 0 :(得分:1)

是否需要日志表或要求正确的历史记录?

Oracle具有历史记录功能Out of the box

我怀疑MySQL的确如此 - 你可能需要采取不同的方式。

Oracle的优势在于它不会失败 - 它是一项核心功能。手卷的缺点是,它是手动卷起的。很多SP,触发器或其他人可能故意或无意中绕过的肮脏。

答案 1 :(得分: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)。