��例如联系集borrower涉及两个实体集customer和loan,它们的主码分别为social-security和loan-number,而该联系集没有任何属性。所以borrower表就只有两列,如
图2-9-4
所示。
图2-9-4:表borrower
��在用表表示联系集的时候,有两点需要注意:
��
1、表的冗余
��将弱实体集和相应强实体集相关联的联系集比较特殊,如
图2-9-5
所示,弱实体集payment通过标识性联系集loan-payment依赖于强实体集loan。
图2-9-5:与弱实体集相关联的标识性联系集
弱实体集的主码是{loan-number, payment-number},按照前面的规则,loan的主码和payment主码的并集可以表示联系集loan-payment:loan-payment(loan-number, payment-number)
而在
图2-9-3
中介绍过弱实体集payment可以用表:payment(loan-number, payment-number, payment-date, payment-amount)来表示,它已经包含了表loan-payment的所有属性。因此,在这里loan-payment表是多余的,不必给出.
��
2、表的合并
��如
图2-9-6
所示,它表示从实体集A到实体集B的多对一的联系集AB。用前面介绍的建表方法将得到三个表:A、B和AB。如果实体集A全部参与联系集AB,那么可以将表A和表AB合并成一个表,该表的列就是上述两个表所包含列的并集;如果实体集A部分参与联系集AB,那么合并后的表将会在联系集AB的属性上出现空值null。
图2-9-6:实体集A全部参与的多对一联系集AB
��由于表AB的列包含了实体集A和B的主码属性,因此只需要将实体集B的主码属性和联系集AB所特有的属性作为列加入到表A中,就可以完成表A和表AB的合并。
��
如图2-9-7
所示,联系集account-branch从account到branch是多对一的,且实体集account全部参与到account-branch中。
图2-9-7:多对一的联系集account-branch
按照前面的规则,
图2-9-7
将产生以下三个表:
account(account-number, balance)
account-branch(account-number, branch-name)
branch(branch-name, branch-city, assets)
由于一个帐户不可能不与任何银行分之机构相联系而存在,因此只需要以下两个表就可以表示
图2-9-7
的E-R模式:
account(account-number, balance, branch-name)
branch(branch-name, branch-city, assets)