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 个单独的表似乎是一个更好的解决方案,但我不知道这是否真的如此,或者这是否是一个好的做法。
这两种解决方案对不同的规则进行建模。使用三元表,您是说一家公司可能只在特定部门拥有某些产品。在不同的部门会有一组不同的产品,当然,这两组可能会重叠。
通过二进制表,您可以说明该行业对我所涉及的公司的产品没有影响。同样,公司对哪个部门的产品没有影响。
这些替代方案之间的选择将由您的业务规则决定。它无法通过抽象的学术讨论来回答。我发现最好命名实体之间的关系。说是公司与产品,比方说,有趣的是,说为什么公司与产品有关就更好了。“公司购买产品”与“公司制造产品”或“公司没有使用产品的安全许可”是不同的信息。通过这样做,我经常发现新的关系、属性和实体类型。您可能最终同时需要二元表和三元表!
编辑:对于规则
我会有这些实体类型
扇区 - 扇区 ID
公司 - 公司 ID、扇区 ID
产品 - 产品 ID、公司 ID
如果您的任何规则是多对多的,那么您将需要二进制关联表。
顺便说一句,关系名称“has”、“belongs to”和“is a”通常隐藏的比它们所阐明的要多。如果您发现您的 BA 使用这些,请他们再想一想。