是否需要使外键不为null

时间:2013-10-26 09:03:13

标签: sql sql-server

是否需要将表中的外键列设为NOT NULL, 如果我们没有明确写出外键列,那么它将是什么? 它可以包含空值吗?

以下两个陈述之间的区别是什么:

[PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)
[PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId)

3 个答案:

答案 0 :(得分:5)

  

是否需要将表中的外键列设为NOT NULL,

不,不需要。 MSDN说: -

  

当在FOREIGN的列中输入NULL以外的值时   KEY约束,该值必须存在于引用列中;   否则,返回外键冲突错误消息。要做   确保复合外键约束的所有值都是   已验证,请在所有参与列上指定NOT NULL。

因此,对您的问题的简单回答是“不需要它。”

外键属性也可以包含NULL值。

您的第二个定义将允许列中的Nulls

来自here: -

  

将FOREIGN KEY约束添加到现有列或   表SQL Server中的列,默认情况下检查现有数据   在列中,以确保除了NULL之外的所有值都存在于   引用的PRIMARY KEY或UNIQUE约束的列。

同时检查 Foreign Key Constraints

答案 1 :(得分:1)

根据sql规范化规则,外键值必须等于主键值或NULL,因此它将包含主键表行中一个值的NULL值。

答案 2 :(得分:0)

不是必需的。不带NOT NULL的外键属性可以包含NULL值,这可以用于表示引用关系中没有这样的元组适用。