簡體   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