EER数据模型中弱实体类型的处理与解析
1. EER数据模型中的弱实体类型
EER(扩展实体 - 关系)模式由实体类型符号、关系类型符号(每个都有相关的元数)、角色名称符号和属性符号组成。实体类型符号可以是强实体类型(表示非弱实体类型)或弱实体类型。属性符号可以是简单属性或复合属性,复合属性符号与一组属性符号(除自身外)相关联,并且每个属性符号要么是单值的,要么是多值的。
类型的键是通过其属性识别该类型实例的一种方式。强实体类型符号和关系类型(如果有的话)的键是该类型的一个属性。弱实体类型符号的键是通过相关的所有者实体类型符号定义的。每个弱实体类型符号 E 都与被指定为 E 的标识关系类型的二元关系类型符号相关联。通过这些关系类型符号与 E 相关联的实体类型符号被称为 E 的所有者实体类型。与 E 的标识关系类型相关联的基数约束保证了 E 的每个实体 e 通过一个标识关系类型与一个单一的所有者实体相关联。此外,e 可以由其所有者实体和其部分键属性的值来识别。也就是说,E 的键由其所有者的键和它自己的部分键(如果存在)组成,部分键可以是它的任何属性。
为了简化说明,这里不给出 EER 数据模型、其语义和一致性的正式定义。下面通过一个医疗诊所的 EER 图(图 1)来进行示例说明:
- 矩形表示实体类型。
- 菱形表示关系类型。
- 圆形表示属性。
- 矩形之间的实线表示实体类型层次结构,箭头指向超实体类型。
- 虚线矩形和菱形表示弱实体类型及其标识关系类型,箭头指向所有者实体类型。
在图 1 中:
- “Schedule” 是一个弱实体类型,由强实体类型 “Physician” 拥有。一个 “Schedule” 实体由其医生的执照编号和日期(部分键)来识别。
- “Lab - test - prescribed” 是一个更复杂的弱实体类型,由 “Lab - test” 和 “Visit” 实体类型拥有。“Visit” 本身也是弱实体类型,由 “Patient” 拥有,由患者 ID 和就诊日期来识别。“Visit” 实体类型与 “Physician” 存在常规关系。如果 “Visit” 被解析为嵌入其所有者 “Patient” 的属性,那么引用 “Visit” 的任何元素都需要知道其目标实体类型,即 “Patient”,这适用于 “treating” 和 “prescription” 关系类型。因此,每次嵌入都需要指定最终的目标实体类型。一般来说,复杂的所有者依赖关系会使形式化处理变得复杂,指示用户将弱实体类型嵌入其所有者的聚类算法在处理多个所有者时存在不足。
包含弱实体类型的 EER 模式不能完全形式化,因为用户必须提供关于弱实体类型预期状态的信息,即弱实体类型符号是代表一个真实的实体类型还是另一个实体类型的属性。这是一个概念性的决策,应该由建模者来决定。特别是,属性嵌入意味着在概念上,对嵌入的弱实体类型实体的引用可以被对其目标实体类型实体的引用所取代。当提供缺失的信息时,仍然可能是非法的,因为这可能会产生非法或不一致的模式。
2. 解决弱实体类型的状态
弱实体类型符号在模式中要么保持为实体类型符号,要么转变为与其他实体类型相关联的属性符号。
- 若保持为实体类型符号,弱实体类型符号 E 的所有者实体类型符号将组合形成 E 的一个新的复合引用属性。
- 若转变为属性符号,弱实体类型符号将成为其 “最近的”(直接或间接)被解析为实体类型的所有者实体类型符号的属性。为了确定这个最接近的实体类型符号,需要对 “目标” 实体类型符号进行归纳构造。
去除 EER 模式中弱实体类型符号并解决其最终状态的算法分为四个阶段:
1.
阶段 I:检测所有权循环
:如果检测到循环,输出循环中的实体类型符号并停止。
2.
阶段 II:确定弱实体类型符号的最终状态
:
- 具有多个所有者的弱实体类型符号被解析为保持为实体类型。例如,在图 1 中,“Lab - test - prescribed” 因为由 “Visit” 和 “Lab - test” 拥有,所以被解析为保持为常规实体类型。
- 具有单个所有者,且不与非标识关系类型符号相关联,也不是另一个实体类型符号的所有者的弱实体类型符号 E,被解析为嵌入其所有者实体类型符号的属性。例如,在图 1 中,“Schedule” 被解析为嵌入 “Physician” 的属性。
- 否则,最终状态由用户(建模者)决定。即具有单个所有者,并且要么与非标识关系类型符号相关联,要么是另一个弱实体类型的所有者的弱实体类型符号,要么保持为实体类型,要么被嵌入其所有者实体类型符号的属性。例如,图 1 中的 “Visit” 可能有 “属性” 或 “实体类型” 两种解析方式。如果弱实体类型受到非平凡(非 (0, N))基数约束,建议将其解析为保持为实体类型,因为属性嵌入需要沿着嵌入路径组合基数约束,对于非平凡约束,这种组合可能没有太多信息价值,例如 (3, 5) 与 (4, 10) 的组合结果是 (12, 500)。
3.
阶段 III:确定具有 “属性” 目标的弱实体类型的 “目标” 实体类型符号
:
- 对于每个要么是强实体类型符号,要么被解析为保持为实体类型符号的实体类型符号 E,目标实体类型 (E) = E。
- 对于每个被解析为嵌入属性,且由单个实体类型符号 E′ 拥有的实体类型符号 E,目标实体类型 (E) = 目标实体类型 (E′)。
实体类型符号的目标实体类型标记可以从强实体类型符号和具有实体类型解析的弱实体类型符号开始进行归纳计算。由于模式中不包含所有权循环,计算结束时,所有实体类型符号都有目标实体类型标记。实体类型符号 E 在模式中的目标实体类型的计算与 E 到其目标实体类型之间的基数约束相关,这里为了简化不详细说明计算过程。
下面是这个过程的 mermaid 流程图:
graph TD
A[开始] --> B[阶段 I:检测所有权循环]
B -->|有循环| C[输出循环中的实体类型符号并停止]
B -->|无循环| D[阶段 II:确定弱实体类型符号的最终状态]
D --> E[阶段 III:确定目标实体类型符号]
E --> F[阶段 IV:构建新的 EER 模式]
F --> G[结束]
-
阶段 IV:从给定的模式 ER 构建一个不包含弱实体类型符号的新 EER 模式 ER′
:
- 将 ER 的所有元素插入到 ER′ 中。
- 具有 “实体类型” 解析的弱实体类型符号 :对于每个由实体类型符号 E1, …, Ek 拥有的此类实体类型符号 E,目标实体类型 (Ei) = E1i(i = 1, k),向 E 添加一个名为 “owner” 的复合属性,该属性与参考属性 E1i(i = 1, k)相关联,并将 “owner” 添加到 E 的所有键中。对于 E 与某个 Ei 之间的每个标识关系,由用户决定是否删除。在医疗诊所示例中,决定不删除这些关系,因此在图 7 中,“Lab - of” 和 “prescription” 关系保持为常规关系。
- 非标识关系类型符号 :对于在 ER 中关联实体类型符号 E1, …, Ek 的每个关系类型符号 R,在 ER′ 中分别用目标实体类型 (Ei) = E1i(i = 1, k)替换它们。每当 E1i 与 Ei 不同时,其在 R 中的角色的基数约束设置为 (0, N)。在医疗诊所示例中,“Physician” 和 “Visit” 之间的 “treating” 关系在转换后的模式中变为 “Physician” 与 “Patient” 之间的关系。
-
具有 “属性” 解析的弱实体类型符号
:当 ER′ 中存在具有 “属性” 解析且不是另一个具有属性解析的(弱)实体类型符号的所有者的实体类型符号 E 时,重复以下操作:
- 假设 ER′ 中 E 的所有者是 E1,通过标识关系 R,角色名称分别为 RN 和 RN1。假设 E 具有属性 A1, …, An,则向 E1 添加一个复合属性 E,该属性与 E 的属性 A1, …, An 相关联。如果对角色名称 RN 施加的基数约束是 (1, 1),即给定的 E1 实体最多识别一个 E 实体,则 E1 的属性 E 标记为单值的,否则为多值的。
- 从 ER′ 中删除 E 及其标识关系。
通过对图 1 应用此过程,可能得到不同的结果:
- 图 7 中,“Schedule” 变成 “Physician” 的多值属性,“Lab - test - prescribed” 保持为实体类型符号,具有 “Lab - test” 和 “Patient” 两个参考属性。“Visit” 被转换为其目标实体类型 “Patient” 的属性。
- 图 8 中,“Visit” 被解析为保持为实体类型,从概念角度看,图 8 更优。
3. EER 数据模型定义的修改
为了更好地处理弱实体类型,EER 数据模型的定义需要进行两项修改:
1.
参考属性
:这是一种特殊的属性符号,其名称与模式中的实体类型符号相同。类型符号 T 的参考属性符号 E 的类型必须包含在实体域中。如果 dom(E, T) 表示分配给 T 的属性 E 的类型,D 是模式的数据库实例中的实体域,那么 dom(E, T) ⊆ D。
2.
一致性
:模式的数据库实例 D 的一致性的额外条件为:对于类型符号 T 的每个参考属性符号 E,其类型恰好是 D 中 E 的范围。即 dom(E, T) = ED。
以下是这两项修改的总结表格:
| 修改项 | 描述 |
| ---- | ---- |
| 参考属性 | 名称与实体类型符号相同,类型包含在实体域中 |
| 一致性 | 参考属性的类型等于其在数据库实例中的范围 |
4. 允许所有权循环
在传统的 EER 模型中,由于所有权循环意味着循环中的弱实体类型具有无限的键,因此不允许存在所有权循环。然而,当 EER 模型扩展了参考属性后,参考属性可以成为键的一部分。这意味着原始的 EER 模式可以允许存在所有权循环,前提是循环中的并非所有弱实体类型符号都被解析为在修订后的模式中嵌入为其所有者实体类型的属性(在算法的阶段 II 中分配 “属性” 标记)。
例如,图 9 展示了一种非法的标记情况。循环 “属性” 标记的问题在于,这种循环中的实体类型符号没有可以嵌入为属性的目标实体类型。非法的循环标记在算法的阶段 III 中被检测到,因为它们会使实体类型符号没有目标实体类型标记(属性标记循环中的弱实体类型符号无法通过归纳构造到达)。在这种情况下,算法可以输出非法所有权循环中的实体类型符号并终止,或者修改阶段 II。
下面是处理所有权循环的 mermaid 流程图:
graph TD
A[开始] --> B[检查是否有所有权循环]
B -->|有循环| C[检查是否所有弱实体类型都为属性标记]
C -->|是| D[输出非法循环实体类型并终止或修改阶段 II]
C -->|否| E[允许循环,继续处理]
B -->|无循环| E
E --> F[结束]
总结
本文详细介绍了 EER 数据模型中弱实体类型的处理方法。首先阐述了 EER 模式的组成以及弱实体类型的定义和特点,指出包含弱实体类型的 EER 模式不能完全形式化,需要用户提供弱实体类型的预期状态信息。接着介绍了解决弱实体类型状态的算法,该算法分为四个阶段,通过检测所有权循环、确定弱实体类型符号的最终状态、确定目标实体类型符号和构建新的 EER 模式,有效地处理了弱实体类型。此外,还对 EER 数据模型的定义进行了修改,引入了参考属性和一致性条件,并探讨了允许所有权循环的情况。
在实际应用中,这些方法可以帮助建模者更好地处理复杂的实体关系,提高数据模型的质量和可维护性。例如,在医疗诊所信息系统的示例中,通过合理处理弱实体类型,可以使数据模型更加清晰和准确地反映实际业务需求。

2328

被折叠的 条评论
为什么被折叠?



