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

Oracle 可选外键,其中一个必须是强制的-如何?,oracle,database-design,oracle10g,foreign-keys,Oracle,Database Design,Oracle10g,Foreign Keys,我有一个表,它有两个可选外键,每个外键指向不同的表,其中一个必须填写,但不管是哪一个。我曾考虑使用触发器来强制执行此“约束”,但这样做感觉是错误的。我不能重新设计桌子,所以我只能坚持下去 我们正在使用Oracle 10g 有更好的方法吗 编辑:我不小心漏掉了一些信息。必须至少填写一列,并且只能填写一列。使用检查约束。如果两者都可以填充,则: alter table t add constraint c check (col1 is not null or col2 is not null)

我有一个表,它有两个可选外键,每个外键指向不同的表,其中一个必须填写,但不管是哪一个。我曾考虑使用触发器来强制执行此“约束”,但这样做感觉是错误的。我不能重新设计桌子,所以我只能坚持下去

我们正在使用Oracle 10g

有更好的方法吗


编辑:我不小心漏掉了一些信息。必须至少填写一列,并且只能填写一列。

使用检查约束。如果两者都可以填充,则:

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

创建另一个表作为当前引用的两个表的父表。仅使用一个外键(不可为null)而不是两个外键引用该新表。换句话说,使用超类型/子类型模式。

我最后做了:alter table t add constraint c check(col1不为null,col2为null或col1为null,col2不为null)