私は、個人と会社の2つの主要なエンティティを持つ連絡先アプリケーションを作成しようとしています。人は多くの電子メール、番号、およびアドレスを持つことができます。会社はまた、多くの電子メール、番号、およびアドレスを持つことができます。このシナリオの適切な設計を決定しようとしています。
オプション#1-複数の外部キー
電子メール、番号、およびアドレスには、person_idおよびcompany_idという2つの列があります。データが属するエンティティに応じて、一方はnullになり、もう一方には親にリンクするIDが含まれます。
オプション#2-エンティティごとにタイプごとに1つのテーブル
各テーブルを複製して、company_addressesテーブルとperson_addressesテーブルを作成します。テーブルの数は2倍になりますが、これが現時点で最も理にかなっているソリューションです。
オプション#3-1つのリンクテーブル
1つのテーブルを作成します-「リンク」。このテーブルには、source_id、source_entity、dest_id、dest_entityの4つの列が含まれます。したがって、会社が新しい番号を取得した場合、1、番号、2、会社のような行があります。
オプション#4-複数のリンクテーブルリンク
の種類(company_address、person_address、company_email、person_emailなど)ごとにテーブルを作成します
どのオプションを選択しますか?