database - 我的 RDBMS 或我的应用程序应该处理数据库参照完整性吗?

标签 database referential-integrity

外键、约束、默认值等项目应该由数据库管理系统(在本例中为 MS Sql 2005)还是应用程序处理?我听取了双方的意见,老实说,我不确定该走哪条路。

我最初打算将它构建到数据库中,但我发现这在我当前的数据库设计中并不总是可行。例如,某些表包含循环引用,无法使用 ON UPDATE CASCADE 进行链接。我遇到的另一个问题是我们可能会使用多个数据库/服务器,而外键约束在链接服务器上不起作用。

我有一些开发人员建议我在应用程序层进行数据验证,而只保留数据库 - 一个存储数据的地方。我喜欢这个想法,但我在很多地方都读到,最好在数据库中构建参照完整性,以允许不通过应用程序层传递的事务。我同意这一点,尽管当我们完成后,所有数据库事务都应该通过应用程序进行。即使我们决定稍后构建插件,我们使用的是 ObjectModel 框架,因此永远不需要重写插入/更新/删除查询。

所以我的问题是,在这种情况下,您是否仍然建议将参照完整性构建到数据库中,还是将其构建到应用程序层中?为什么?

最佳答案

您应该在数据库中尽可能多地维护数据完整性。一旦您声明它,它就是“免费”的,并且无论数据如何到达数据库都保证应用。对我来说,这似乎是显而易见的。

您提出了几个无法在数据库中以声明方式指定的数据库完整性类型的实例。在这些情况下,显然,您必须将完整性编程到中间层或前端,并希望最好的结果。

关于database - 我的 RDBMS 或我的应用程序应该处理数据库参照完整性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893914/

相关文章:

sql - 一个 DBMS 可以支持多种 DSL 语言吗?

SQLite - 按兰德排序()

php - SQLSTATE[HY000] [2002] php_network_getaddresses : getaddrinfo failed

mysql - 我怎样才能最好地保持表中两列之间的完整性?

postgresql - PostgreSQL 中的跨表约束

postgresql - 具有外键约束的关系数据库如何摄取顺序可能错误的数据?

mongodb - 最佳数据记录数据库

mysql - 在 MySQL 中,我可以将参照完整性检查推迟到提交之前吗

sql - 如果其他子项未引用父项,则删除父项

android - sqlite 返回 : error code = 1, msg = near "file_theme_column":语法错误