代码之家  ›  专栏  ›  技术社区  ›  IsmailS

所有数据库表中createddate和modifieddate列的优缺点

  •  2
  • IsmailS  · 技术社区  · 14 年前

    利弊是什么?我们什么时候应该拥有它们,什么时候不应该?

    更新

    在repositoryFactory自动生成的更新sp中,此注释是什么?是否与上述不存在的列有关?

    --The [dbo].[TableName] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated
    
    5 回复  |  直到 14 年前
        1
  •  11
  •   Mark Byers    14 年前

    如果你 不要 需要有关数据的历史信息添加这些列将不必要地填充空间,并使页面上容纳的记录更少。

    如果你 可以 需要历史信息,那么这可能不足以满足您的需求。您可能需要考虑使用其他系统,如validFrom和validTo,并且永远不要修改或删除任何行中的数据,只需将其标记为不再有效并创建新行。

    有关更多信息,请参阅维基百科 different schemes for keeping historic information 关于你的数据。你提出的方法与 Type 3 在那个页面上,它也面临着同样的缺点,即只记录最后一次更改的信息。我建议你也读一些其他的方法。

        2
  •  3
  •   HLGEM    14 年前

    我所能说的是,数据(或完整的审计表)帮助我找到了导致主要数据问题的原因或原因。它所需要的只是一个用途,让您相信花额外的时间来保持这些字段的最新是件好事。

    我通常不会对只通过单个自动进程填充的表执行此操作,其他任何人都没有对该表的写权限。而且,对于用户通常也不能更新的查找表,通常不需要它。

        3
  •  2
  •   D'Arcy Rittich    14 年前

    拥有它们几乎没有缺点,所以如果你有任何机会需要它们,那么就添加它们。

    人们可能会提到性能或存储问题,但是,

    • 实际上,它们对 SELECT 现代硬件性能,并适当指定 选择 条款
    • 写性能可能会有轻微的影响,但这可能只是OLTP类型系统中的一个问题,而这正是您想要这些类型的列的原因。
    • 如果您正处于这样添加列的阶段,那么在性能方面,这样的列是一个解除限制的因素,那么您很可能希望将SQL数据库作为一个存储平台而不再使用。

    CreatedDate ,我几乎总是用默认值设置它 GetDate() 所以我从不需要考虑。在构建我的模式时,我将添加这两个列,除非它是一个没有用于管理它的GUI的查找表,因为我知道如果手动修改,数据不太可能保持最新。

        4
  •  2
  •   nvogel    14 年前

    一些DBMS提供了其他方法来自动捕获这些信息。例如Oracle Flashback或Microsoft变更跟踪/变更数据捕获。这些方法还捕获了比最新修改日期更详细的信息。

        5
  •  1
  •   A-K    14 年前

    该列类型的时间戳具有误导性。它与时间无关,它是rowversion。它广泛用于乐观并发性, example here