可选外键其中一个必须是强制性的 - 如何?

时间:2011-10-06 13:37:40

标签: oracle database-design oracle10g foreign-keys

我有一个表有两个可选的外键,每个表都有一个不同的表,其中一个是要填写的,但是哪一个并不重要。我正在考虑使用触发器来强制实施这种“约束”,但这样做却感觉不对。我无法重新设计表格,因此我坚持使用它。

我们正在使用Oracle 10g

有更好的方法吗?

编辑:我不小心遗漏了一些信息。至少要填写一​​列HAS,并且只能填写一列。

2 个答案:

答案 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)

创建另一个表,使其成为您当前引用的两个表的父级。引用新表只有一个外键(不可为空)而不是两个。换句话说,使用超类型/子类型模式。