【问题标题】:Is there a reason not to put timestamps in every table?是否有理由不在每个表中放置时间戳?
【发布时间】:2019-07-17 04:39:07
【问题描述】:

我正在将createdupdated 时间戳列添加到一些重要的表中,并想知道为什么我不应该将它们放在几乎每个表中“只是为了拥有”,因为存储很便宜。在某种程度上这是不好的做法吗?我是不是很迂腐?

具体来说,我说的是:

created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated TIMESTAMP

【问题讨论】:

  • 答案是,视情况而定。如果您确定您永远不需要时间戳列,则不要费心添加它。除了节省存储空间外,您还可以免于以其他方式维护它。
  • 如果您需要知道表格何时被某人更新或创建的记录使用它。如果您不需要任何更新或创建时间的跟踪,则不要添加它。如果您使用的是 5.6+,则可以在时间戳中设置多个列的默认值,以便更新 TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
  • 谢谢大家!我决定播放“更多数据”,但仍在合理范围内。还要感谢关于默认为 NULL 的提示。
  • 我在这个论坛的很多表中都看到了这些列,但我很少看到任何使用它们的查询。在我的数据库工作中,我很少需要它们。结论:这听起来是个不错的主意,但那些列只会收集灰尘。
  • 我会学究气(咳)。 “创建日期”和“更新日期”是该行的属性,而不是该行所涉及的事物的属性。也就是说,如果表是关于人的,并且我们为“stonefree”这个人找到了一行,那么“date created”不会告诉您“stonefree”的创建时间,它会告诉您row i> 那个(暂时)指的是“无石”被创造出来。还会引发审计问题,特别是如果您可以更新这些值。

标签: mysql sql database-design timestamp


【解决方案1】:

我认为你的想法很好。我创建的几乎所有表都有以下列:

  • createdAt -- 创建日期时间
  • createdBy -- 谁插入了行

有时:

  • createdOn -- 该行是在哪个系统上创建的

我倾向于不经常使用updates(我更喜欢维护所有版本并获取最新版本),但这似乎也是个好主意。

主要的缺点是这会占用每一行的空间。该空间不仅占用空间,而且还意味着每个数据页上可以存储的行数更少——稍微减慢了一些查询。如果您的表有数千或数百万行,那可能不是问题。如果它们有数十亿行,则开销可能是个问题。

在我看来,可维护性的好处远远超过空间问题。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2022-06-12
    • 2017-06-21
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多