从零到ER图:保姆级数据库设计教程,看完就能搞定课程设计(含常见题型解析)
在数据库课程设计或毕业设计中,ER图建模往往是让初学者最头疼的环节。面对"医院病房管理"、"旅行社系统"等业务场景,如何从零开始梳理实体、属性和联系?本文将用最直观的方式,带你掌握ER图设计的核心方法论,并针对课程设计中常见的填空题题型提供解题框架。
1. ER图设计四步法
1.1 需求分析:从业务描述中提取关键要素
拿到一个业务场景描述时,首先用标记法划出所有名词和动词:
- 名词通常对应实体或属性(如"病人"、"病历号")
- 动词通常对应联系(如"属于"、"负责")
以医院管理系统为例:
"一个科室有多个病房,多名医生;一个病房只能属于一个科室..."
提取结果:
- 实体:科室、病房、医生、病人
- 联系:科室-病房(1:N)、科室-医生(1:N)
注意:属性需要进一步筛选,如"科室名"是属性而非实体
1.2 实体与属性定义
用下表区分实体和属性:
| 特征 | 实体 | 属性 |
|---|---|---|
| 独立性 | 独立存在 | 依附于实体 |
| 标识性 | 有唯一标识符 | 描述实体特征 |
| 例子(医院系统) | 医生 | 医生姓名 |
常见错误:
- 将复合属性作为实体(如"地址"拆分为省/市/街道)
- 忽略派生属性(如"年龄"可由"出生日期"计算)
1.3 联系类型判定技巧
联系类型的快速判断方法:
1:1联系:双方最大参与度都是1
例:病人-病床(一个病人固定一张床)1:N联系:一方最大参与度为1,另一方为N
例:科室-医生(一个科室有多名医生)M:N联系:双方最大参与度都是N
例:学生-课程(一个学生选多门课,一门课有多名学生)
提示:联系类型的属性(如"选课"中的成绩)必须体现在ER图中
1.4 转换关系模式的三大规则
根据联系类型转换关系模式:
| 联系类型 | 转换规则 | 示例(医院系统) |
|---|---|---|
| 1:1 | 任一方加入对方主键 | 病床表加入病人ID |
| 1:N | N端加入1端主键 | 医生表加入科室ID |
| M:N | 新建关系模式,包含两端主键+联系属性 | 就诊表(医生ID,病人ID,日期) |
特殊处理:弱实体的转换需包含依赖实体的主键
2. 典型场景ER图设计案例
2.1 医院管理系统设计
实体清单:
- 科室(科室号、名称、电话)
- 病房(病房号、床位号)
- 医生(工号、姓名、职称)
- 病人(病历号、姓名、性别)
联系矩阵:
| 联系 | 类型 | 属性 |
|---|---|---|
| 科室-病房 | 1:N | 无 |
| 科室-医生 | 1:N | 聘用日期 |
| 医生-病人 | 1:N | 诊断日期 |
| 病房-病人 | 1:N | 入院时间 |
转换后的关系模式:
科室(科室号, 名称, 电话) 病房(病房号, 床位号, 科室号) 医生(工号, 姓名, 职称, 科室号) 病人(病历号, 姓名, 性别, 病房号, 主管医生工号)2.2 旅行社系统设计
特殊处理点:
- 线路与景点的M:N联系:需要中间关系"线路景点"
- 导游与线路的1:N联系:导游表加入线路ID
常见错误修正:
- 避免将"团队"属性放在"线路"中
- "线路景点"联系应包含"游览顺序"属性
3. 填空题高频考点解析
3.1 实体与联系计数
解题模板:
- 统计所有独立名词(排除属性)
- 确认联系数量(动词短语数)
例:
"每个班级有若干运动员...每名运动员可参加多项比赛"
答案推导:
- 实体:班级、运动员、比赛项目 → 3个
- 联系:班级-运动员(1:N)、运动员-项目(M:N) → 2个
3.2 属性个数统计
易错点:
- 不统计外键属性
- 联系本身的属性单独计算
例:
"医生被某一科室聘用时有聘用日期和聘用期限属性"
正确计数:
- 医生实体属性:工号、姓名、职称 → 3个
- 联系属性:聘用日期、聘用期限 → 2个
3.3 关系模式转换
典型考题: "根据ER分析结果,至少应生成__个关系模式"
计算公式:
关系模式数 = 实体数 + M:N联系数特殊情形:
- 弱实体需额外+1
- 继承关系根据转换方式不同
4. 设计检查清单
4.1 ER图绘制自查表
- [ ] 所有实体用矩形表示
- [ ] 所有属性用椭圆表示
- [ ] M:N联系转换为菱形
- [ ] 主键属性加下划线
- [ ] 联系类型标注正确(1:1,1:N,M:N)
4.2 关系模式验证要点
范式检查:
- 确保每个关系模式满足3NF
- 检查是否存在部分函数依赖
外键完整性:
-- 示例:病房表的外键约束 ALTER TABLE 病房 ADD CONSTRAINT fk_dept FOREIGN KEY (科室号) REFERENCES 科室(科室号)业务规则验证:
- 一个病人只能有一个主管医生
- 一种材料可以加工成多种零件
4.3 常见错误警示
联系遗漏:
- 忘记"出版社-图书"的出版日期属性
- 忽略"学生-课程"的成绩属性
类型误判:
- 将"工厂-产品"(带计划数量)误判为纯M:N
- 混淆"医生-病人"的1:N与M:N
冗余设计:
- 在"职工"表中重复存储部门名称
- 将派生属性"年龄"持久化存储
实际项目中,建议使用MySQL Workbench等工具进行可视化设计,其自动校验功能可规避60%以上的基础错误。对于课程设计,先用铅笔绘制草图,对照检查清单逐项确认后再上机操作,能显著提高一次成功率。