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


当前回答

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

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

因此,真正的原因是:

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

其他回答

订单处理就是一个很好的例子。来自客户的订单通常有一个用于标识订单的订单号、每个订单出现一次的一些数据(如订单日期和客户ID)以及一系列行项目。每个行项目包含一个项目编号,用于标识订单中的行项目、订购的产品、该产品的数量、产品的价格以及行项目的金额,可以通过将数量乘以价格来计算。

标识行项目的编号仅在单个订单的上下文中标识行项目。每个订单中的第一行项目是项目编号“1”。行项目的完整标识是项目编号及其所属的订单编号。

因此,订单和行项目之间的父子关系是一种识别关系。ER建模中一个密切相关的概念叫做“子实体”,其中行项目是订单的子实体。通常,子实体与其从属实体具有强制的子-父标识关系。

在经典的数据库设计中,LineItems表的主键是(OrderNumber,ItemNumber)。今天的一些设计者会给一个项目一个单独的ItemID,它作为主键,并由DBMS自动递增。在这种情况下,我推荐经典设计。

识别关系意味着子实体完全依赖于父实体的存在。

示例帐户表人员表和人员帐户。人员帐户表仅通过帐户和人员表的存在来标识。

非标识关系意味着父表的存在不标识子表。

示例accountType和account.accountType表未标识为存在科目表。

假设我们有这些桌子:

user
--------
id
name


comments
------------
comment_id
user_id
text

这两个表之间的关系将确定关系。因为,评论只能属于其所有者,而不能属于其他用户。例如每个用户都有自己的评论,当用户被删除时,该用户的评论也应被删除。

两个强大的实体之间存在着识别关系。非识别关系不一定是强实体和弱实体之间的关系。可能存在这样的情况:子实体本身具有主键,但其实体的存在可能取决于其父实体。

例如:卖家和一本书之间的关系,其中一本书正由卖家出售,卖家可能有自己的主键,但其实体仅在出售一本书时创建

基于Bill Karwin的参考

非识别关系

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

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之间的关系。