【发布时间】:2010-10-02 09:33:39
【问题描述】:
数据库触发器是个坏主意吗?
根据我的经验,它们是邪恶的,因为它们会导致令人惊讶的副作用,并且难以调试(尤其是当一个触发器触发另一个触发器时)。通常,开发人员甚至不会考虑查看是否有触发器。
另一方面,如果您的逻辑必须在每次在数据库中创建新的FOO 时发生,那么放置它的最简单的地方就是在 FOO 表上插入触发器。
我们唯一一次使用触发器是为了非常简单的事情,比如设置ModifiedDate。
【问题讨论】:
-
这是一个完全合理的问题,但我不太喜欢耸人听闻的标题。我认为类似“实现数据库触发器时要考虑的最重要问题是什么?”会好很多。
-
该问题已关闭以添加答案,但另请参阅Are database triggers safe for cross table integrity constraints?。 (剧透:不,他们不是)
-
这个网站让我很生气。这是一个 GREAT 问题,但与许多其他问题一样,它已关闭,因为人们缺乏想象力来接受不适合 Q&A 的原始二进制格式的问题,他们出于某种奇怪的原因感到不得不遵循。
-
触发器中的业务逻辑是有问题的(如果你愿意的话,这是邪恶的)。触发器中的数据库逻辑没有问题(完整性、日志记录)。
-
@Quibblesome 我同意。这个问题与我目前正在做的事情有关。而人们太容易跳到stackoverflow上关闭问题。很棒的是,这个页面首先出现在我的谷歌搜索中,所以它仍然可以访问并被认为是相关的。