我们正在更新表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,并附上更新日期。
这种做法有哪些漏洞?还可以采用哪些其他更好的做法?
答案 0 :(得分:1)
是否需要日志表或要求正确的历史记录?
Oracle具有历史记录功能Out of the box
我怀疑MySQL的确如此 - 你可能需要采取不同的方式。
Oracle的优势在于它不会失败 - 它是一项核心功能。手卷的缺点是,它是手动卷起的。很多SP,触发器或其他人可能故意或无意中绕过的肮脏。
答案 1 :(得分:1)
我想知道这背后的要求是什么。它是人类可读的(审计,调试等)还是机器可读的(例如事件采购架构模式)?您多久需要回头查看以前的版本?事情经常发生变化吗?
如果它是事件源,那么Stack Overflow就此有一些答案,例如: Using an RDBMS as event sourcing storage和best event sourcing db strategy。有关更多介绍,例如一个Martin Fowler video。
logging changes in MySQL和Using MySQL triggers to log all table changes to a secondary table上还有SO答案和另一种方法(使用1个表格,但添加sort-of version numbers to show each record's validity)。