1

这是描述:

绘制为口袋妖怪提供医疗服务的 Poke-Hospital 的实体关系图。

每个口袋妖怪都与其中一位护士乔伊斯有约会。除了记录每个口袋妖怪的名称、类型和训练师之外,系统还需要跟踪为口袋妖怪诊断出的多种疾病。在预约期间,护士总是会开药。需要记录药物的日期、时间和剂量。宠物小精灵可能需要一次服用不止一种药物。每种药物都与其名称、品牌和购买成本一起存储。任何护士开出的药量都没有限制。

在预约期间,宠物小精灵可能需要接受手术和/或诊断等程序。每个程序都需要不同类型的房间和设备清单。需要记录手术的日期、时间和实际房间。

一个程序可以由一名以上的护士执行。护士根据她已完成的培训技能参与该程序。并非所有护士都有资格执行程序。

最知名的每位护士的姓名、寻呼机号码以及办公室号码。您的图表应显示实体、关系及其属性,以及任何关系的基数。通过下划线标记每个实体的最佳主键。

这是我的解决方案:

在此处输入图像描述

以下是我的问题:

  1. 我应该使用 Have Appointment 作为关联实体吗?

  2. 我应该删除 2 个关系 Undergo 和 Prescribe 并将 2 个实体 Procedure and Appointment Medicine 直接连接到 Have Appointment 关联实体吗?那时 ERD 还会正确吗?

  3. 如果错了,那和问题 2 一样,我把 Have Appointment 关联实体变成了关系呢?

我对使用关联实体和关系之间的区别感到非常困惑(例如在这篇文章 Enrollment with Teach and Teacher 中:何时使用关联实体?)和使用三元关系(将教师直接连接到注册关系而不是将注册更改为关联实体实体并具有 Teach 关系)。

4

1 回答 1

1
  1. 我应该使用 Have Appointment 作为关联实体吗?

不,我相信它应该是一个常规的实体集。你给了它自己的身份 - ID 主键 - 我同意,但这应该与元素类型的变化相对应。关联实体集 (AES) 首先是关系,这意味着它们由它们相关的实体集(的键)标识。

这是一个被广泛混淆的话题,因为实体关系模型中的 AES 与网络数据模型中的不同。后者对开发人员来说直观上更熟悉,因为它本质上是一个基于记录和指针的模型,但由于它只支持有向二元关系,所以任何更复杂的东西——多对多关系以及三元和更高的关系——都需要表示为 AES。在此模型中,AES 由代理 ID 标识,因为通常也不支持复合密钥。

实体关系模型支持 n 元关系和复合键,因此几乎不需要 AES。常规实体集和 n 元关系无法表示的一种情况是,当关系需要成为进一步关系的主题时。

例如,让我们看一下ProcedureNurse代表一个程序中涉及的护士之间的关系。

程序-护士关系

我更喜欢基数指标的交叉约定——一个护士可以执行 0 个或多个程序,而一个程序需要 1 个或多个护士。无论如何,Perform这里的关系是由复合主键标识的(ProcedureID, NurseID)

现在,如果我们想跟踪每个护士在手术过程中使用的设备,我们可能会认为一个简单的三元关系就可以解决问题:

程序-护士-设备关系

但这种关系会被 识别(ProcedureID, NurseID, EquipmentID),阻止我们记录在不使用任何设备的情况下协助手术的护士。我们需要的是两个独立的关系:

(ProcedureID, NurseID)
((ProcedureID, NurseID), EquipmentID)

从第二个到第一个的 FK 约束,以防止不协助手术的护士处理设备。

过程-护士关联实体集

回到Have Appointment- 这不是口袋妖怪和护士之间的关系(口袋妖怪可以多次看到同一个护士),这是一个涉及口袋妖怪、护士、程序和药物的事件。最好将其作为与其他四个有关系的常规实体集来处理。至于身份,我想口袋妖怪或护士一次只能有一个约会,所以我们可以选择(PokemonID, DateTime)(NurseID, DateTime)作为自然键。然而,在实践中,我们通常通过代理 ID 来识别事件,因为事件跨越了一个大多数 DBMS 无法有效地作为主键处理的时间间隔。

  1. 我应该删除 2 个关系 Undergo 和 Prescribe 并将 2 个实体 Procedure and Appointment Medicine 直接连接到 Have Appointment 关联实体吗?那时 ERD 还会正确吗?

不,我认为在将 AES 转换为常规实体集之后,您应该在PokemonandHave Appointment之间添加关系。NurseHave Appointment

  1. 如果错了,那和问题 2 一样,我把 Have Appointment 关联实体变成了关系呢?

上面回答了。

于 2017-11-07T07:55:09.283 回答