是否可以借助SQL使外键可以为空,即使primary不允许NULL,并且是IDENTITY?感谢。
答案 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。