database - 识别 is-a 关系中的强实体和弱实体
问题描述
据我所知,只有 PERSON 和 INSURANCE_COMPANY 是强大的实体。
PATIENT 没有医生就不能存在(由于最小基数为 1),因此它是一个弱实体。同样,没有 DEPARTMENT,STAFF 就无法存在,反之亦然。因此,它们都是弱实体。由于 STAFF 很弱,它的所有子类型(SUPPORT_STAFF、NURSE、DOCTOR)也必须是弱实体,对吧?
我的理解是正确的还是我遗漏了什么?
解决方案
弱实体集不是由存在依赖决定的。常规实体集可以完全参与关系,因此也存在对另一个实体集的依赖。
你需要看的是身份。常规实体集由它们自己的属性标识。弱实体集通常部分地由另一个实体集标识。
在您的图中,DEPARTMENT、PERSON、INSURANCE_POLICY 和 INSURANCE_COMPANY 是描述常规实体集的实体关系。这些表中的每一个都有简单的主键(Dept#、PersonID、Policy# 和 Co#,如果我解释正确的话,虽然没有指明 PK)。
其他表(STAFF、PATIENT、SUPPORT_STAFF、NURSE、DOCTOR)描述了 Person 的子类型。这些子类型是否是弱实体集是有争议的。Chen 的原始论文描述了常规实体集和弱实体集,但没有包含子类型的概念。子类型是子集,而不是单独的实体集。然而,弱实体集在扩展 ER 符号可用之前提供了一种表示子类型的方法(即没有弱键的弱实体集)。在支持子类型化的 EER 模型中,最好使用“弱实体集”来仅引用其主键由弱键和另一个实体集的键组成的实体集。这里的典型示例是行项目,通常由发票/收据编号和行号标识。
在原始 ER 模型中,我会说您有 4 个常规实体集,对应于 4 个实体关系 DEPARTMENT、PERSON、INSURANCE_POLICY 和 INSURANCE_COMPANY,以及 5 个弱实体集,对应于图中的 5 个子类型关系。但是,在具有不同子类型概念的 EER 模型中,我认为您有 4 个常规实体集而没有弱实体集。
推荐阅读
- scala - 在 Spark 中写入 CSV 数据时持续出现 EMR 一致性故障
- node.js - EXDEV:不允许跨设备链接,重命名 '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'
- javascript - 如何使用 CSS 在 Vue JS v-for 循环中添加换行符
- python - 无法将数据酸洗到子文件夹中
- c - 为什么这个键盘阅读程序从不检测开始条件?
- java - Java8 Collections 合并两个具有不同对象和公共字段的不同列表
- sql - 如何从 bash 脚本格式化 PostgreSQL 查询中的引号
- c - 如何使用 Typedef Struct 创建函数以返回拆分字符串数组
- mongodb - 猫鼬按“趋势”排序
- java - Java迭代双向链表序列