SQL外键约束还是静态值?

时间:2012-11-05 01:43:35

标签: sql constraints foreign-key-relationship sql-server-2012

我有两张桌子:

  • 客户(Id,Name,HomeAddressId)
  • 地址(Id,Street,City,State)

我想在Customer上放置一个外键约束,以便HomeAddressId有效,但我也想允许-1作为有效值(即使它不是{{1}之一}值)。这有可能吗?而且,如果是这样......怎么样?

4 个答案:

答案 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'。这样您的外键约束就有效了。