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


当前回答

从父级迁移到子级的属性是否有助于识别子级?

如果是:标识依赖性存在,则关系是标识的,子实体是“弱”的。如果不存在:标识依赖不存在,则关系是非标识的,子实体“强”。

注意,身份依赖意味着存在依赖,但并非相反。每一个非NULL FK都意味着没有父级就不能存在子级,但这并不能使关系确定。

有关这方面的更多信息(以及一些示例),请参阅ERwin方法指南的“确定关系”部分。

补充:我意识到我参加聚会(非常)晚了,但我觉得其他答案要么不完全准确(用存在依赖而不是身份依赖来定义它),要么有些曲折。希望这个答案更清晰。。。


1孩子的FK是孩子的PRIMARY KEY或(非NULL)UNIQUE约束的一部分。

其他回答

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

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

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

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

非识别关系

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

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

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

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

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

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

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

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

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

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

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

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

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

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