使外键可以为空

时间:2017-10-31 10:41:44

标签: sql

是否可以借助SQL使外键可以为空,即使primary不允许NULL,并且是IDENTITY?感谢。

2 个答案:

答案 0 :(得分:1)

当然外键可以为空。在许多情况下,建议这是正确的做法。在这种情况下,NULL值意味着没有匹配关系。

例如,如果您的员工层次结构与经理作为外键关系,则顶部的人员没有经理 - 这很可能表示为NULL值。 / p>

您可能需要小心,具体取决于您的用户。例如,假设您的客户有CountryId,但您不了解某些客户的国家/地区。数据库的用户可能期望CountryId有效并编写查询,例如:

select . . . 
from Customers cu join
     Countries co
     on cu.CountryId = co.CountryId;

这会无意中过滤掉没有客户的客户。为了避免使用left join,您可以添加“默认”或“未知”国家/地区,并要求外键为非NULL

答案 1 :(得分:0)

我认为你的定义是混合的。

  • 主键必须是不可为空的,唯一的列(或一组列)。

  • Identity是列的属性,只是使您的数据库向列发出自动值。标识列无法更新,但可以使用用户定义的值插入,因此它可以具有非唯一值。

  • 外键是两个表之间的关系。此关系通过列(或一组列)链接两个表。外键是一对一关系或一对多关系。当列位于外键的许多一侧时,它可以为null。