Oracle外键约束问题

| 我需要在某些表B上定义外键约束,其中列ID必须在表A.ID的集合中,否则它可能为NULL(也将是有效值)。 (A.ID列不能同时为NULL)。 我应该使用CHECK子句吗? UPD:对不起,我写错了。我的意思是: 我需要在某些表B上定义外键约束,其中列ID必须在表A.ID的集合中,否则它可能为零(也将是有效值)。 (A.ID列不能同时为零)。     
已邀请:
是。 除非您插入A.ID = 0的行,否则外键约束将不起作用。     
只需设置“ 0”约束即可。
B.ID
可能仍然是
NULL
。 您会在psoug上找到一些示例 我不建议存储
0
而不是
NULL
。 “ 3”在关系数据中没有语义,并且手动“ 6”约束将更难维护且性能可能会降低很多,因为Oracle基于成本的优化器可能无法将其用于查询转换。最好将“ 2”插入外键列,并可能使用以下任何等效表达式进行读取:
NVL(B.ID, 0)
DECODE(B.ID, NULL, 0, B.ID)
CASE B.ID WHEN NULL THEN 0 ELSE B.ID END
    
如果我理解正确,则不需要检查约束。只是一个普通的可为空的列,带有引用A.ID的外键。这样,接受的值就是A.ID和NULL中的所有值。 问题更新后的更新答案:如果无法在A.ID中插入值0,则不能使用外键。但是,正如其他人所说,这不是推荐的做法-最好在A.ID中插入0值并创建外键,或者在表B中使用NULL代替0。     

要回复问题请先登录注册