我有两张桌子:
我想在Customer
上放置一个外键约束,以便HomeAddressId有效,但我也想允许-1作为有效值(即使它不是{{1}之一}值)。这有可能吗?而且,如果是这样......怎么样?
答案 0 :(得分:4)
没有。外键是绝对的,外键中的值必须出现在它引用的主键中。
但是,您可以将外键列声明为NULLable,然后对“未知”或“未定义”值使用NULL。
答案 1 :(得分:0)
如果是这种情况,为什么不在null
表的HomeAddressID
上仅允许Customers
值?但仍然在其上添加外来键约束。
CREATE TABLE Customer
(
Id INT,
Name VARCHAR(50),
HomeAddressId INT NULL,
CONSTRAINT tb_fk FOREIGN KEY (HomeAddressId) REFERENCES Address(ID)
)
答案 2 :(得分:0)
你不能这样做,你不应该这样做。由于这是外键约束的主要规则,因此要确保数据的一致性。
您可能需要添加一个新列,例如IsValid
作为列值的有效性标志
答案 3 :(得分:0)
上述答案中的解决方案是正确的方法。但是,如果您仍然需要坚持-1方法,请在Address表中创建一个默认条目,其ID为-1,其他所有列为null或'unknown'。这样您的外键约束就有效了。