我的值表(值)中的列是否可以作为knownValues表的外键引用,并且在需要时让它为NULL,如示例所示:
表:值
product type value freevalue
0 1 NULL 100
1 2 NULL 25
3 3 1 NULL
表:类型
id name prefix
0 length cm
1 weight kg
2 fruit NULL
表:knownValues
id Type name
0 2 banana
注意:表values
和表格中的类型knownValues
表当然会引用types
。
答案 0 :(得分:21)
外键中的NULL是完全可以接受的。处理外键中的NULL很棘手,但这并不意味着您将这些列更改为NOT NULL并在引用表中插入虚拟(“N / A”,“未知”,“无值”等)记录。
在外键中使用NULL通常需要使用LEFT / RIGHT JOIN而不是INNER JOIN。
答案 1 :(得分:6)
虽然你可以使外键列可以为空,但我建议设计没有可空外键的表通常会更好。 Nulls总是导致某些含糊不清和不正确的结果,但如果所涉及的列预计会受到某些限制,则这是一个双重问题。
答案 2 :(得分:4)
这是1对0到多对的关系。我已经多次使用SQL Server了。我相信也可以用MySQL做到这一点。
由于与数据聚合相关的问题,我宁愿避免在我的数据库中使用NULL,因此,根据我的设计,我在查找表中放置了一个UNKNOWN行。
答案 3 :(得分:1)
是的,在外键约束列中很可能有NULL。我刚尝试过。请记住,如果您不使用InnoDB存储引擎,则无论如何都会忽略您的外键约束。
答案 4 :(得分:1)
当然,有一种可能性在外键中有一个NULL值,但为此您不必担心这一点,我希望您可以使用InnoDB作为数据库引擎来管理Key约束。对于这种情况,我建议使用Left Join或Right Join从DB获取行,Group By可以用于避免重复。请不要使用Inner Join。