質問: Contract.Partyを確認できますが、関係データベースをだましているように感じます。 この問題がどのように呼ばれ、どのように解決するのかわかりません。
回答: この関係は、複合キーを使用してデータベースレベルで自動的に適用できます。ただし、 **guid**を使用することはできません。 GUIDの使用が問題の要件である場合、このソリューションは役に立ちません。 以下に示すソリューションは、追加のコードなしですべてのリレーショナルデータベースで機能します。 ``` create table party ( id int primary key not null ); create table contract ( party_id int not null, contract_no int not null, primary key (party_id, contract_no), constraint fk1 foreign key (party_id) references party (id) ); create table damage ( id primary key not null, party_id int not null, -- not nullable contract_no int, -- nullable constraint fk2 foreign key (party_id) references party (id), constraint fk3 foreign key (party_id, contract_no) references contract (party_id, contract_no) ); ``` **注:** SQL標準では、部分的にnullのFK(なし、部分的、完全)に対して3つの一致するオプションが定義されていますが、各データベースはこれらのオプションを自由に使用できます。