Database design 支撑/交叉实体的关键点是什么?

Database design 支撑/交叉实体的关键点是什么?,database-design,entity-relationship,Database Design,Entity Relationship,如果我们有 ____________ / \ ____________ | Person |-------- / \ ------>| Location | |____________| / BornIn \ |_____________ \ / \

如果我们有

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

Person(SSN, first name, last name)
BornIn(..)
Location(City, Country, zip-code)
其中,SSN
Person
的键,
位置由所有三个属性决定

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

  • BornIn
    的关键是什么
  • 薄弱支持实体的关键是什么 我只是还不能在网上找到答案。这不是家庭作业。我正在学习数据库设计

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

    人员表的主键为ssn 位置表必须有一个主键-Location\u 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
    
    人员表的主键为ssn 位置表必须有一个主键-Location\u 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
    
    “弱实体”仅仅意味着它涉及到一个识别关系(作为子端点)。标识关系仅仅意味着子实体的密钥包含父实体的密钥(因此无法单独标识)

    BornIn
    是一种关系,而不是实体,因此它不能是“弱”的,也不能在逻辑模型中有键

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

    • 因为您说它是多对一的,所以它没有映射到表,所以没有键(因为它不是一对一的,所以
      Person
      表中的FK上也没有键)
    • 但是如果它是多对多的,那么
      BornIn
      将映射到一个表,该表的键是两个父键的复合键:
      {SSN,City,Country,zip code}
    “弱实体”只是指它参与了一种识别关系(作为子端点)。标识关系仅仅意味着子实体的密钥包含父实体的密钥(因此无法单独标识)

    BornIn
    是一种关系,而不是实体,因此它不能是“弱”的,也不能在逻辑模型中有键

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

    • 因为您说它是多对一的,所以它没有映射到表,所以没有键(因为它不是一对一的,所以
      Person
      表中的FK上也没有键)
    • 但是如果它是多对多的,那么
      BornIn
      将映射到一个表,该表的键是两个父键的复合键:
      {SSN,City,Country,zip code}

    谢谢你,萨纳特。您是说对于中间表,属性是其他两个关系的键吗?它们也是支持实体的关键?如果是弱支持实体,这种情况会发生变化吗?在弱支持实体中,您可以考虑将所有3个字段都用作键(复合键)。如果数据集变得非常大,多字段复合键可能会非常昂贵。与其使用多字段复合键,不如引入“代理键”。这使得我们可以很容易地使用中间表连接这两个表,并且在性能方面表现良好。谢谢你,Sanath。您是说对于中间表,属性是其他两个关系的键吗?它们也是支持实体的关键?如果是弱支持实体,这种情况会发生变化吗?在弱支持实体中,您可以考虑将所有3个字段都用作键(复合键)。如果数据集变得非常大,多字段复合键可能会非常昂贵。与其使用多字段复合键,不如引入“代理键”。这使得我们可以很容易地使用中间表连接这两个表,并且在性能方面表现良好。谢谢。为什么
    BornIn
    不是M-1关系?难道一个人不应该映射到最多一个出生地(有些可能仍然未知)?谢谢。@User007我只是在假设多对多关系将映射到物理模型。我假设你的问题只是众多问题中的一个(或者说很多,因为你正在学习),我并不是想说这个特殊的例子是多对多的。谢谢。为什么
    BornIn
    不是M-1关系?难道一个人不应该映射到最多一个出生地(有些可能仍然未知)?谢谢。@User007我只是在假设多对多关系将映射到物理模型。我假设你的问题只是众多问题中的一个(或者说很多,因为你正在学习),我并不是想说这个特定的例子是多对多的。