三元关系:拥有一个表和拥有多个表有什么区别?


8

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

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


这是我导出的表(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
-------------------------

题:

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

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

在我看来,与每个关系(R1和R2)有两个单独的表相比,有一个表是一个更好的解决方案,但是我不知道这是否是真的,或者这是一个好习惯。

Answers:


6

两种解决方案为不同的规则建模。在三元表中,您说的是公司在特定行业中只能拥有某些产品。当然,在不同的领域中会有不同的产品集,尽管两组可能会重叠。

使用二进制表,您要说明该部门对与我公司相关的产品没有影响。同样,该公司对哪个产品属于哪个部门也没有影响。

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

编辑:对于规则

  1. 一个公司生产许多产品/每个产品都是由一个公司生产的
  2. 一个公司仅报告一个部门/每个部门报告许多公司
  3. 产品仅在一个部门中出售/每个部门都有许多产品。

我将拥有这些实体类型

部门-SectorID

公司-CompanyID,SectorID

产品-产品ID,公司ID

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

顺便说一句,关系名称“具有”,“属于”和“是”经常隐藏得比它们所阐明的要多。如果您找到使用这些的BA,请让他们再考虑一下。


假设业务规则是:1)公司生产产品;2)公司属于一个部门(部门示例:机械,食品,软件);3)产品属于行业。我力求简洁,并付出了隐藏重要信息的代价。谢谢!
feelthhis 2014年

我的评论提出了另一个问题:以上ERD模型遵循哪些业务规则?有没有办法使ERD关于业务规则非常精确?三元表是否准确代表了上面的ERD?如果是这样,那么就上述3条业务规则而言,上面的ERD是错误的模型,对吗?
feelthhis 2014年

上面的ERD模型采用哪种业务规则:三元表意味着存在一个具有ProductID,SectorID和CustomerID作为必要和足够密钥的事物。诸如“ GE(公司)为所有航空发动机(行业)提供90%(属性)的资金(属性)”,而“ Goldman为航空发动机提供5%的资金(属性)”和“ GE为风车提供3%的资金”。
Michael Green

@feelthhis-“有没有一种方法可以使ERD关于业务规则非常精确”:是的!这就是ERD所做的。我将编辑我的答案。“三元表是否准确地表示上方的ERD”:我认为您的意思是“上方的规则”。否。产品完全由一家公司生产。公司恰好属于一个部门。知道ProductID可以唯一地标识客户和部门,这些ID在三元表中将是多余的。因此,没有根据您的3条规则对其进行归一化。“如果是..”:我同意。
Michael Green

Ternary Table: a company may...使用表示法(IDSector,IDCompany,IDProduct),是否表示允许元组(1、1、1)和(1、1、2)(“ c1”在“ s1”中生成“ p1”和“ p2”) ); 并且该元组(1,1,1)和(2,1,2)允许的( “C1”中的“S1”生产“P1”和“S2”生产“P2”)?为什么?三元表不应该允许任何可能的元组(IDSector,IDCompany,IDProduct)吗?Binary Tables: sector has...; company has...我虽然是三元表相当于二进制文件,如果三元表允许任何元组(IDSector,IDCompany,IDProduct)。
feelthhis 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.