私は2つのテーブルを持っています:
- 顧客 (ID、名前、HomeAddressId)
- 住所 (ID、番地、市区町村、都道府県)
HomeAddressId が有効になるように外部キー制約をCustomer
設定したいのですが、-1 を有効な値として許可したいと考えています (値の 1 つでなくてもAddress.Id
)。これは実際に可能ですか?そして、もしそうなら...どのように?
私は2つのテーブルを持っています:
HomeAddressId が有効になるように外部キー制約をCustomer
設定したいのですが、-1 を有効な値として許可したいと考えています (値の 1 つでなくてもAddress.Id
)。これは実際に可能ですか?そして、もしそうなら...どのように?
いいえ。外部キーは絶対値であり、外部キーの値は、それが参照する主キーに存在する必要があります。
ただし、外部キー列をNULL可能として宣言してから、「不明」または「未定義」の値に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 アプローチに固執する必要がある場合は、アドレス テーブルに ID を -1 に設定し、他のすべての列を null または「不明」に設定したデフォルト エントリを作成します。このようにして、外部キー制約が有効になります。