mySQL中的外键和NULL

Ind*_*ial 18 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
Run Code Online (Sandbox Code Playgroud)

表:类型

 id    name     prefix
 0     length   cm
 1     weight   kg
 2     fruit    NULL
Run Code Online (Sandbox Code Playgroud)

表:knownValues

id    Type     name
0     2        banana 
Run Code Online (Sandbox Code Playgroud)

注:该类型的表values&knownValues当然是引用到的types表.

Sal*_*n A 23

外键中的NULL是完全可以接受的.与外键NULL的处理很棘手,但这并不意味着你改变这种列NOT NULL并插入假("N/A","未知","没有价值"等)记录在您的参考表.

在外键中使用NULL通常需要使用LEFT/RIGHT JOIN而不是INNER JOIN.

  • INNER连接或某种OUTER连接的使用取决于您要查找的结果.有时INNER连接会给出完全正确的答案. (3认同)
  • 任何例子?这对我使用InnoDB存储引擎 - MySQL无效 (3认同)

nvo*_*gel 6

虽然你可以使外键列可以为空,但我建议通常更好的设计没有可空外键的表.Nulls总是导致某些含糊不清和不正确的结果,但如果所涉及的列预计会受到某些限制,则这是一个双重问题.

  • 是的,将它放入另一个表中是显而易见的方法.如果在具有正确属性集的表中表示事实,则不需要对不适用的属性使用空值.只为模型添加空值,这样做有一些特殊优势,或者某些软件限制迫使你这样做. (2认同)