使用实体关系图对数据库进行建模
Posted
技术标签:
【中文标题】使用实体关系图对数据库进行建模【英文标题】:Modeling a database using entity relationship diagram 【发布时间】:2017-09-10 21:44:58 【问题描述】:我已经创建了这个 ERD,看看:https://i.gyazo.com/ea3ad2073ad5302834b642dea7467662.png
但现在我想在我的图表中添加更多信息,但我不知道该怎么做。
我想修改我之前的 ERD,我需要确保每个班次都送到医生工作的医院。另外,我需要为每位患者注册医疗保险。
希望你能帮助我
【问题讨论】:
您可以对医生和医院之间的works at
关系建模,但 ER 模型和图表符号不支持复杂的约束。我只需在 ERD 上做一个注释,然后将必要的唯一索引和外键约束添加到物理模型/实现中。
@reaanb 谢谢你的回复,但是你能告诉我(使用截图)你会做什么吗? :S
在我发布答案之前,也许您可以提供更多关于您对医疗保险的要求的信息。您只需要提供者和编号的患者属性,还是要对提供者和计划以及家属和排除项等进行建模?
@reaanb 是的,伙计,你是对的。可以给我看两个例子吗?
我的最后一条评论是要求提供更多信息。我不知道你需要什么医疗保险。
【参考方案1】:
您可以在 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 约束。
图表上的一些 cmets:同时使用 Crow's feet 和 1-N 基数指示符是多余的。我建议只使用 1-N 基数指标,因为您的图表主要使用 Chen 的符号。鱼尾纹在表格图中更常用。
其次,我认为Shifts
被错误地建模为弱实体集。弱实体集是(至少部分)由单个父实体集标识的实体集。如果您的意图是 Shifts
由 Patient
、Doctor
和 Hospital
唯一标识,则最好将其表示为这些实体集之间的三元关系。但是,根据我的经验,患者不仅限于每位医生/医院一次就诊。也许您打算使用 Date
和 Hour
作为弱键,但这会产生复杂的关系,如果您想将任何其他内容与班次相关联,则必须将所有 5 列作为复合外键包含在另一张桌子。就个人而言,我宁愿引入一个代理键来使其成为常规实体集。
如果对Person
做同样的事情可能是个好主意。使用 DNA 作为标识符存在许多问题。大小(DNA 档案往往很大)、隐私问题(标识符可能包含有价值或敏感的信息)、实际困难(每个医生和患者必须在注册之前进行 DNA 测序吗?)、准确性(有限的档案可能无法保证唯一而完整的配置文件是不切实际的)。
至于医疗保险,我建议您在线研究该主题(甚至咨询该领域的专家)并确定您需要哪些实体、属性和关系。一旦你知道你想添加什么信息,我可以建议如何添加它。
【讨论】:
没关系,伙计,但是这个案子呢? ***.com/questions/43416585/…以上是关于使用实体关系图对数据库进行建模的主要内容,如果未能解决你的问题,请参考以下文章
《Entity Framework 6 Recipes》中文翻译系列 -----第二章 实体数据建模基础之使用Code First建模自引用关系 (转)