代码之家  ›  专栏  ›  技术社区  ›  Matt Dawdy

数据库中的标准entrydate/updatedate列,没有人使用触发器

  •  1
  • Matt Dawdy  · 技术社区  · 15 年前

    我在过去15年中工作过的每一个地方,几乎在他们使用的每一张表上,都有entrydate和updatedate列(或一些变体)。开发人员或DBA都为SQL Server中的“getDate()”列输入了默认值(我确信在MySQL、Oracle等中有等效值),但他们从不使用更新触发器更新updatedate列。

    触发器有什么严重的问题吗?我是否遗漏了一个原因,为什么这样一个简单的表添加可以消除健忘的开发人员(像我一样)有时会忘记在他们的更新语句中放入updatedate的问题?

    对于其他两个相关的列entryuser和updateuser,也可以这样说——如果您给每个用户一个特定的登录到数据库,那么您也可以使用触发器来处理这两个列。

    我错过了什么?

    1 回复  |  直到 15 年前
        1
  •  3
  •   HLGEM    15 年前

    触发器与其他代码没有区别,有好的触发器和编写好的触发器。写得不好会导致性能和数据质量方面的问题。因为编写触发器的人很少知道如何正确地编写触发器,所以触发器的名声很差,因为它们中的许多都是坏的。

    开发人员也往往会忘记触发器,然后当他们不知道为什么他们认为奇怪的事情(但实际上是设计好的行为)正在发生时会感到沮丧。当开发人员没有能力解决数据问题时,这不是触发器的错误。

    对于更新日期,最好不要用触发器填充。数据从多个应用程序更改而来,如果需要更新日期,则触发器是它的适当位置。不幸的是,在当今世界,“易于维护”的伟大上帝正在从性能和数据质量的角度破坏我们的许多系统。