我有一个表有两个可选的外键,每个表都有一个不同的表,其中一个是要填写的,但是哪一个并不重要。我正在考虑使用触发器来强制实施这种“约束”,但这样做却感觉不对。我无法重新设计表格,因此我坚持使用它。
我们正在使用Oracle 10g
有更好的方法吗?
编辑:我不小心遗漏了一些信息。至少要填写一列HAS,并且只能填写一列。答案 0 :(得分:6)
使用检查约束。如果他们都可以填充,那么:
alter table t add constraint c check (col1 is not null or col2 is not null)
或者如果它们是互斥的:
alter table t add constraint c check ((col1 is not null and col2 is null
or (col2 is not null and col1 is null))
答案 1 :(得分:0)
创建另一个表,使其成为您当前引用的两个表的父级。引用新表只有一个外键(不可为空)而不是两个。换句话说,使用超类型/子类型模式。