2011-11-05 47 views
2

我讨厌触发器。我被他们绊倒太多次了。但是我想知道每次更新行时指定时间还是更好,或者让触发器负责保持代码最小化?使用触发器记录行更新的时间是否是个好主意?

只是为了澄清,表中的触发器将是对将有一个名为像LastModified

列我负责的是我的存储谁使用数据库与400的开发者之一的特定场景程序。大约有20个表格会有这个LastModified列。这些表格将被每个约10个不同的存储过程更新。

回答

2

触发器肯定是一个巨大的问题,特别是如果它们有多个层次的话。它使调试,性能调整和理解数据逻辑几乎不可能。但如果你将设计保留在单层(表格的触发器)上,并且它用于审计(即放置更新的时间),我认为这不会是一个大问题。所有。同样,如果你正在使用存储过程作为你的表和视图的actor,我认为它会让你的存储过程变得同样有意义(并且更容易记住和回顾)放入当前的日期时间戳。我认为这是一个很棒的设计。

但是,如果您使用即席查询,并且您的datetime字段为not null,那么记住调用当前日期时间将是一个障碍。显然这对存储过程或触发器的上述两个想法不会有问题。

所以我觉得在这种情况下应该是个人喜好(只要你不做字符串成为意大利面条的触发器)。

2

您可以随时使用TimeStamp列(在MySql中)。如果是MSSQL,请注意timestamp列是序列号,而不是DateTime数据类型。

通常,我避免像鼠疫这样的触发器(接近与光标对齐),因此总是手动更新列。对我来说,它有助于加强业务逻辑。但事实上,“更好”是个人意见。

1

通常情况下,如果您有一张需要为每次更新应用特定业务逻辑的表,并且您有来自不同来源的更新,则触发器作为瓶颈最为有用。

例如,假设您有使用数据库的php和python应用程序。你可以试着记住每次更新php时更新python代码,反之亦然,并且希望它们的工作方式都一样。或者你可以使用触发器,这样无论客户端连接什么,表格中都会发生同样的事情。

在大多数其他情况下,触发器是一个坏主意,会造成比他们更大的痛苦。

1

确实,某些触发器在调试时经常会引起混淆和沮丧,特别是在级联外键更新时。

但他们确实有用。 在这种情况下,您可以选择更新400个存储过程并手动更新日期。如果你错过了其中一个存储过程,那么该领域就像无用的一样好。 此外,虽然触发器'隐藏'功能,可以说在存储过程中明确更新它。当有人编写新的存储过程时会发生什么,您需要记录该字段应该更新。

就个人而言,如果它的关键领域是最新的,我会使用触发器。使用INSTEAD OF触发器,以便不必执行更新并触发触发器,只需重写插入语句即可。

相关问题