sql – 外键可以为空吗?

前端之家收集整理的这篇文章主要介绍了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,但不能同时适用,但执行销售必须具有子记录的规则实际上会变得非常好.

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

猜你在找的MsSQL相关文章