我的同事提到我们的客户 DBA 提议删除我们项目 Oracle DB 模式中的所有外键约束。起初我不同意这个决定。我是开发人员而不是 DBA。所以后来意识到这个决定背后可能有一些原因。所以我正在尝试了解这个决定的利弊。
项目信息:
- 具有 Hibernate 持久性的 Spring 应用程序。
- 甲骨文 10g 数据库
- 有些批处理作业仅使用 SQL-loader 或普通 JDBC。
这是我的优缺点列表(如果我错了请纠正我)
优点:
由于应用程序持久性由 Hibernate 管理,因此不需要外键级联。它由 Hibernate 使用适当的级联选项进行管理。
Hibernate DELETE 操作(包括删除级联选项)在删除其主键记录之前删除外键表记录(即避免引用完整性问题)。对于无外键情况、外键情况和外键级联情况,此行为是相同的。但是添加外键会不必要地减慢 Oracle 删除操作。
缺点
Hibernate 提供了一种机制来管理对象之间的关联以及关联中的级联操作。但它从来没有提供数据库拥有的完整的参照完整性解决方案。
那些仅使用 SQL-loader 或普通 JDBC 的批处理作业需要参照完整性。
伙计们,我需要你的建议。如果你们中的任何人是 DBA,请提供 DBA 的附加理由。
谢谢你。