繁体   English   中英

SQL外键约束还是静态值?

[英]SQL Foreign Key Constraint or a static value?

我有两个表:

  • 客户(ID,名称,HomeAddressId)
  • 地址(身份证,街道,城市,州)

我想在Customer上放置一个外键约束,以便HomeAddressId有效,但是我也想允许-1作为有效值(即使它不是Address.Id值之一)。 这实际上可行吗? 而且,如果是的话……怎么办?

否。外键是绝对的,外键中的值必须存在于它所引用的主键中。

但是,您可以将外键列声明为NULLable,然后将NULL用作“未知”或“未定义”值。

如果是这种情况,为什么不只在Customers表的HomeAddressID上允许null值? 但是仍然在其上添加键约束。

CREATE TABLE Customer
(
    Id INT, 
    Name VARCHAR(50), 
    HomeAddressId INT NULL,
    CONSTRAINT tb_fk FOREIGN KEY (HomeAddressId) REFERENCES Address(ID)
)

您不能这样做,也不应这样做。 由于这是外键约束的主要规则,因此要确保数据的一致性。

可能是您需要添加一个新列,例如IsValid作为该列值有效性的标志

以上答案中的解决方案是正确的方法。 但是,如果您仍要坚持使用-1方法,请在“地址”表中创建一个默认条目,其ID为-1,所有其他列为null或“未知”。 这样,您的外键约束才有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM