現在、データベースを作成する必要がある開発プロジェクトに取り組んでいます (Postgre を使用します)。
そのデータベースの一部には、すべての会社とすべてのユーザーの電話帳を格納する必要があります。これら 2 つの「タイプ」の電話帳は、同じタイプの情報を含んでいますが、2 つのテーブルに格納されます。
PersonalPhoneBook(IdOwner, IdUser)
//Ids of the owner and a user he's in contact with.
CompanyPhoneBook(IdCompany, IdUser)
//Ids of the company and a user it's in contact with
個人の電話帳は、次のようなリクエストで取得されます。
SELECT * F
ROM User
WHERE IdUser IN
(SELECT IdUser FROM PersonalPhoneBook WHERE IdOwner = x);
(このリクエストは最適化されていませんが、要点はわかります)。
また、次の 3 つのテーブルのおかげで、すべてのユーザーと企業が必要なだけ多くの詳細 (電話番号、住所など) を持っていることにも言及する必要があります。
ContactDetail(IdContactDetail, LbContactDetail, ValueContactDetail)
Company_ContactDetail(IdCompany, IdContactDetail)
User_ContactDetail(IdUser, IdContactDetail)
ここで、そのモデルで考慮しなかったことが 1 つあります。ユーザーと企業は、データベースのユーザーではない人を電話帳に含めたいと考えるでしょう。
そのため、いくつかの解決策を検討してきましたが、どれが最適かを判断するにはアドバイスが必要です。
それらの「部外者」に関する固定数の詳細 (2 つの電話番号、1 つの住所) を格納するために、他の 2 つのテーブルを作成します。
すべての「部外者」ユーザーを作成します(ただし、それらをまとめて保存するのはかなり見苦しいと思います)
会社ごと、ユーザーごとに独立した電話帳 (LDAP タイプ) を保存します (ただし、データは複製されます)。
企業とユーザーには連絡先詳細システムを維持し、その他には LDAP システムを使用します。
他の...?