数据库架构设计和外键

时间:2016-07-01 10:08:45

标签: database database-design architecture database-schema

我很困惑在以下情况下应该实现什么模式:

我有两个核心表格rootuser以及一组继承的'(就ORM而言)表格,例如companyuser_type_1使用自己唯一的字段集扩展user_type2表。对于使用自己唯一的字段集扩展user表的company_type_1company_type_2表,也是如此。

我还有一张company表。系统中的每个用户和公司都可以拥有自己的地址。

我最初的想法是将address FK添加到地址(id)PK到根address_iduser表。这样,系统中的每个用户或公司都可以与自己的地址相关联。

我的同事提出了另一种数据库架构设计,其中companyuser_id FK必须添加到company_id表中。

我现在对这个提议感到很困惑。你能解释一下,或者这个设计可以占有一席之地吗?

1 个答案:

答案 0 :(得分:1)

如果您向address_iduser表添加company,则需要添加功能依赖项user_id -> address_idcompany_id -> address_id。这意味着每个用户或公司可以与单个地址相关联,但每个地址可能与多个用户或公司相关联(除非您添加约束以防止这种情况)。

您的同事将user_idcompany_id添加到address表的建议添加了功能依赖address_id -> user_idaddress_id -> company_id,这意味着每个地址都可以与一个用户,一个公司或两者相关联,但每个用户或公司可能与多个地址相关联(除非您添加约束以防止这种情况)。

在您列出的两个选项之间,有第三个 - 关联的单独表格,例如user_addresses (user_id FK, address_id FK)company_addresses (company_id FK, address_id FK)。这可以处理任何基数(一对一/一对多/多对一/多对多),具体取决于PK(address_iduser_id/company_id或两者)和可能的独特限制。

哪种设计正确取决于您的要求。