可选性(强制性、可选性)和参与性(全部、部分)是否相同?
is optionality (mandatory, optional) and participation (total, partial) are same?
据我所知,可选性表示关系的最小基数,表示为可选到可选、强制到可选、强制到强制...
并且参与表示为粗线和正常线。
在互联网上有些人将参与称为实体对关系的依赖,这种关系看起来也像是识别和非识别关系。
有些人将其称为最小基数
这些关系的正确定义是什么,有什么区别..
让我们从每个概念的定义和示例开始:
全部和部分参与:
总参与(用双线或粗关联线表示)意味着实体集中的所有实体都必须参与关系。部分参与(由一条细线表示)意味着实体集中可以有不参与关系的实体。
Medicine
完全参与了 Produce
关系,这意味着 Medicine
不可能存在,除非 Produced
由 Laboratory
。相反,Laboratory
可以在没有 Producing
Medicine
的情况下存在 - Laboratory
部分参与 Produce
关系。
强制和可选角色:
在一段关系中,角色可以是可选的,也可以是强制性的。这会影响关系实例是否可以在没有给定角色中的实体的情况下存在。强制角色用实线表示,可选角色用虚线表示。
角色在数据库教程中不常被提及,但它们是一个重要的概念。考虑一段婚姻——一种由同一实体集扮演两个强制性角色的关系。在大多数关系中,实体集也定义了角色,但是当一个实体集在一个关系中多次出现时,我们将它们区分为不同的角色。
在上面的示例中,Patient
可以 Purchase
Medicine
有或没有 Prescription
。 Purchase
不能没有 Patient
和 Medicine
,但 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
可以不存在 Purchased
,Purchase
可以不存在 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 关系
一段关系的强制性角色少于两个是不寻常的。识别关系是二元关系,因此父角色和子角色将是强制性的 - 如果没有两个实体,Prescription
和 LineItem
之间的 Contain
关系就不可能存在。
可选角色通常只出现在三重及更高级别的关系中(尽管参见患者死于某种原因的示例),并且不参与身份识别。可选角色的替代方法是关系上的关系:
通过将 Purchase
变成关联实体,我们可以让它与 Prescription
建立 Fill
关系。为了保持与上面相同的语义,我指定 Purchase
只能 Fill
一个 Prescription
.
物理建模
如果我们从概念模型转换为物理模型(跳过逻辑建模/进一步规范化),为每个实体和关系制作单独的 tables,事情看起来很相似,尽管你必须知道如何阅读外键行上的基数指示符以恢复 ER 语义。
但是,使用相同的主键对 table 进行非规范化是很常见的,这意味着一对多关系与实体 table 在多边结合:
关系在物理上表示为 table 中的两个或多个实体键。在这种情况下,实体键 - patient_id
和 cause_of_death_id
都在 Patient
table 中找到。很多人认为外键线代表关系,但这是由于混淆了实体关系模型和旧的网络数据模型。
这是一个关键点——为了理解不同类型的关系和对关系的限制,首先要了解什么是关系。 ER 中的关系是键之间的关联,而不是 table 之间的关联。一个关系可以有任意数量的不同实体集的角色,而外键约束在一个实体集的两列之间强制执行子集约束。现在,有了这些知识,再读一遍我的整个答案。 ;)
希望对您有所帮助。欢迎提问。
据我所知,可选性表示关系的最小基数,表示为可选到可选、强制到可选、强制到强制...
并且参与表示为粗线和正常线。
在互联网上有些人将参与称为实体对关系的依赖,这种关系看起来也像是识别和非识别关系。
有些人将其称为最小基数
这些关系的正确定义是什么,有什么区别..
让我们从每个概念的定义和示例开始:
全部和部分参与:
总参与(用双线或粗关联线表示)意味着实体集中的所有实体都必须参与关系。部分参与(由一条细线表示)意味着实体集中可以有不参与关系的实体。
Medicine
完全参与了 Produce
关系,这意味着 Medicine
不可能存在,除非 Produced
由 Laboratory
。相反,Laboratory
可以在没有 Producing
Medicine
的情况下存在 - Laboratory
部分参与 Produce
关系。
强制和可选角色:
在一段关系中,角色可以是可选的,也可以是强制性的。这会影响关系实例是否可以在没有给定角色中的实体的情况下存在。强制角色用实线表示,可选角色用虚线表示。
角色在数据库教程中不常被提及,但它们是一个重要的概念。考虑一段婚姻——一种由同一实体集扮演两个强制性角色的关系。在大多数关系中,实体集也定义了角色,但是当一个实体集在一个关系中多次出现时,我们将它们区分为不同的角色。
在上面的示例中,Patient
可以 Purchase
Medicine
有或没有 Prescription
。 Purchase
不能没有 Patient
和 Medicine
,但 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
可以不存在 Purchased
,Purchase
可以不存在 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 关系
一段关系的强制性角色少于两个是不寻常的。识别关系是二元关系,因此父角色和子角色将是强制性的 - 如果没有两个实体,Prescription
和 LineItem
之间的 Contain
关系就不可能存在。
可选角色通常只出现在三重及更高级别的关系中(尽管参见患者死于某种原因的示例),并且不参与身份识别。可选角色的替代方法是关系上的关系:
通过将 Purchase
变成关联实体,我们可以让它与 Prescription
建立 Fill
关系。为了保持与上面相同的语义,我指定 Purchase
只能 Fill
一个 Prescription
.
物理建模
如果我们从概念模型转换为物理模型(跳过逻辑建模/进一步规范化),为每个实体和关系制作单独的 tables,事情看起来很相似,尽管你必须知道如何阅读外键行上的基数指示符以恢复 ER 语义。
但是,使用相同的主键对 table 进行非规范化是很常见的,这意味着一对多关系与实体 table 在多边结合:
关系在物理上表示为 table 中的两个或多个实体键。在这种情况下,实体键 - patient_id
和 cause_of_death_id
都在 Patient
table 中找到。很多人认为外键线代表关系,但这是由于混淆了实体关系模型和旧的网络数据模型。
这是一个关键点——为了理解不同类型的关系和对关系的限制,首先要了解什么是关系。 ER 中的关系是键之间的关联,而不是 table 之间的关联。一个关系可以有任意数量的不同实体集的角色,而外键约束在一个实体集的两列之间强制执行子集约束。现在,有了这些知识,再读一遍我的整个答案。 ;)
希望对您有所帮助。欢迎提问。