0

問題は、次の 3 つのテーブルから発生します -

Tour
 - Id

TourPackage
 - Id
 - TourId

Traveller
 - Id
 - TourId
 - PackageId

外部キー制約が設定されています。ただし、旅行者のパッケージも、旅行者が参照している同じツアーを参照する必要があることを強制したいと思います。

Traveller.Tour = Traveller.Package.Tour

これをビジネス層で簡単に実施できるかもしれませんが、データベースでこれを行うことはできますか? または、デザインを再考する必要がありますか?新しいリレーションシップ テーブルで外部キーを抽出する予定はないことに注意してください。Tour と Package は Traveler エンティティの一部であるため、エンティティ自体に存在する必要があると思います。

アップデート

私のアプリケーションは、単一のツアーのコンテキスト内で実行されます。したがって、ロードするすべてのデータは 1 つのツアーを指します。また、ほとんどのデータは Traveler テーブルから取得されます。そのため、TourId をテーブルに直接渡すことは理にかなっています。とにかく、私はこのように関係を見ています。

  • ツアーにはいくつかのパッケージがあります。
  • 旅行者がツアーに参加します。
  • 旅行者は、予約したツアーのパッケージを選択します。

ですから、ツアーだけでなくパッケージについても言及する旅行者は賢明だと思います。私はここで間違っていますか?

4

2 に答える 2

3

まず、外部キーを使用して、Traveler テーブル内のTourIdPackageIdの参照を一貫させることができます。FORIEGN KEY TRAVLELLER(TOURID, PACKAGEID) REFERENCES PACKAGE(TROURID, ID)TourPackage テーブルの UNIQUE(TOURID, ID) と共に。

データ モデルに関しては、ツアーに複数のパッケージがあり、旅行者が 1 つのパッケージに参加する場合、Traveler テーブルに TourId フィールドは必要ありません。3 つのテーブルを結合することで、TourId をいつでも見つけることができます。

ただし、旅行者がツアーで複数のパッケージに参加できる場合は、旅行者を複数のパッケージにリンクするための関係テーブルが必要です。

于 2013-03-07T21:18:27.910 に答える
1

ここに画像の説明を入力

または、「パッケージ」の定義方法によって異なります。

ここに画像の説明を入力

于 2013-03-08T12:39:24.743 に答える