我的同事提到我们的客户DBA建议将所有外键约束从我们项目的Oracle DB架构中移除。最初我不同意这个决定,因为我是开发人员而不是DBA。后来我意识到这个决定可能有一些理由。因此,我正在尝试获取这个决定的利弊。
项目信息:
1. 使用Hibernate持久化的Spring应用程序。 2. Oracle 10g DB 3. 有批处理作业仅使用SQL-loader或纯JDBC。
以下是我列出的优缺点(如果我错了,请纠正我)
优点:
1. 由于应用程序持久性由Hibernate管理,因此外键级联不是必需的。它由具有适当级联选项的Hibernate进行管理。 2. Hibernate DELETE操作(包括删除级联选项)在删除其主键记录之前删除外键表记录(即避免引用完整性问题)。对于没有外键的情况、有外键的情况和有级联外键的情况,这种行为都是相同的。但是添加外键会不必要地减慢Oracle删除操作。
缺点:
1. Hibernate提供了管理对象之间关联和级联操作的机制,但从未提供DB所需的完整引用完整性解决方案。 2. 那些仅使用SQL-loader或纯JDBC的批处理作业需要引用完整性。
各位,请给我建议。如果你们中有任何一位是DBA,请提供DBA的理由。
谢谢。
项目信息:
1. 使用Hibernate持久化的Spring应用程序。 2. Oracle 10g DB 3. 有批处理作业仅使用SQL-loader或纯JDBC。
以下是我列出的优缺点(如果我错了,请纠正我)
优点:
1. 由于应用程序持久性由Hibernate管理,因此外键级联不是必需的。它由具有适当级联选项的Hibernate进行管理。 2. Hibernate DELETE操作(包括删除级联选项)在删除其主键记录之前删除外键表记录(即避免引用完整性问题)。对于没有外键的情况、有外键的情况和有级联外键的情况,这种行为都是相同的。但是添加外键会不必要地减慢Oracle删除操作。
缺点:
1. Hibernate提供了管理对象之间关联和级联操作的机制,但从未提供DB所需的完整引用完整性解决方案。 2. 那些仅使用SQL-loader或纯JDBC的批处理作业需要引用完整性。
各位,请给我建议。如果你们中有任何一位是DBA,请提供DBA的理由。
谢谢。