1

我已经阅读了完全参与关系的情况和一个实体没有另一个实体就不存在的识别关系的情况。

我还读到过,“并非每一次完全参与都意味着一种识别关系”。

它们之间有什么区别?

4

2 回答 2

1

您对定义的尝试太模糊而无用。

当然,任何实体都必须存在才能参与关系,并且它参与的一个或多个实体必须存在。不要将此与需要存在另一种实体类型的实体类型混淆。

当第一种实体的每个实体都必须参与时,第一种实体类型完全参与与第二种实体的关系。一个类型的总参与可以是 1:1、many:1 或 many:many。删除关系或其整体可能会给出以前完全参与的实体仍然存在的设计,可能参与其他关系。

区分关系是第一/子实体类型和其主键包含在第一/子的主键中的第二/父实体类型之间的一种关系。结果是子实体完全参与识别关系。儿童类型的总参与比例为 1:1 或多:1。删除整体或关系需要删除子实体类型及其参与的任何其他关系。

如果我们不更改主键和实体之间的对应关系,那么只要存在子实体,它就与同一个父实体相关联。而只要完全参与类型的每个实体至少参与一次,一些非识别关系就可能产生关联。

ER 建模相当随意。可以将任何标识关系及其子实体类型设置为总共多:1 非参与关系。但是这种设计不会明确子类型对父类型的存在依赖性。

于 2017-08-07T23:13:28.173 回答
1

如果您从参与的角度来看关系,那么存在参与约束,它指定实体类型(比如 A)的存在是否取决于它通过关系类型与另一个实体类型(比如 B)相关。

此约束指定每个实体可以参与的最小关系实例数,有时称为最小基数约束。有两种类型的参与约束——<strong>total 和partial

著名的员工例子:“每个员工都必须为一个部门工作”。

  • 实体类型 A:员工
  • 实体类型 B:部门
  • 关系:WORKS_FOR

即:一个员工实体只有在至少参与一个 WORKS_FOR 关系实例时才能存在。

因此,EMPLOYEE 在 WORKS_FOR 中的参与称为完全参与(也称为存在依赖),这意味着整个员工实体集中的每个实体都必须通过 WORKS_FOR 与部门实体相关联

现在部分关系在上面的例子之后是不言自明的。

来到识别关系,我们首先需要熟悉弱实体类型:

自身没有关键属性的实体类型称为弱实体类型。

因此,这些是通过与来自另一个实体类型的特定实体相关并结合它们的一个属性值来识别的。

我们将这种其他实体类型称为标识(所有者)实体类型,我们将将弱实体类型与其所有者相关联的关系类型称为弱实体类型的标识关系

症结所在:

弱实体类型对于其标识关系始终具有总参与约束(存在依赖性),因为没有所有者实体就无法标识弱实体。

然而,并不是每个存在依赖都会导致弱实体类型。如上例所示,EMPLOYEE 实体类型不能存在,除非它与 DEPARTMENT 实体类型相关,即使它有自己的键 (Employee_ID),因此不是弱实体。

因此,对于识别关系,弱实体是必须的(因此隐含地具有完全参与),但是完全参与并不意味着识别关系,因为它可能不具有上述示例中描述的弱实体。

希望对您有所帮助,如果您有任何意见,请随时发表评论。

所有参考资料来自:

数据库系统基础(第 6 版)

Ramez Elmasri, Shamkant B. Navathe [ISBN 13: 978-0-136-08620-8]

于 2017-08-23T14:46:03.060 回答