我知道 PostgreSQL 中父表的子表会自动继承检查约束,但我担心的是 Oracle。
当您为父表中的列之一实现 CHECK 约束时,您是否也为子表的同一列(FK)实现它们?
最佳答案
不,如果子项在该列上使用 FK(外键),则没有理由使用单独的 CHECK,因为 FK 将其限制为父项的值,而父项已经在使用 CHECK。
事实上,我建议反对在子对象中实现 CHECK,因为这是重复的逻辑。尽量不要重复完整性规则;如果你需要改变它们,你想在一个地方改变它们。父级指定在这种类型的关系中哪些值是合法的(通常)。
警告:在物化 View 和查询重写选项的情况下,可能还需要在子项中包含检查约束。虽然我没有证据,但这是值得调查的事情。此外,请参阅@JeffreyKemp 评论以了解可能的优化器影响,尽管我假设统计分析器将从外键和父表中获得足够的信息。
关于database - DBMS Oracle 中的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396795/