我知道在PostgreSQL中父表的子节点会自动继承检查约束,但我关心的是Oracle。
当为父表中的一列实现CHECK约束时,是否也为子表的同一列(FK)实现它们?
答案 0 :(得分:4)
不,如果孩子在该列上使用FK(外键),则没有理由使用单独的CHECK,因为FK将其约束为父级的值,即已使用CHECK的值。
事实上,我建议反对在子项中实现CHECK,因为这是重复逻辑。尽量不要重复完整性规则;如果您需要更改它们,您想在一个地方更改它们。它是父类,用于指定在此类关系中合法(通常)的值。
CAVEAT:在物化视图和查询重写选项的情况下,可能还需要在子项中包含检查约束。虽然我没有证据,但这是值得研究的。另外,请参阅@JeffreyKemp评论可能的优化器影响,尽管我假设统计分析器将从外键和父表中获得足够的信息。