最后更新日期:反模式?

时间:2009-01-07 21:43:17

标签: triggers anti-patterns last-modified

我一直看到浮动的问题,引用了名为DateLastUpdated的数据库表中的列。我不明白。

我见过的唯一伴侣字段是LastUpdateUserId等。从来没有关于更新发生原因的指标;甚至是更新的内容。

最重要的是,此字段有时是在触发器中写入的,其中可用的上下文更少。

它当然甚至不接近成为审计线索;所以这不能成为理由。如果 并且在日志或其他任何地方的某处审计跟踪,则此字段将是多余的。

我错过了什么?为什么这种模式如此受欢迎?

6 个答案:

答案 0 :(得分:7)

这样的字段可用于检测是否存在由不同进程进行的冲突编辑。从数据库中检索记录时,将获得以前的DateLastUpdated字段。更改其他字段后,将记录提交回数据库层。数据库层检查您提交的DateLastUpdated 是否匹配仍在数据库中的那个。如果匹配,则执行更新(并将DateLastUpdated更新为当前时间)。但是,如果它不匹配,则其他一些进程在此期间更改了记录,并且可以中止当前更新。

答案 1 :(得分:2)

这取决于确切的情况,但是这样的时间戳对于自动生成的数据非常有用 - 如果以后的依赖性发生了变化,你可以弄清楚是否需要重新计算某些东西(这就是构建系统计算需要哪些文件的时候)要重新编译)。

此外,许多网站的页面上都会标记“上次更改”,特别是可能会编辑内容的新闻网站。确切原因不是必要的(如果确实需要审计跟踪,可能存在备份),但最终用户需要看到这些数据。

答案 2 :(得分:1)

这些类型的东西通常用于需要用户操作来启动更新的业务应用程序。通常,会有某种业务应用程序(例如CRM桌面应用程序),对于大多数更新,往往只有一种方式进行更新。

如果你正在查看地址数据,那是通过“维护地址”屏幕等来完成的。

此类数据库审计是为了增强业务级审计,而不是替换它。呼叫中心有时(或者在澳大利亚的金融服务提供商的情况下,例如)记录电话。这也是审计跟踪的一部分,但就桌面应用程序(和相关基础架构)而言,它并不倾向于成为IT解决方案的一部分,尽管这绝不是一个硬性规则。

呼叫中心工作人员通常还会提供某种“备注”或“日志”功能,他们可以在此处键入自由格式文本,了解客户呼叫的原因以及采取的操作,以便下一位操作员可以在他们中断的地方继续顾客回来了。

触发器通常用于准确记录更改的内容(例如,将旧记录写入审计表)。所有这些的目的在于,利用所有信息(注释,记录的呼叫,数据库审计跟踪和日志),可以重建先前的数据状态,以及所产生的动作。这可能是为了查找/解决系统中的错误,或者仅仅是与客户的冲突解决过程。

答案 3 :(得分:0)

它当然很受欢迎 - 例如rails有一个简写,以及创建时间戳(:timestamps)。

在应用程序级别它非常有用,因为相同的模式在视图中非常常见 - 例如在这里查看问题(56秒前回答,等等)。

它也可以在报告中追溯使用以生成统计数据(例如,数据库中记录数量的增长曲线)。

答案 4 :(得分:0)

有几种情况

假设您有一个适合您客户的地址表 你有你的CRM应用程序,客户称他的地址在一个月前已经改变了,使用LastUpdate列你可以看到该客户的这一行在4个月内没有被触及

通常你使用触发器来填充历史表,以便你可以看到所有其他历史记录,如果你看到创建日期和更新日期是相同的,那么没有任何点击历史表,因为你找不到任何东西< / p>

您计算指数(股票市场),您可以通过查看此列轻松看到它已重新计算

有2个数据库服务器,通过比较日期列,您可以找到所有更改是否已复制等等等等

答案 5 :(得分:0)

如果您必须将订阅源发送到作为增量订阅源的客户端,这也是非常有用的,这只是自上次订阅源数据发送以来已更改或插入的记录。