我目前正在开发一个我需要建立数据库的开发项目(我将使用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系统
其他...?