数据库完整性:触发器与键/约束

Dmi*_*riy 1 sql database-design data-modeling

我和我的朋友互相争论数据库的设计.
他认为,确保复杂数据库的完整性更好地使用触发器.

我相信为了这个目的,最好使用密钥(主要的,唯一的)和约束.
我认为触发器的使用是危险的,因为它们"在幕后"工作,并且说出执行命令后会发生什么并不容易.而且,如果触发器有bug,它可能会破坏DB的完整性.

你怎么看待这件事?

小智 9

"这是AskTom关于这个主题的讨论.在这个问题上没有严格的规则(否则就没有辩论!)......"

就在这里.声明总是优于程序实现.声明不太容易出错.声明更容易维护.声明性比程序性实现更自我记录.声明式为DBMS提供了优化的最佳时机,而DBMS在大多数情况下都是比程序员更好的优化器.

程序实现的唯一优势是,如果真正的声明性约束可用,它就意味着那些没有人的工作,而不仅仅是我们从SQL获得的糟糕的PK + FK.


Vin*_*vic 6

你实际上并没有说明为什么你的朋友认为他的想法,但是,无论如何,约束/密钥是确保数据完整性的标准,定义和正确的方法,原因有两个:

  • 每个人都知道它们,你会避免使用它们来违反最不惊讶的原则.

  • 它们已经实施,测试和运行.

滚动您自己的数据完整性代码没有实际好处.触发器用于其他用例,例如(例如)保留所有插入的日志.