微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 外键可以为空吗?

这个问题在这里已经有一个答案:> Can a foreign key be NULL and/or duplicate?7个
在我们的数据库项目中,我们有一个具有主键和两个专用外键的表Sale:Vehicle_ID和Piece_ID.例如,如果我们出售车辆,我们需要Vehicle_ID作为外键,而不是Piece_ID.我们可以把NULL放到Piece_ID,外键可以是空吗?还是有办法做这项工作?

谢谢.

解决方法

主键的列(或列)必须不为空.无法通过NULL唯一标识记录.因此外键的引用端的ID列必须定义为NOT NULL.

然而,外键密钥关系的合法设计决策是可选的,而通过使密钥的引用结束可选的方式来表示,这就是允许NULL.

在数据建模术语中,您所描述的是一个(排他)弧:“一个具有两个或多个外键的表,其中只有一个可以是非空”.在逻辑建模中,弧线是完全可以接受的,但有强烈的意见,有利于将它们实现为单独的表格.在您的场景中,这将是一个通用的销售表加上两个子类型表,“VehicleSaleand”PieceSale.

独立表实现的优点是:

更易于执行外键约束;
>更容易添加与不适用于零件销售的(例如)车辆销售相关的附加列;
>使用附加子类型更容易扩展模型;
>更清晰的数据模型,可以简化应用开发.

但是,优点并不是单向的.虽然很容易确保销售适用于VehicleSale或PieceSale,但不能同时适用,但执行销售必须具有子记录的规则实际上会变得非常好.

所以,普遍的建议是,排除弧是错误的,一般都是很好的建议.但这并不像有些人所说的那么清楚.

原文地址:https://www.jb51.cc/mssql/75422.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐