三元关系:单表和多表有什么区别?

fee*_*his 8 erd database-design database-diagrams table

考虑以下三元关系: 三元关系

假设所有实体只有两个属性(PK 和 Name)。


以下是我导出的表格(5 个表格):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------
Run Code Online (Sandbox Code Playgroud)

题:

对于这种三元关系,这是一个很好的解决方案吗?有 2 个表(R1 和 R2)而不是下面的单个表有什么区别:

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------
Run Code Online (Sandbox Code Playgroud)

对我来说,与使用单个表相比,为每个关系(R1 和 R2)使用 2 个单独的表似乎是一个更好的解决方案,但我不知道这是否真的如此,或者这是否是一个好的做法。

Mic*_*een 6

这两种解决方案对不同的规则进行建模。使用三元表,您是说一家公司可能只在特定部门拥有某些产品。在不同的部门会有一组不同的产品,当然,这两组可能会重叠。

通过二进制表,您可以说明该行业对我所涉及的公司的产品没有影响。同样,公司对哪个部门的产品没有影响。

这些替代方案之间的选择将由您的业务规则决定。它无法通过抽象的学术讨论来回答。我发现最好命名实体之间的关系。说公司与产品,比方说,有趣的是,说为什么公司与产品有关就更好了。“公司购买产品”与“公司制造产品”或“公司没有使用产品的安全许可”是不同的信息。通过这样做,我经常发现新的关系、属性和实体类型。您可能最终同时需要二元表和三元表!

编辑:对于规则

  1. 一家公司生产多种产品/每种产品都由一家公司生产
  2. a 公司只报告一个部门/每个部门报告许多公司
  3. 产品只在一个部门销售/每个部门都有许多产品可用。

我会有这些实体类型

扇区 - 扇区 ID

公司 - 公司 ID、扇区 ID

产品 - 产品 ID、公司 ID

如果您的任何规则是多对多的,那么您将需要二进制关联表。

顺便说一句,关系名称“has”、“belongs to”和“is a”通常隐藏的比它们所阐明的要多。如果您发现您的 BA 使用这些,请他们再想一想。