我目前正在开发一个需要创建数据库的开发项目(我将使用 Postgre)。
该数据库的一部分必须为每个公司以及每个用户存储电话簿。这两种“类型”的电话簿存储在两个表中,尽管它们包含相同类型的信息:
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);
(这个请求没有优化,但你明白了要点)。
我还应该提到,由于这三个表,每个用户和公司都拥有他们想要的尽可能多的详细信息(电话号码、地址……):
ContactDetail(IdContactDetail, LbContactDetail, ValueContactDetail)
Company_ContactDetail(IdCompany, IdContactDetail)
User_ContactDetail(IdUser, IdContactDetail)
现在,我在该模型中没有考虑到一些事情:用户和公司希望在他们的电话簿中包括一些不是数据库用户的人。
所以我一直在探索几种解决方案,我需要建议来确定哪个是最好的:
制作另外两个表来存储这些“局外人”的固定数量的详细信息(2 个电话号码,1 个地址)。
让所有“局外人”用户(但我发现将它们存储在一起非常难看)
为每个公司和每个用户存储一个独立的电话簿(LDAP 类型)(然后复制数据)
保留公司和用户的详细联系信息系统,并为其他人使用 LDAP 系统
其他...?