是否需要将表中的外键列设为NOT NULL, 如果我们没有明确写出外键列,那么它将是什么? 它可以包含空值吗?
以下两个陈述之间的区别是什么:
[PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
[PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
答案 0 :(得分:5)
是否需要将表中的外键列设为NOT NULL,
不,不需要。 MSDN说: -
当在FOREIGN的列中输入NULL以外的值时 KEY约束,该值必须存在于引用列中; 否则,返回外键冲突错误消息。要做 确保复合外键约束的所有值都是 已验证,请在所有参与列上指定NOT NULL。
因此,对您的问题的简单回答是“不需要它。”
外键属性也可以包含NULL值。
您的第二个定义将允许列中的Nulls
。
来自here: -
将FOREIGN KEY约束添加到现有列或 表SQL Server中的列,默认情况下检查现有数据 在列中,以确保除了NULL之外的所有值都存在于 引用的PRIMARY KEY或UNIQUE约束的列。
答案 1 :(得分:1)
根据sql规范化规则,外键值必须等于主键值或NULL,因此它将包含主键表行中一个值的NULL值。
答案 2 :(得分:0)
不是必需的。不带NOT NULL
的外键属性可以包含NULL
值,这可以用于表示引用关系中没有这样的元组适用。