6.6.3 触发器与约束的比较

6.6.3 触发器与约束的比较

约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用Transact-SQL代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性应在最低级别上通过索引进行强制,这些索引或是primary key和unique约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的需求,域完整性应通过check约束进行强制,而引用完整性则应通过foreign key约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。

例如:除非references子句定义了级联引用操作,否则foreign key约束只能以与另一列中的值完全匹配的值来验证字段值。check约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的字段验证字段值,则必须使用触发器。约束只能通过标准的系统信息传递错误信息。如果应用程序要求使用自定义信息和较为复杂的错误处理,则必须使用触发器。触发器可通过数据库中的相关表实现级联更改。

触发器功能强大,能轻松可靠地实现许多复杂的功能,触发器本身没有过错,但由于滥用会造成数据库及应用程序的维护困难。在数据库操作中,可以通过关系、触发器、存储过程、应用程序等来实现数据操作。同时,规则、约束、缺省值也是保证数据完整性的重要保障。如果对触发器过分依赖,势必影响数据库的结构,同时增加了维护的复杂程度。