4

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

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

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

3 回答 3

6

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

不,它不是必需的。MSDN 说:-

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

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

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

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

这里:-

当将 FOREIGN KEY 约束添加到表 SQL Server 中的一个或多个现有列时,默认情况下检查列中的现有数据以确保所有值(NULL 除外)都存在于引用的 PRIMARY KEY 的列中或唯一约束。

还要检查外键约束

于 2013-10-26T09:09:05.023 回答
1

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

于 2013-10-26T11:08:00.947 回答
0

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

于 2013-10-26T09:05:09.053 回答