0

我已经创建了这个 ERD,看看:https ://i.gyazo.com/ea3ad2073ad5302834b642dea7467662.png

但现在我想在我的图表中添加更多信息,但我不知道该怎么做。

我想修改我之前的 ERD,我需要确保每个班次都送到医生工作的医院。另外,我需要为每个病人登记医疗保险。

希望你能帮我

4

1 回答 1

1

您可以Works at在 ERD 中对关系进行建模,但复杂的约束(例如确保医生轮班发生在他们工作的医院)只能在物理模式中正确表示,因为它依赖于复合 FK 约束。

我会在我的 ERD 图上做一个注释以指示约束:

医生在医院 ERD 工作

然后,在物理模式中:

CREATE TABLE Works_At (
    doctor_dna VARCHAR NOT NULL,
    hospital_code VARCHAR NOT NULL,
    PRIMARY KEY (doctor_dna),
    UNIQUE KEY (doctor_dna, hospital_code)
);

CREATE TABLE Shifts (
    shift_id INT NOT NULL,
    doctor_dna VARCHAR NOT NULL,
    patient_dna VARCHAR NOT NULL,
    hospital_code VARCHAR NOT NULL,
    date DATETIME NOT NULL,
    hour INT NOT NULL,
    PRIMARY KEY (shift_id),
    FOREIGN KEY (doctor_dna, hospital_code) REFERENCES Works_At (doctor_dna, hospital_code)
);

注意 UNIQUE KEY inWorks_At和复合 FOREIGN KEY 约束Shifts

对您的图表的一些评论:同时使用 Crow's feet 和 1-N 基数指标是多余的。我建议只使用 1-N 基数指标,因为您的图表主要使用 Chen 的符号。鱼尾纹在表格图中更常用。

其次,我认为Shifts被错误地建模为弱实体集。弱实体集是(至少部分)由单个父实体集标识的实体集。如果您的意图是由和Shifts唯一标识Patient,则最好将其表示为这些实体集之间的三元关系。但是,根据我的经验,患者不仅限于每位医生/医院一次就诊。也许您打算使用and作为弱键,但这会产生复杂的关系,并且如果您想将其他任何内容与班次相关联,则必须将所有 5 列作为复合外键包含在另一个表中。就个人而言,我宁愿引入一个代理键来使其成为常规实体集。DoctorHospitalDateHour

如果对Person. 使用 DNA 作为标识符存在许多问题。大小(DNA 档案往往很大)、隐私问题(标识符可能包含有价值或敏感的信息)、实际困难(每个医生和患者必须在注册之前进行 DNA 测序吗?)、准确性(有限的档案可能无法保证唯一而完整的配置文件将是不切实际的)。

至于医疗保险,我建议您在线研究该主题(甚至咨询该领域的专家)并确定您需要哪些实体、属性和关系。一旦你知道你想添加什么信息,我可以建议如何添加它。

于 2017-04-14T16:45:33.007 回答