据我所知,选项意味着关系的最小基数,表示为可选的可选,强制为可选,强制为强制..
参与表示为粗线和法线。
在互联网上,有些人将参与称为实体对关系的依赖关系,这种关系看起来也像是识别和非识别关系。
有些人将其称为最低基数
这些关系的正确定义是什么,有什么不同......
答案 0 :(得分:28)
让我们从每个概念的定义和例子开始:
全部和部分参与:
参与总数(由双重或粗线表示)表示实体集中的所有实体都必须参与该关系。部分参与(由单个细线表示)意味着实体集中可能存在不参与该关系的实体。
Medicine
完全参与Produce
关系,这意味着Medicine
除非Produced
Laboratory
,否则无法Laboratory
。相比之下,Producing
可以存在Medicine
Laboratory
- Produce
部分参与Patient
关系。
强制性和可选角色:
在关系中,角色可以是可选的或强制的。这会影响关系实例是否可以在没有给定角色的实体的情况下存在。强制性角色用实心关联线表示,可选角色用虚线表示。
角色并不经常在数据库教程中谈到,但它们是一个重要的概念。考虑一个婚姻 - 一个由同一个实体集填充的两个强制角色的关系。在大多数关系中,实体集也定义了角色,但是当实体集在单个关系中多次出现时,我们会将它们区分为不同的角色。
在上面的示例中,Purchase
Medicine
Prescription
可以带有或不带Purchase
。如果没有Patient
和Medicine
,则Prescription
不能存在,但Prescription
是可选的(总体而言,虽然在特定情况下可能需要)。
识别关系/弱实体:
弱实体是一个无法通过其自身属性识别的实体,因此具有另一个实体的密钥作为其自身的一部分。识别关系是弱实体与其父实体之间的关系。识别关系和弱实体都用双边框表示。弱实体集必须完全参与其识别关系。
在此示例中,LineItems
包含由Prescription
键和行号标识的LineItems
。换句话说,(Prescription_ID, Line_Number)
表将具有复合键Medicine
。
有关非标识关系的示例,请参阅前面的示例。虽然Produce
完全参与Laboratory
关系,但它有自己的身份(例如代理密钥,但我没有表明它)。请注意,代理键始终表示常规实体。
强制/可选与总/部分参与
强制或可选角色指示是否需要某个角色(及其关联实体集)才能存在关系。全部或部分参与表明实体是否需要某种关系。
强制性部分参与:见上文:Medicine
可以在不生成任何药物的情况下存在,但Produced
不能Laboratory
Medicine
。
强制性全员参与:见上文:Produced
不能Laboratory
存在,Produce
无法Prescription
未指明。< / p>
可选的部分参与:见上文:Purchased
可以不存在Purchase
,而Prescription
可以不存在Patients
。
这留下了可选的全部参与,我不得不考虑一下找一个例子:
未知Die
的某些Cause
Cause
,但如果没有Patient
Dying
,LineItem
的死亡就无法生存它的。
全部/部分参与与识别/非识别关系
正如我之前所说,弱实体集总是完全参与其识别关系。请参阅上文:Contained
Prescription
中Medicine
必须Produced
,其身份和存在取决于此。部分参与识别关系是不可能的。
完全参与并不意味着识别关系 - Laboratory
不能由Medicine
Medicine
而Purchased
存在,但Medicine
由其识别自己的属性。
部分参与非认同关系非常普遍。例如,Contain
可以在不Prescription
的情况下存在,LineItem
由其自己的属性标识。
强制/可选与识别/非识别关系
对于一个关系来说,不到两个强制性角色是不寻常的。识别关系是二元关系,因此父级和子级角色必须是强制性的 - Purchase
和Fill
之间的Prescription
关系在没有这两个实体的情况下都不存在。
可选角色通常只能在三元和更高的关系中找到(虽然看病人死亡的例子),并且不参与鉴定。可选角色的替代方案是关系中的关系:
通过将Purchase
转变为关联实体,我们可以让它与Fill
建立Prescription
关系。为了保持与上面相同的语义,我指定patient_id
只能cause_of_death_id
一个Patient
。
物理建模
如果我们从概念模型转换为物理模型(跳过逻辑建模/进一步规范化),为每个实体和关系制作单独的表,事情看起来非常相似,尽管您必须知道如何读取外键行上的基数指标恢复ER语义。
但是,使用相同的主键对表进行非规范化是很常见的,这意味着一对多关系与多方面的实体表相结合:
关系在物理上表示为表中的两个或多个实体键。在这种情况下,实体密钥 - {{1}}和{{1}}都可以在{{1}}表中找到。许多人认为外键线代表了这种关系,但这是因为实体关系模型与旧网络数据模型的混淆。
这是一个关键点 - 为了理解不同类型的关系和对关系的约束,理解什么样的关系是最重要的。 ER中的关系是键之间的关联,而不是表之间的关联。关系可以具有不同实体集的任意数量的角色,而外键约束在一个实体集的两列之间强制执行子集约束。现在,凭借这些知识,再次阅读我的全部答案。 ;)
我希望这会有所帮助。随意提问。