我有两张桌子:
- 客户(ID、姓名、HomeAddressId)
- 地址(ID、街道、城市、州)
我想放置一个外键约束,Customer
以便 HomeAddressId 有效,但我也想允许 -1 作为有效值(即使它不是其中一个Address.Id
值)。这真的可能吗?而且,如果是这样……怎么办?
我有两张桌子:
我想放置一个外键约束,Customer
以便 HomeAddressId 有效,但我也想允许 -1 作为有效值(即使它不是其中一个Address.Id
值)。这真的可能吗?而且,如果是这样……怎么办?
不可以。外键是绝对的,外键中的值必须存在于它所引用的主键中。
但是,您可以将外键列声明为 NULLable,然后将 NULL 用于“未知”或“未定义”值。
如果是这样的话,你为什么不让null
价值放在HomeAddressID
桌子Customers
上呢?但仍然在其上添加外键约束。
CREATE TABLE Customer
(
Id INT,
Name VARCHAR(50),
HomeAddressId INT NULL,
CONSTRAINT tb_fk FOREIGN KEY (HomeAddressId) REFERENCES Address(ID)
)
你不能这样做,也不应该这样做。由于这是外键约束的主要规则,要保证数据的一致性。
可能您需要添加一个新列,例如IsValid
作为列值有效性的标志
上述答案中的解决方案是正确的方法。但是,如果您仍然需要坚持使用 -1 方法,请在 Address 表中创建一个默认条目,ID 为 -1,所有其他列为 null 或“未知”。这样你的外键约束是有效的。