使用实体关系图对数据库建模

Modeling a database using entity relationship diagram

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

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

我想修改我以前的ERD,我需要确保每个班次都送到医生所在的医院。还有,我需要登记每位患者的医疗保险。

希望你能帮助我

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

我会在我的 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)
);

注意 Works_At 中的 UNIQUE KEY 和 Shifts 中的复合 FOREIGN KEY 约束。

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

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

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

关于医疗保险,我建议你上网研究一下这个话题(或者甚至咨询该领域的专家),确定你需要的实体、属性和关系。一旦您知道要添加哪些信息,我可以就如何添加提供建议。