mySQL中的外键和NULL

时间:2010-05-10 12:26:25

标签: mysql sql database-design foreign-keys database-relations

我的值表(值)中的列是否可以作为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

5 个答案:

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