問題は、次の 3 つのテーブルから発生します -
Tour
- Id
TourPackage
- Id
- TourId
Traveller
- Id
- TourId
- PackageId
外部キー制約が設定されています。ただし、旅行者のパッケージも、旅行者が参照している同じツアーを参照する必要があることを強制したいと思います。
Traveller.Tour = Traveller.Package.Tour
これをビジネス層で簡単に実施できるかもしれませんが、データベースでこれを行うことはできますか? または、デザインを再考する必要がありますか?新しいリレーションシップ テーブルで外部キーを抽出する予定はないことに注意してください。Tour と Package は Traveler エンティティの一部であるため、エンティティ自体に存在する必要があると思います。
アップデート
私のアプリケーションは、単一のツアーのコンテキスト内で実行されます。したがって、ロードするすべてのデータは 1 つのツアーを指します。また、ほとんどのデータは Traveler テーブルから取得されます。そのため、TourId をテーブルに直接渡すことは理にかなっています。とにかく、私はこのように関係を見ています。
- ツアーにはいくつかのパッケージがあります。
- 旅行者がツアーに参加します。
- 旅行者は、予約したツアーのパッケージを選択します。
ですから、ツアーだけでなくパッケージについても言及する旅行者は賢明だと思います。私はここで間違っていますか?