2017-09-22 7 views
0

中間テーブルの複合主キーの属性がNULLであることは問題ありませんか?私は3者関係を持ち、2つのエンティティにはサブクラスがあります。サブクラスには独自の一次キーがあります。中間テーブルの主キーは、サブクラスの主キー(下の図を参照)で構成されているため、属性の一部がnullになることがあります。3者関係のサブクラスのマッピング

私は中間テーブルに注文しました。これらの属性がnullの場合があります。たとえば、顧客がレストランのメニューから何かを注文した後、ケータリング注文IDはnullになります。このようにするのは大丈夫ですか?それがどうやってやらなければならないのでしょうか?

enter image description here

答えて

2

複合キーフィールドはnullにすることはできません。 customerおよびmenuは、orderが特定のタイプの顧客またはメニューに強く依存しないように、それぞれの抽象を隠す必要があります。中間テーブルが必要な場合は、合成プライマリキーを与え、レストランとケータリングメニューの区別を処理します。テーブル継承(Postgresがある場合)またはビューを使用して、各タイプの顧客またはメニューの完全なデータセットを表します。

しかし、最初にこれらのテーブルを分割する必要があることを確認してください。外部キーはnullでも構いませんが、最初はテーブルや外部キーが少なくて済むため、アプリケーションロジックが簡単になります。

+0

中間オーダー()テーブルの場合、メニューサブクラステーブルのレストランとケータリングメニューから2つの主キーを入れ替えてください。したがって、これらの2つのキーをスーパークラスメニューのプライマリキーに置き換え、3つの外部キーを使用してそのプライマリキーを3つのテーブルに戻します。 – Rubiks

+0

'orders'は' customer_id'と 'menu_id'の外部キーを持っていなければなりません。それぞれ、' customers'と 'menus'の1列の主キーを参照しています。レストランとケータリングメニューを別々のテーブルに分割する必要がある場合(これについて非常に注意深く考えてください - 一つのテーブルの疎なデータは世界で最悪のものではありません)、 'menus'は' restaurant_menu_id'と 'catering_menu_id'外部キー。いずれかがヌルになることがあります。チェック制約を使用して、少なくとも1つに値があることを確認できます。 – dmfay

関連する問題