我还没有得以完全理解的差异。可以描述这两个概念和用现实世界的例子吗?

2009-04-18 05:04:55
问题评论:

感谢您的询问,也有相同的疑问。

谢谢。我使用的 MySQL 工作台,我也有这个问题。

这是一个超的问题。谢谢。

回答:

  • 子表中的行存在取决于父表中的行时确定的关系这可能是主键的令人费解,因为通常的做法是主键的这些天来创建父部件的孩子的外键的子表,而生成 pseudokey。严格地说,"正确"的方法是主键的使孩子的外键部分。但逻辑关系是子不能存在没有父级。

    示例︰ 一个Person有一个或多个电话号码。如果它们只是一个电话号码,我们无法只存储它的Person列中。由于我们需要支持多个电话号码,我们将进行第二个表PhoneNumbers,它的主键包含引用Personperson_id

    我们可能认为电话号码属于一个人,即使他们作为单独的表中的特性进行建模。这是一个强的线索,这 (即使我们不真正纳入person_id PhoneNumbers的主键是标识关系).

  • 主键属性的父不必须成为主键的子属性时非识别性的关系一个很好的例子是一个查阅表格,如外键引用的主键的States.state Person.state上。Person是子表之间States但中行Person不由其state属性。亦即state不是主键的Person的一部分.

    不标识关系可以是可选的还是必需的这意味着外键列允许空值或不允许空值,分别。


请参阅我答案仍然困惑有关识别与非标识关系

+ 1 很好解释,比尔。

+ 1︰ 比尔,"常见的做法是这些天来创建子表中,为 pseudokey,但不是向父部件的子主键的外键"-链接作为其中的原因吗?Google 失败我。

好像"正确"构造标识关系会导致 obnoxiously 巨大的主关键字。如建立了基底有房间的床。Bed_id、 floor_id、 room_id (building_id) 是平台上的 PK。它看起来是的很奇怪,我已经永远不会看到这在实践中,也听到它作为一种解决办法的任何建议。这就是大量的 PK.中的冗余数据

@hobodave︰ 我见过的更大的多列主键。但是我采取您的观点。考虑多列主键传达更多的信息;您可以查询特定建筑物中的所有台Beds表而无需进行任何连接。

@Eugene,是我应得到的为非识别性的关系。user_id本身应为主键, updated_by不是多列主键的一部分。

没有从现实生活中的另一种解释︰

一本书属于所有者,所有者可以拥有多个书籍。但该书可以没有所有者还存在,并且可以更改所有者。一本书和一个所有者之间的关系为非识别性的关系。

然而本书作者,和作者已经编写多个书籍。但需要没法不作者作者写书。因此,书籍和作者之间的关系是标识关系。

非常简单和清楚的 + 1

这很大程度是非常合理的解释,谢谢您 !

这帮助了很多。谢谢 !

普通和简单的示例。极佳,谢谢 !:)

如果由多个作者编写本书,怎么样?它不识别关系更加作为 M:N 类型,为什么?

标识关系指定子对象不存在没有父对象

非标识关系指定对象,1:1 或 1: n 的基数之间普通的关联。

非标识关系可以指定为可选状态所在的父不要求或不强制家长需要通过设置父表基数...

这更好像总在关系中,参与的描述比标识关系。

确切地说有 218 k 声誉专家与进行竞争。只会浪费,那里因为你们都肯定比我更了解。

我不同意上述定义。您可能必须取决于其父对象和该对象要被约束为只用 1 父行链接。HouseWalls。删除房屋,并且没有墙。但墙仅属于一座房子。这样做密切关系将不起作用︰ PK(Wall.id, House.id)将允许您将模型插入到另一个房子相同的墙。

这是很好的说明︰

两个实体之间的关系可能进行分类,如在"标识"或"不确定"。标识关系存在时父实体的主键包含在子实体的主键。另一方面,非识别性的关系存在时父实体的主键包含在子实体,而不是属于子实体的主键键。此外,非识别性的关系可能会进一步归类为"必需"或"非强制性"。强制不标识关系存在时子表中的值不能为空。另一方面,非强制性非识别性的关系存在时子表中的值可以是 null。

http://www.sqlteam.com/article/database-design-and-modeling-fundamentals

这是标识关系的简单示例︰

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name

下面是相应的非识别性的关系︰

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name

您的答案冲突这由 Bill Karwin 的区别是否在该外键"不是"不得"中子行的主键的一部分。

@Andy 白色但标识关系中的父级的主键可能非强制性,即,空,当它是三列复合主关键字的一部分吗?

非标识关系

非识别性的关系意味着,但它的父级可以标识其自身相关子。

PERSON    ACCOUNT
======    =======
pk(id)    pk(id)
name      fk(person_id)
          balance

帐户和人之间的关系为非识别性。

标识关系

标识关系意味着父才可赋予子的身份。孩子只是源于父。

这意味着该外键太为主键。

ITEM      LANGUAGE    ITEM_LANG
====      ========    =========
pk(id)    pk(id)      pk(fk(item_id))
name      name        pk(fk(lang_id))
                      name

ITEM_LANG 和项目之间的关系确定。和 ITEM_LANG 之间的语言太。

请输入您的翻译

What's the difference between identifying and non-identifying relationships?

确认取消