我很困惑在以下情况下应该实现什么模式:
我有两个核心表格root
和user
以及一组继承的'(就ORM而言)表格,例如company
,user_type_1
使用自己唯一的字段集扩展user_type2
表。对于使用自己唯一的字段集扩展user
表的company_type_1
,company_type_2
表,也是如此。
我还有一张company
表。系统中的每个用户和公司都可以拥有自己的地址。
我最初的想法是将address
FK添加到地址(id)PK到根address_id
和user
表。这样,系统中的每个用户或公司都可以与自己的地址相关联。
我的同事提出了另一种数据库架构设计,其中company
和user_id
FK必须添加到company_id
表中。
我现在对这个提议感到很困惑。你能解释一下,或者这个设计可以占有一席之地吗?
答案 0 :(得分:1)
如果您向address_id
和user
表添加company
,则需要添加功能依赖项user_id -> address_id
和company_id -> address_id
。这意味着每个用户或公司可以与单个地址相关联,但每个地址可能与多个用户或公司相关联(除非您添加约束以防止这种情况)。
您的同事将user_id
和company_id
添加到address
表的建议添加了功能依赖address_id -> user_id
和address_id -> company_id
,这意味着每个地址都可以与一个用户,一个公司或两者相关联,但每个用户或公司可能与多个地址相关联(除非您添加约束以防止这种情况)。
在您列出的两个选项之间,有第三个 - 关联的单独表格,例如user_addresses (user_id FK, address_id FK)
和company_addresses (company_id FK, address_id FK)
。这可以处理任何基数(一对一/一对多/多对一/多对多),具体取决于PK(address_id
,user_id/company_id
或两者)和可能的独特限制。
哪种设计正确取决于您的要求。