可选性(强制性,可选)和参与(总计,部分)是一样的吗?

时间:2016-06-26 00:07:17

标签: entity-relationship

据我所知,选项意味着关系的最小基数,表示为可选的可选,强制为可选,强制为强制..

参与表示为粗线和法线。

在互联网上,有些人将参与称为实体对关系的依赖关系,这种关系看起来也像是识别和非识别关系。

有些人将其称为最低基数

这些关系的正确定义是什么,有什么不同......

1 个答案:

答案 0 :(得分:28)

让我们从每个概念的定义和例子开始:

全部和部分参与:

参与总数(由双重或粗线表示)表示实体集中的所有实体都必须参与该关系。部分参与(由单个细线表示)意味着实体集中可能存在不参与该关系的实体。

Total and partial relationship

Medicine完全参与Produce关系,这意味着Medicine除非Produced Laboratory,否则无法Laboratory。相比之下,Producing可以存在Medicine Laboratory - Produce部分参与Patient关系。

强制性和可选角色:

在关系中,角色可以是可选的或强制的。这会影响关系实例是否可以在没有给定角色的实体的情况下存在。强制性角色用实心关联线表示,可选角色用虚线表示。

Mandatory and optional entities

角色并不经常在数据库教程中谈到,但它们是一个重要的概念。考虑一个婚姻 - 一个由同一个实体集填充的两个强制角色的关系。在大多数关系中,实体集也定义了角色,但是当实体集在单个关系中多次出现时,我们会将它们区分为不同的角色。

在上面的示例中,Purchase Medicine Prescription可以带有或不带Purchase。如果没有PatientMedicine,则Prescription不能存在,但Prescription是可选的(总体而言,虽然在特定情况下可能需要)。

识别关系/弱实体:

弱实体是一个无法通过其自身属性识别的实体,因此具有另一个实体的密钥作为其自身的一部分。识别关系是弱实体与其父实体之间的关系。识别关系和弱实体都用双边框表示。弱实体集必须完全参与其识别关系。

Identifying relationship / weak entities

在此示例中,LineItems包含由Prescription键和行号标识的LineItems。换句话说,(Prescription_ID, Line_Number)表将具有复合键Medicine

有关非标识关系的示例,请参阅前面的示例。虽然Produce完全参与Laboratory关系,但它有自己的身份(例如代理密钥,但我没有表明它)。请注意,代理键始终表示常规实体。

强制/可选与总/部分参与

强制或可选角色指示是否需要某个角色(及其关联实体集)才能存在关系。全部或部分参与表明实体是否需要某种关系。

强制性部分参与:见上文:Medicine可以在不生成任何药物的情况下存在,但Produced不能Laboratory Medicine

强制性全员参与:见上文:Produced不能Laboratory存在,Produce无法Prescription未指明。< / p>

可选的部分参与:见上文:Purchased可以不存在Purchase,而Prescription可以不存在Patients

这留下了可选的全部参与,我不得不考虑一下找一个例子:

Optional total participation

未知Die的某些Cause Cause,但如果没有Patient DyingLineItem的死亡就无法生存它的。

全部/部分参与与识别/非识别关系

正如我之前所说,弱实体集总是完全参与其识别关系。请参阅上文:Contained PrescriptionMedicine必须Produced,其身份和存在取决于此。部分参与识别关系是不可能的。

完全参与并不意味着识别关系 - Laboratory不能由Medicine MedicinePurchased存在,但Medicine由其识别自己的属性。

部分参与非认同关系非常普遍。例如,Contain可以在不Prescription的情况下存在,LineItem由其自己的属性标识。

强制/可选与识别/非识别关系

对于一个关系来说,不到两个强制性角色是不寻常的。识别关系是二元关系,因此父级和子级角色必须是强制性的 - PurchaseFill之间的Prescription关系在没有这两个实体的情况下都不存在。

可选角色通常只能在三元和更高的关系中找到(虽然看病人死亡的例子),并且不参与鉴定。可选角色的替代方案是关系中的关系:

Associative entity

通过将Purchase转变为关联实体,我们可以让它与Fill建立Prescription关系。为了保持与上面相同的语义,我指定patient_id只能cause_of_death_id一个Patient

物理建模

如果我们从概念模型转换为物理模型(跳过逻辑建模/进一步规范化),为每个实体和关系制作单独的表,事情看起来非常相似,尽管您必须知道如何读取外键行上的基数指标恢复ER语义。

Physical model examples

但是,使用相同的主键对表进行非规范化是很常见的,这意味着一对多关系与多方面的实体表相结合:

Denormalized died relationship

关系在物理上表示为表中的两个或多个实体键。在这种情况下,实体密钥 - {{1}}和{{1}}都可以在{{1}}表中找到。许多人认为外键线代表了这种关系,但这是因为实体关系模型与旧网络数据模型的混淆。

这是一个关键点 - 为了理解不同类型的关系和对关系的约束,理解什么样的关系是最重要的。 ER中的关系是键之间的关联,而不是表之间的关联。关系可以具有不同实体集的任意数量的角色,而外键约束在一个实体集的两列之间强制执行子集约束。现在,凭借这些知识,再次阅读我的全部答案。 ;)

我希望这会有所帮助。随意提问。