多対多関係の標準結合テーブルがあります。主テーブルは2つのフィールドの複合キーです。 2つのフィールドは、結合された各テーブルのIDです。多対多結合に関連付けられたテーブルの子のサブセットのテーブルを結合します。
結合されたテーブルの1つに、別のテーブルにある多くの子があります。標準的な一対多の関係。
これはすべて問題ありません。しかし今、私はこれらの子のサブセットを指定して、多対多の関係の遠い側のテーブルに関連付ける必要があります。具体的には:
表:競馬場
PK:ID
表:厩舎
PK:ID
表:StablesToRaceCourses
RaceCourseIDと
StableID
表:馬
PK:ID
FK:StableID
PKは、2つの外部キーの複合キーであります
それはすべて罰金です - 馬は単一の安定地に属し、競走馬はいくつかの厩舎にアクセスできます。しかし、難しい部分は:各RaceCourseは、それがアクセスする安定から馬のサブセットを選択することができます。理想的には、この新しいテーブルは、馬が馬の安定に既にリンクされている馬コースを関連付けることのみを許可します。
ような何か:
表:HorsesForRaceCourses
FK:StablesToRaceCourses.StableID
にStableIDリンク FK:馬にHorseIDリンク
FKをStablesToRaceCourses.RaceCourseIDするRaceCourseIDリンクに.ID
ここで、PKは3つの外部キーの複合です。これは妥当と思われますか?私はMS Accessを使用していますが、 "プライマリテーブルの参照フィールドに一意のインデックスが見つかりません"という私に参照整合性を強制することはありません。このテーブルからStableIDを削除して(そしてRaceCourseに直接リンクして)、これを動作させることができますが、RaceCourseがすでにそのHorseのStableに関連付けられていない限り、RaceCourseがHorseに関連付けられていないことを保証するアプリケーションロジックに頼る必要があります。たぶん私はこのためにデータベースをあまりにも多く求めているのでしょうか?