Sql 是否需要将外键设置为非空

Sql 是否需要将外键设置为非空,sql,sql-server,Sql,Sql Server,是否需要将表中的外键列设置为非空, 如果我们没有将外键列显式写为NOTNULL,它将是什么? 它可以包含空值吗 以下两种说法的区别是什么: [PhoneId] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId) [PhoneId] [int] FOREIGN KEY REFERENCES [dbo].[tbl_PhoneNumber](PhoneNumberId) 这不是必需的。不带NOT N

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

以下两种说法的区别是什么:

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

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

是否需要将表中的外键列设置为非空

不,这不是必需的。MSDN表示:-

在“外部”字段的列中输入非NULL的值时 键约束,该值必须存在于引用列中; 否则,将返回外键冲突错误消息。使 确保复合外键约束的所有值均为 已验证,请在所有参与列上指定NOTNULL

因此,你的问题的简单答案是不,这不是必需的

外键属性也可以包含空值

第二个定义将允许列中的
null

发件人:-

将外键约束添加到现有列或 默认情况下,SQL Server表中的列将检查现有数据 在列中,以确保除NULL以外的所有值都存在于 引用的主键或唯一约束的列


同时根据sql规范化规则检查

,外键值必须等于主键值或NULL,因此它将包含主键表行中一个值的NULL值。

意味着默认情况下它也可以包含NULL值@DhananjayPatil:-是的,它可能包含空值!不同之处在于,第二个定义将允许列中为null。第一个关系为
1::0..n
,第二个关系为
0..1::0..n
(如果您熟悉此符号)。@ypercube-这取决于ANSI null默认数据库选项以及客户端库是否调用