SQL 加入 table,最佳方式或替代设计

SQL Join to either table, Best way or alternative design

我正在为一个系统设计数据库,我想出了以下三个table

我的问题是 Address 可以属于 PersonCompany(或将来的其他东西)那么我该如何建模呢?

我不知道我是否设计得当。我认为这应该是一个常见问题(在联系信息等对象的这个小设计过程中,我至少遇到过三次...)但是我找不到很多与我的相似的信息或示例。

感谢您给我的任何指导

您可以采用几种基本方法,具体取决于您希望系统在未来得到证明的程度。

通常,Has-One 关系由拥有实体的外键建模,指向拥有实体的主键。所以你会在 CompanyPerson 上都有一个 AddressId,这将是 Address.Id 的外键。您的情况的复杂性在于如何处理一个人可以有多个地址的事实。如果您 100% 确定只会有家庭地址和工作地址,则可以在 Person 上放置两个外键列,但如果有第三个、第四个、第五个等地址,这就会成为一个大问题。另一种选择是创建一个连接 table、PersonAddress,其中包含三列 a PersonIdAddressIdAddressType,以指示它是否是家庭作业或任何地址。