gpt4 book ai didi

sql - 外键可以为空吗?

转载 作者:行者123 更新时间:2023-12-04 01:42:48 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Can a foreign key be NULL and/or duplicate?

(12 个回答)


7年前关闭。




在我们的数据库项目中,我们有一个表 Sale有一个主键和两个独占外键:Vehicle_IDPiece_ID .例如,如果我们出售一辆车,我们需要 Vehicle_ID作为外键但不是 Piece_ID .我们可以将 NULL 设置为 Piece_ID ,外键可以为空吗?或者有没有办法完成这项工作?

谢谢。

最佳答案

主键的列(或多列)必须为 NOT NULL。一条记录不能由 NULL 唯一标识。因此,外键引用端的 ID 列必须定义为 NOT NULL。

但是,外键关系是可选的,这是一个合理的设计决策,表示这种关系的方法是使键的引用端可选,即允许 NULL。

在数据建模术语中,您所描述的是一个(独占)弧:“一个表......具有两个或多个外键,其中一个并且只有一个可以是非空的。”在逻辑建模中,弧线是完全可以接受的,但有强烈的意见支持将它们作为单独的表来实现。在您的场景中,这将是一个通用的 Sale表加两个子类型表,VehicleSalePieceSale .

分表实现的优点是:

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

  • 然而,优势并不都是单方面的。虽然很容易确保 Sale适用于 VehicleSalePieceSale但不能同时执行,强制执行 Sale 的规则必须有一个 child 的记录实际上变得非常粗糙。

    因此,普遍的建议是独占弧是错误的,这通常是好的建议。但它并不像某些人所说的那么清楚。

    关于sql - 外键可以为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14022750/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com