一、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`)

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)