【问题标题】:SQL Column name for indicating a change用于指示更改的 SQL 列名
【发布时间】:2009-03-03 07:53:31
【问题描述】:

我真的不知道如何制定标题。 但这是我的问题。 我们正在使用 SqlCacheDependencies 来更新缓存对象。但是这背后的查询是“复杂的”,我们想让它变得更容易一些。

我们的第一个想法是添加一个像 DateChanged 这样的字段名,并使用 DateChanged 来检查对象是否实际发生了更改,而不是加载表的所有列。

SELECT DateChanged FROM Table1

代替

SELECT Id, Title, DateChanged, Description FROM Table1

但我希望有人能告诉我是否有其他方法可以做到这一点,或者是否有标准来命名表示更改的列。 “实体框架”或“NHibernate”等框架如何处理这个问题?

【问题讨论】:

    标签: c# sql sqlcachedependency


    【解决方案1】:

    通常称为“时间戳”

    【讨论】:

      【解决方案2】:

      这些是我在“可审计”实体上使用的列:

      version: hibernate 的乐观并发控制
      createdBy: FK 给用户
      modifiedBy: FK 给用户
      createdAt:时间戳
      修改时间:时间戳

      【讨论】:

        【解决方案3】:

        如果您使用的是 SQL Server,请注意时间戳列的命名有些误导。虽然它可用于跟踪列的更改,但它的值与日期或时间无关。它可以被认为是数据库中唯一的 ID,仅此而已。 http://msdn.microsoft.com/en-us/library/aa260631.aspx

        为了知道是否发生了更改,您需要两个时间戳,就像在 cherouvim 的回答中一样。一个在创建对象时设置,另一个在任何修改时设置,可能通过更新触发器。如果它们不同,则说明对象已被编辑,但您无法准确判断时间。

        在 SQL Server 上,您必须使用相同的模式,但使用日期时间列。然后,您可以通过从 mod 日期中减去创建日期来计算行的日期。

        【讨论】:

        • 我认为您不需要两个时间戳。缓存的数据会有时间戳值,可以与数据库中的当前时间戳值进行比较。如果它们匹配,则自缓存该行以来没有对数据库进行进一步更新。
        猜你喜欢
        • 1970-01-01
        • 2020-04-01
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        相关资源
        最近更新 更多