0

我有两张桌子:

  • 客户(ID、姓名、HomeAddressId)
  • 地址(ID、街道、城市、州)

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

4

4 回答 4

4

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

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

于 2012-11-05T01:46:27.053 回答
0

如果是这样的话,你为什么不让null价值放在HomeAddressID桌子Customers上呢?但仍然在其上添加键约束。

CREATE TABLE Customer
(
    Id INT, 
    Name VARCHAR(50), 
    HomeAddressId INT NULL,
    CONSTRAINT tb_fk FOREIGN KEY (HomeAddressId) REFERENCES Address(ID)
)
于 2012-11-05T01:48:45.397 回答
0

你不能这样做,也不应该这样做。由于这是外键约束的主要规则,要保证数据的一致性。

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

于 2012-11-05T01:52:29.233 回答
0

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

于 2012-11-05T01:55:24.647 回答