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

时间:2017-04-14 15:40:00

标签: database database-design entity-relationship-model

我已创建此ERD,请查看:https://i.gyazo.com/ea3ad2073ad5302834b642dea7467662.png

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

我想修改我以前的ERD,我需要确保每一班都送到医生工作的医院。另外,我需要为每位患者注册医疗保险。

希望你能帮助我

1 个答案:

答案 0 :(得分:0)

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

我会在我的ERD图上做一个注释,以表明约束:

Doctor works at Hospital 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约束。

关于你的图表的一些评论:使用Crow的脚和1-N基数指标是多余的。我建议只使用1-N基数指标,因为你的图表大多使用陈的符号。乌鸦的脚更常用于表格图中。

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

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

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