我已经创建了这个 ERD,看看:https ://i.gyazo.com/ea3ad2073ad5302834b642dea7467662.png
但现在我想在我的图表中添加更多信息,但我不知道该怎么做。
我想修改我之前的 ERD,我需要确保每个班次都送到医生工作的医院。另外,我需要为每个病人登记医疗保险。
希望你能帮我
我已经创建了这个 ERD,看看:https ://i.gyazo.com/ea3ad2073ad5302834b642dea7467662.png
但现在我想在我的图表中添加更多信息,但我不知道该怎么做。
我想修改我之前的 ERD,我需要确保每个班次都送到医生工作的医院。另外,我需要为每个病人登记医疗保险。
希望你能帮我
您可以Works at
在 ERD 中对关系进行建模,但复杂的约束(例如确保医生轮班发生在他们工作的医院)只能在物理模式中正确表示,因为它依赖于复合 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)
);
注意 UNIQUE KEY inWorks_At
和复合 FOREIGN KEY 约束Shifts
。
对您的图表的一些评论:同时使用 Crow's feet 和 1-N 基数指标是多余的。我建议只使用 1-N 基数指标,因为您的图表主要使用 Chen 的符号。鱼尾纹在表格图中更常用。
其次,我认为Shifts
被错误地建模为弱实体集。弱实体集是(至少部分)由单个父实体集标识的实体集。如果您的意图是由和Shifts
唯一标识Patient
,则最好将其表示为这些实体集之间的三元关系。但是,根据我的经验,患者不仅限于每位医生/医院一次就诊。也许您打算使用and作为弱键,但这会产生复杂的关系,并且如果您想将其他任何内容与班次相关联,则必须将所有 5 列作为复合外键包含在另一个表中。就个人而言,我宁愿引入一个代理键来使其成为常规实体集。Doctor
Hospital
Date
Hour
如果对Person
. 使用 DNA 作为标识符存在许多问题。大小(DNA 档案往往很大)、隐私问题(标识符可能包含有价值或敏感的信息)、实际困难(每个医生和患者必须在注册之前进行 DNA 测序吗?)、准确性(有限的档案可能无法保证唯一而完整的配置文件将是不切实际的)。
至于医疗保险,我建议您在线研究该主题(甚至咨询该领域的专家)并确定您需要哪些实体、属性和关系。一旦你知道你想添加什么信息,我可以建议如何添加它。