【发布时间】:2013-11-03 03:47:42
【问题描述】:
我们有几个按天间隔分区的表。在进行清除工作以删除一天的分区时,我们的 DBA 通知我们,在执行清除之前,我们必须将所有外键删除到任何表中。这似乎是一个不必要的步骤,因此,我正在求助于 stackoverflow 的智慧。
parentTable childTable
ID (PK) ID (PK)(FK)
date (PK) date (PK)(FK)
otherKey(PK)
parentTable childTable
ID date ID date otherKey
1 10/23 1 10/23 a
2 10/23 2 10/23 a
3 10/23 3 10/23 a
1 10/24 1 10/24 a
2 10/24 2 10/24 a
2 10/24 b
问题是,如果我们要从 childTable 中删除 10/23 分区(首先),然后是 parentTable,我们是否必须在清除之前删除/禁用外键约束,然后再创建它?是否存在必须发生这种情况的数据情况(可能不像我上面的示例所示)。
【问题讨论】:
-
DBA 给了你什么理由?
-
即使按照正确的顺序删除,数据库也能够发现主键存在并且不会处理父表,除非所有引用父表的 FK 都被删除。并不是说它会导致基于记录值的违规行为。在删除分区时,在分区表中,Oracle 会查看是否存在正在使用的外键约束。如果是这样,它不允许从父表中删除一个分区(任何分区)。
标签: oracle database-design foreign-keys purge sql-drop