目录

2022-01-16-数据库设计-ER图

数据库设计 ER图

一、ER图简介

ER图,简单来说, E 是实体,实体有一组属性; R 是关系。找到系统中的实体以及实体关系就可以绘制出ER图了。

例如,下图是网上找到的ER图,矩形的是实体,椭圆是属性,实体和实体时间的关系用菱形,关系也有属性,

例如, 学生学号、姓名 等诸多属性,是一个实体

课程课程名、学分 等属性,也是一个实体。

学生 有 **选修

课程** 的关系,所以这两个实体之间有个选课关系。而且 选课 还有 成绩 ,所以在选修关系上有一个属性“成绩”,当然如果系统需要,也可以记录选修的时间等属性信息。

https://i-blog.csdnimg.cn/blog_migrate/e630fa675bedaa618666acd7a3fd1677.png

认真看下,你会发现ER图理解起来还是比较容易的。

ER图中识别出实体后,找到 实体之间的关系 很重要。而关系可能是 一对一(1:1)、一对多(1:n),多对多(m:n) ,关系用菱形表示,而关系的类型在菱形的两条与实体的连接线上标注,

判断两个实体的关系是,先让实体A假设为1,看它能对应实体B的个数,然后反过来,假设实体B为1个,看实体A对应的个数,就可以得到实体对应关系。

例如,

1 个学生 可 **关注

多个商品** ,而 1个商品 可 **被多个学生

关注** ,所以学生和商品的关系是 多对多

**1个学生

属于

1个班级** ,而 1个班级 可以 **有

多个学生** ,所以班级和学生的关系是 一对多

1个学生

拥有 1张饭卡 ,而 1张饭卡属于

1个学生 。所以学生和饭卡的关系是 一对一

https://i-blog.csdnimg.cn/blog_migrate/a65316a09a7a454f448cec767cda3882.png

二、ER图绘制常见问题

但是真的落实到自己绘制,很多同学就会遇到困难。下面我们通过反例来学习ER图

1.反例1  区分功能和关系

例如,管理员可以管理用户。但是如果系统不记录哪个管理员可以管理哪些用户,那么就无需在ER图上绘制该关系。只有需要在数据库保存的关系,才需要在ER图上保存。

2. 反例2:区分程序功能和数据库数据

挂号排队信息

我个人挂号排队一般不用保存到数据库,所以无需在ER图上表示

另外,如果要显示排队信息,我认为应当是给每个用户一个id序号,程序实现排队,而不是数据库去记录这个排队信息、

https://i-blog.csdnimg.cn/blog_migrate/86b65185fc4aec390dec06507ec931b9.png

三。ER图转关系模式

https://i-blog.csdnimg.cn/blog_migrate/cd4e1b40cb54d5fac752cc5698ead806.jpeg

所有的实体应当转为一张表。所以上面的 班级 学生 课程 教师 都是一张表

班级表 包含字段: 班级号,班级名,专业,人数

主键:班级号

学生表 包含字段: 学号,姓名,性别,年龄

主键:学生号

课程表 包含字段: 课程号,课程名,课时,学分

主键:课程号

教师表 包含字段: 编号,姓名,职称,年龄,性别

主键:编号

根据关系是1:1  1:n   m:n 转成表

1)  对于 1:1的  可以将关系保存到任何一个实体表中,

  1. 对于1:n的,可以将关系保存到n的那个实体里,例如图中的班级和学生是1对多,那么可以在学生表中增加一个班级id的字段,说明该学生是哪个班级的

学生表 包含字段: 学号,姓名,性别,年龄,班级ID

主键:学生号

3)对于多对多的关系  m:n的 ,关系保存到新表中

例如,学生和课程是多对多的关系,那么吧两个表的主键拿出来,加上关系属性,组成一个表

学生成绩表

学号 课程号 成绩

主键:学号  课程号

68747470733a2f2f62:6c6f672e6373646e2e6e65742f63616f686f6e6778696e672f:61727469636c652f64657461696c732f313232333938383235