支持/交叉实体的关键是什么?

时间:2012-05-07 05:06:05

标签: database-design entity-relationship

如果我们有

 ____________           /      \             ____________
|   Person   |-------- /        \    ------>|   Location |
|____________|        /  BornIn  \          |_____________
                      \          /
                       \        /
                        \      /

Person(SSN, first name, last name)
BornIn(..)
Location(City, Country, zip-code)

其中 SSN Person的关键,Location is由所有三个属性决定。

对于弱实体,密钥由弱实体的所有属性+所有者实体的主键(或外键)组成。

  1. BornIn的关键是什么?
  2. 弱支持实体的关键是什么?
  3. 我在网上找不到答案。这不是功课。我正在学习数据库设计......

    我的坏。这是多对一的关系。

2 个答案:

答案 0 :(得分:1)

“弱实体”仅表示它涉及识别关系(作为子端点)。识别关系只是意味着子实体的密钥包含父密钥(因此不能单独识别)。

BornIn是一种关系,而不是实体,所以它不能“弱”,也不能在逻辑模型中有一个关键。

然而,在物理模型中,BornIn 可以映射到表中并拥有密钥,具体取决于关系基数:

  • 既然你说它是多对一的,它就没有映射到一个表,因此没有密钥(因为它不是一对一的,Person中的FK上没有密钥表格。)。
  • 但如果 多对多,那么BornIn将映射到一个表,其中包含一个键,该键是两个父项的复合键:{SSN, City, Country, zip-code}

答案 1 :(得分:0)

Person Table的PK是ssn 位置表必须有一个主键 - location_id(可能是一个自动增量值)

中间表 - bornIn将ssn和location_id作为其列

因此,您可以通过此中间表将Person表与Location表连接。

 SELECT p.first_name,l.city from Person p inner join bornin b on b.ssn = p.ssn 
                                 inner join Location l on l.location_id=b.location_id