クライアントとサービスを一致させるためのモデルを検討してください。クライアントは、さまざまな時点でサービスのプロバイダーとコンシューマーの両方である可能性があります。クライアントは個人またはグループ(企業)であり、後者は複数の連絡先を持っています。連絡先には、複数のアドレス、電話、電子メールが含まれる場合があります。これらの関係の一部は1対1(たとえば、プロバイダーへのサービス)になりますが、ほとんどは1対多または多対多になります(会社の複数の連絡先は同じアドレスを持ちます)。
このモデルでは、通常、client_contact、contract_addr、contact_phone、contact_email、service_provider、service_consumerなどの複数の関連付けテーブルが存在します。
特定のサービスの消費者の連絡先情報に対して簡単なクエリを発行するとします。データを含む6つのエンティティテーブルに加えて、結合は5つの関連テーブルを参照します。もちろん、この種のクエリについて特に興味深いことは何もありません。私たちは毎日それを行っています。
しかし、それは私に思い浮かびました。すべての関連付けを保持する単一の「マスター」連想テーブルを持っていないのはなぜですか?このマスターテーブルには、2つのPKに加えて「関連付けタイプ」が必要であり、すべてのPKが同じタイプ(int、GUIDなど)である必要があります。
一方では、各結合でタイプとPKを指定する必要があるため、クエリはより複雑になります。一方、すべての結合は同じテーブルにアクセスし、適切なインデックス作成とキャッシュのパフォーマンスが劇的に向上する可能性があります。
このアプローチを説明するパターン(またはアンチパターン)があるかもしれないと思いましたが、オンラインでは何も見つかりませんでした。誰かがそれを試しましたか?もしそうなら、それはスケーリングしますか?
あなたが提供できるどんな参考文献もいただければ幸いです。