情况:您有一个巨大的DB(从表而不是记录),然后客户来,并要求您添加“时间戳”到80%的表.
我相信这可以通过使用单独的表(TIMESTAMPS)来实现.除了明显的时间戳列之外,此表还将具有要更新的表的表名和主键. (我假设这里使用int作为大多数表的主键,但表名很可能是一个字符串).
假设这个基本的情景来画图.我们会有两张桌子:
付款: – (你平常的记录)
TIMESTAMP: – {current timestamp} {TABLE_UPDATED,id_of_entry_updated,timestamp_type}
请注意,在本设计中,您不需要本机付款对象中的两个“额外”列(顺便提一下,可能会通过您的ORM解决方案),因为您现在正在使用TABLE_UPDATED和id_of_entry_updated进行索引.此外,timestamp_type将告诉您该条目是否用于插入(例如“1”),更新(例如“2”)以及您可能想要添加的任何内容,如“删除”.
我想知道你对这个设计的看法.我对最佳做法最感兴趣,随着时间的推移,它们有效和规模.参考文献,链接,博客条目都非常受欢迎.我知道至少有一个专利(待定)试图解决这个问题,但似乎细节目前不是公开的.
干杯,
爱德华多
解决方法
分离表设计的缺陷(除了其他人突出显示的连接性能之外)是假设每个表都有一个关键字的标识列.这并不总是真的.
如果您使用sql Server,新版本的2008版本支持它们称之为Change Data Capture的应用程序,可能会消除您正在讨论的许多困扰.我认为Oracle也可能有类似的东西.
更新:显然Oracle称它与sql Server相同.或者,sql Server称它与Oracle相同,因为Oracle的实现是第一个;
http://www.oracle.com/technology/oramag/oracle/03-nov/o63tech_bi.html