我还不能完全理解这些差异。你能描述这两个概念并使用真实世界的例子吗?


当前回答

现实世界还有另一种解释:

一本书属于所有者,所有者可以拥有多本书。但是,这本书也可以在没有所有者的情况下存在,它的所有权可以从一个所有者变为另一个所有者。书籍和所有者之间的关系是一种不可识别的关系。

然而,一本书是由一位作者写的,而且作者可能已经写了多本书。但是,这本书需要作者来写——没有作者,它就不可能存在。因此,这本书与作者之间的关系是一种认同关系。

其他回答

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

非标识关系指定常规关联在对象之间,1:1或1:n基数。

如果父级不是,则可以将非标识关系指定为可选关系通过设置父表基数。。。

比尔的回答是正确的,但令人震惊的是,在所有其他答案中,没有人指出最重要的方面。

人们一再强调,在一种确定的关系中,没有父母,孩子是不可能存在的。(例如用户287724)。这是真的,但完全没有抓住重点。外键为非空就足够了。它不需要是主键的一部分。

因此,真正的原因是:

识别关系的目的是,外键永远不会更改,因为它是主键的一部分。。。因此识别!!!

非识别关系

非识别关系意味着孩子与父母有亲属关系,但可以单独识别。

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

ACCOUNT和PERSON之间的关系无法识别。

确定关系

认同关系意味着需要父母给予孩子身份。孩子只因父母而存在。

这意味着外键也是主键。

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

ITEM_LANG和ITEM之间的关系正在识别。以及ITEM_LANG和LANGUAGE之间的关系。

这里有一个很好的描述:

两个实体之间的关系可分为“识别”或“非识别”。当父实体的主键包含在子实体的主键中时,存在识别关系。另一方面,当父实体的主键包含在子实体中但不作为子实体主键的一部分时,存在非标识关系。此外,不可识别的关系可进一步分类为“强制性”或“非强制性”。当子表中的值不能为空时,存在强制的非标识关系。另一方面,当子表中的值可以为空时,存在非强制的非标识关系。

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

如果您认为在删除父项时应删除子项,则这是一种识别关系。

如果即使父项已删除,子项仍应保留,则它是一个不可识别的关系。

例如,我有一个包含学员、培训、文凭和培训课程的培训数据库:

学员与培训课程有明确的关系培训与培训课程有明确的关系但学员与文凭的关系并不明确

如果删除了相关的学员、培训或文凭,则只应删除培训课程。