一、E-R图核心要素与标准符号
1. 实体(Entity)
表示法:矩形框
规范:使用单数名词(如`Student`而非`Students`)
示例:
┌─────────────┐
│ Student │
└─────────────┘
2. 属性(Attribute)
表示法:椭圆形(或矩形列表)
类型标记:
主键:下划线(`student_id`)
外键:斜体
多值属性:双椭圆
示例:
student_id
│
┌────┴────┐ ┌─────────┐
│ Student ├────┤ address │(复合属性)
└────┬────┘ └─────────┘
│
student_name
3. 关系(Relationship)
表示法:菱形框 + 连线基数
基数表示:
一对一(1:1):`┼──|`
一对多(1:N):`┼──<`
多对多(M:N):`>──<`
示例:
erDiagram
STUDENT ||--o{ COURSE : "enrolls"
COURSE ||--|{ LECTURE : "contains"
二、专业绘图步骤(以教务系统为例)
步骤1:识别核心实体
必选实体:`Student`, `Course`, `Teacher`
可选实体:`Department`, `Classroom`
步骤2:定义属性(符合3NF)
erDiagram
STUDENT {
string student_id PK
string name
date birth_date
string email UK
}
COURSE {
string course_code PK
string title
int credits
}
步骤3:建立关系(含业务规则)
1. 学生选课(M:N关系需关联实体):
erDiagram
STUDENT ||--o{ ENROLLMENT : "registers"
ENROLLMENT {
date enroll_date
char grade
}
COURSE ||--o{ ENROLLMENT : "has"
2. 教师授课(带角色属性):
erDiagram
TEACHER ||--o{ COURSE_ASSIGNMENT : "teaches"
COURSE_ASSIGNMENT {
string semester
string role "主讲/助教"
}
COURSE ||--o{ COURSE_ASSIGNMENT : "assigned"
步骤4:添加约束条件
教师每周授课不超过5门:在`COURSE_ASSIGNMENT`实体添加约束
学生选课上限:在`ENROLLMENT`关系上标注`(max=8)`
三、主流工具对比
工具 | 适合场景 | 关键功能 | 输出示例格式 |
---|---|---|---|
Lucidchart | 团队协作 | 实时协作、版本历史 | PNG/SVG |
Draw.io | 免费方案 | 离线使用、Visio兼容 | XML/HTML |
ERwin | 企业级设计 | 正向/逆向工程、DDL生成 | PDF/RTF |
PlantUML | 开发人员 | 代码化设计、Git友好 | PNG/SVG |
Visio专业模板:
下载微软官方ER图模板(搜索:`Database Model Diagram`)
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程