Oracle外键约束问题

时间:2011-04-15 09:02:56

标签: sql oracle foreign-keys constraints

我需要在某个表B上定义一个外键约束,其中列ID必须在表A的集合中。 OR 它可能是NULL(这也是有效的值) )。

<击>

(A.ID列不能同时为NULL)。

我应该使用CHECK子句吗?

UPD:对不起,我写错了。我的意思是:

我需要在某个表B上定义一个外键约束,其中列ID必须在表A的集合中。 OR 它可能(那就是也是有效的价值)。

(A.ID列不能同时。)

3 个答案:

答案 0 :(得分:1)

是。

除非插入A.ID = 0的行,否则外键约束将不起作用。

答案 1 :(得分:0)

只需制定一个FOREIGN KEY约束。 B.ID可能仍为NULL

您可以在psoug

上找到一些示例

我不建议存储0而不是NULL0在关系数据中没有语义,并且手动CHECK约束将难以维护,并且可能性能降低很多,因为Oracle的基于成本的优化器可能无法将其用于其查询转换。最好将NULL插入外键列,并可能使用以下任何等效表达式读取它:

NVL(B.ID, 0)
DECODE(B.ID, NULL, 0, B.ID)
CASE B.ID WHEN NULL THEN 0 ELSE B.ID END

答案 2 :(得分:0)

如果我理解正确,您不需要检查约束。只是一个普通的可空列,带有引用A.ID的外键。这样,接受的值都是A.ID中的值,并且为NULL。

在问题更新后更新了答案:如果无法在A.ID中插入值0,则无法使用外键。但正如其他人所说,这不是推荐的做法 - 最好在A.ID中插入0值并创建外键,或者在表B中使用NULL代替0。