我需要为一些新组件构建一个表,以跟踪可用和已用库存。它将是这样的:
CREATE TABLE components
(
component_Id int NOT NULL PRIMARY KEY,
workOrder_Id int FOREIGN KEY,
componentSerial varchar(25) NOT NULL,
foo varchar(50),
bar int,
information nvarchar(250)
date DateTime
)
当FOREIGN KEY workOrderID尚未使用而不是NOT NULL并且默认值为0时,有什么优势可以使其可以为空? 对我来说让它可以为空是更有意义的。
我看了一些类似的情况,但我不确定为什么有人会选择一个而不是另一个。
答案 0 :(得分:9)
如果您的外键的默认值为0,则表示您必须始终保持ID为0的workOrder的存在,作为未引用的组件引用的伪工作订单。这是一个非常难看的黑客。
(假设您的FOREIGN KEY
实际上是一个正确的强制外键,这绝对是可取的,但如果您使用MyISAM就不会发生。这个例子对我不起作用,只是单独说FOREIGN KEY
而没有指定REFERENCES
哪个列不是有效的SQL。)
如果您不喜欢NULL,则替代解决方案是将组件映射到workOrders的连接表,并在component_Id上使用UNIQUE约束。
答案 1 :(得分:6)
可空外键的优点与任何其他可空列的优点相同:如果您没有已知或适用的值存储在给定行中,您可以使用NULL而不是选择“特殊值”没有价值。