database - 您如何避免在表中添加时间戳字段?

标签 database timestamp

<分区>

我有一个关于我们在许多解决方案中看到的每条记录的两个附加列(timeCreated、timeLastUpdated)的问题。我的问题:是否有更好的选择?

场景:您有一个巨大的数据库(就表而言,而不是记录),然后客户来要求您为 80% 的表添加“时间戳”。

我相信这可以通过使用单独的表 (TIMESTAMPS) 来完成。除了明显的时间戳列之外,该表还将具有表名和正在更新的表的主键。 (我在这里假设您使用 int 作为大多数表的主键,但表名很可能必须是字符串)。

为了想象这个假设这个基本场景。我们会有两个表:

付款:-(您的日常记录)
时间戳:- {当前时间戳} + {TABLE_UPDATED, id_of_entry_updated, timestamp_type}

请注意,在此设计中,您不需要 native 支付对象中的那两个“额外”列(顺便说一下,这可能会通过您的 ORM 解决方案),因为您现在正在通过 TABLE_UPDATED< 进行索引id_of_entry_updated。此外,timestamp_type 会告诉您条目是否用于插入(例如“1”)、更新(例如“2”)以及您可能想要添加的任何其他内容,例如“删除”。

我想知道您对这个设计有什么看法。我最感兴趣的是最佳实践,即随着时间的推移有效和扩展的方法。非常欢迎引用、链接、博客条目。我知道至少有一项专利(正在申请中)试图解决这个问题,但目前似乎还没有公开细节。

干杯, 爱德华多

最佳答案

同时记录进行更改的用户。

分离表设计的缺陷(除了其他人强调的连接性能之外)是它假设每个表都有一个标识列作为键。这并不总是正确的。

如果您使用 SQL Server,新的 2008 版本支持他们称为 <a href="http://msdn.microsoft.com/en-us/library/bb522489.aspx" rel="noreferrer noopener nofollow">Change Data Capture</a> 的东西那应该会带走你所说的很多痛苦。我认为 Oracle 可能也有类似的东西。


更新:显然 Oracle 对它的称呼与 SQL Server 相同。或者更确切地说,SQL Server 称它为与 Oracle 相同的东西,因为 Oracle 的实现首先出现 ;)
http://www.oracle.com/technology/oramag/oracle/03-nov/o63tech_bi.html

关于database - 您如何避免在表中添加时间戳字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154964/

相关文章:

php - 键->值数据有哪些好的、快速的持久存储选项?

sql - 如何编写一个简单的数据库引擎

database - 限制用户只能访问 Oracle SQL Developer 中自己的表

过去的 PHP unix 时间戳

java - Hibernate 可以将 Java Calendar 对象映射到 SQL TIMESTAMP 列吗?

mysql - 将多个查找表与系统表映射的策略?

sql-server - 只读数据库上的事务日志有什么用?

postgresql - Clojure/JDBC/Postgresql : I am trying to update a timestamp value in postgresql from a string, 出现错误

php - 如何使用 CURRENT_TIMESTAMP 在 mysql 中将 Gregorian 格式转换为 Solar 格式

elasticsearch - 使用elasticsearch的时间戳直方图