可选性(强制性、可选性)和参与性(全部、部分)是否相同?

is optionality (mandatory, optional) and participation (total, partial) are same?

据我所知,可选性表示关系的最小基数,表示为可选到可选、强制到可选、强制到强制...

并且参与表示为粗线和正常线。

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

有些人将其称为最小基数

这些关系的正确定义是什么,有什么区别..

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

全部和部分参与:

总参与(用双线或粗关联线表示)意味着实体集中的所有实体都必须参与关系。部分参与(由一条细线表示)意味着实体集中可以有不参与关系的实体。

Medicine 完全参与了 Produce 关系,这意味着 Medicine 不可能存在,除非 ProducedLaboratory。相反,Laboratory 可以在没有 Producing Medicine 的情况下存在 - Laboratory 部分参与 Produce 关系。

强制和可选角色:

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

角色在数据库教程中不常被提及,但它们是一个重要的概念。考虑一段婚姻——一种由同一实体集扮演两个强制性角色的关系。在大多数关系中,实体集也定义了角色,但是当一个实体集在一个关系中多次出现时,我们将它们区分为不同的角色。

在上面的示例中,Patient 可以 Purchase Medicine 有或没有 PrescriptionPurchase 不能没有 PatientMedicine,但 Prescription 是可选的(总的来说,尽管在特定情况下可能需要)。

识别关系/弱实体:

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

在此示例中,Prescription 包含 LineItems,它们由 Prescription 的键和行号标识。换句话说,LineItems table 将有一个复合键 (Prescription_ID, Line_Number).

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

Mandatory/optional vs total/partial 参与

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

强制部分参与:见上:A Laboratory可以不生产任何药物而存在,但是Medicine不能Produced没有Laboratory

强制总参与:见上文:Medicine 不能没有 Produced,并且 Laboratory 不能 Produce 未指定的东西。

可选的部分参与:见上文:Prescription 可以不存在 PurchasedPurchase 可以不存在 Prescription

剩下可选的总参与,我不得不考虑一下才能找到一个例子:

一些 Patients Die 的未知 Cause,但是没有 Patient Dying 就无法存在 Cause 的死亡

Total/partial 参与 vs identifying/non-identifying 关系

正如我之前所说,弱实体集总是完全参与它们的识别关系。见上:a LineItem 必须是 Contained in a Prescription,它的身份和存在取决于此。不可能部分参与识别关系。

完全参与并不意味着识别关系 - Medicine 不能不被 Laboratory Produced 存在,但 Medicine 由其自身的属性识别.

部分参与非认同关系非常普遍。比如Medicine可以不存在Purchased,而Medicine是用自己的属性来标识的

Mandatory/optional vs identifying/non-identifying 关系

一段关系的强制性角色少于两个是不寻常的。识别关系是二元关系,因此父角色和子角色将是强制性的 - 如果没有两个实体,PrescriptionLineItem 之间的 Contain 关系就不可能存在。

可选角色通常只出现在三重及更高级别的关系中(尽管参见患者死于某种原因的示例),并且不参与身份识别。可选角色的替代方法是关系上的关系:

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

物理建模

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

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

关系在物理上表示为 table 中的两个或多个实体键。在这种情况下,实体键 - patient_idcause_of_death_id 都在 Patient table 中找到。很多人认为外键线代表关系,但这是由于混淆了实体关系模型和旧的网络数据模型。

这是一个关键点——为了理解不同类型的关系和对关系的限制,首先要了解什么是关系。 ER 中的关系是键之间的关联,而不是 table 之间的关联。一个关系可以有任意数量的不同实体集的角色,而外键约束在一个实体集的两列之间强制执行子集约束。现在,有了这些知识,再读一遍我的整个答案。 ;)

希望对您有所帮助。欢迎提问。