0

私は2つのテーブルを持っています:

  • 顧客 (ID、名前、HomeAddressId)
  • 住所 (ID、番地、市区町村、都道府県)

HomeAddressId が有効になるように外部キー制約をCustomer設定したいのですが、-1 を有効な値として許可したいと考えています (値の 1 つでなくてもAddress.Id)。これは実際に可能ですか?そして、もしそうなら...どのように?

4

4 に答える 4

4

いいえ。外部キーは絶対値であり、外部キーの値は、それが参照する主キーに存在する必要があります。

ただし、外部キー列をNULL可能として宣言してから、「不明」または「未定義」の値にNULLを使用することはできます。

于 2012-11-05T01:46:27.053 に答える
0

もしそうなら、なぜあなたはテーブルの上のnull値を許可しないのですか?ただし、外部キー制約を追加します。HomeAddressIDCustomers

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 アプローチに固執する必要がある場合は、アドレス テーブルに ID を -1 に設定し、他のすべての列を null または「不明」に設定したデフォルト エントリを作成します。このようにして、外部キー制約が有効になります。

于 2012-11-05T01:55:24.647 に答える