1

現在、データベースを作成する必要がある開発プロジェクトに取り組んでいます (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 システムを使用します。

  • 他の...?

4

0 に答える 0