文章目录
- ER模型的概念
- 如何画ER图
- ER图转换为关系数据库
ER模型的概念
实体
画图时用方形表示属性
用椭圆形表示关系
用菱形表示主键(主码)
在主属性下面画划线外键(外码)
这里一般是用于一对多或者一对一有关系的时候将某个主属性作为另一方的外键时候要用到,这里是在外键属性下波浪线表示外键(外码)
如何画ER图
画ER图的总结反思:
- 实体之间基本都是用关系(菱形) 关联起来
- 关系之间标上对应数量 1:1 / 1:n / n:m
- 实体还可以与自身创建关系(比如:职工与领导,领导本身也是职工的一员,这时候就可以开一个关系叫做“带领”/“领导”之类的动词作为关系 ,然后与自身连起来)
- 在画关系的时候,有时候一个关系也要唯一标识的时候就需要加上某些属性,比如说借书这个关系,借书需要有借书时间,借书人ID等等,这就是权衡利弊的时候了,设也是我认为设计数据库的魅力之一。
ER图转换为关系数据库
- 将实体转化为一个关系数据表即可(考虑主键的设计)
- 1:1关系
当出现1:1的二者实体的关系的时候,很简单,只需要将一方的主键添加到另一方中作为外键属性
举例子:一对一,一个院对应一个院长,要么将院长(ID)主键加入到系的表中作为外键或者将院的ID加入到院长的属性中作为外键,这里可能会很容易想到将院ID加入院长中不切实际,因为其他教师也要加入用来分辨该老师属于哪一个院的,所以这也是数据库设计的一大魅力,这里的需求肯定是第一种方式解决最好。 - 1:n关系
1:n需要将1的一方的主键添加到n一方实体的属性中作为外键。
举例子:一个院对应多名老师,这时候本该的操作肯定是将院的ID加入到多名老师中,假设我们不这么做会发生什么?假设不这么做,而是将多名老师的ID加入到院中,正常人一想到这肯定就知道了这数据冗余是有多大,而且我们要查某个老师是哪一个院的时候我们还要去院表中查,这既不方便又充斥着无用数据在院表中,因为不止一个院不止一个老师。还方便查找等等。 - n:m关系
出现这个多对多的关系之后就要求把这个关系也设计出来一个单独的关系(表),我认为比较暴力有用的方法就是将这个关系连接的两者的主键取出来作为该关系的联合主键,然后这关系该有的属性也一并添加进去即可。
举例子:书籍与借书人的关系,我们不能把书籍信息放进借书人表中,因为不止借一本,借书人表信息一般只对应一个与元组,因为有他自己注册的ID账号嘛,做过数据库的都知道不可能多个主键存储,反过来对于书籍也是一样,不可能为了你这个借书人特地为这个书籍存储的信息记录借书人的信息,更不要说一本书以后会有多个人借阅了,这时候就需要另外创建一个表,用来记录二者的关系,查找的时候也方便,将二者的主键添加到ER关系的关系表中,然后也方便查找,正产人思维去到前台不都是报自己的账户然后书名查看自己到底有没有借还某本书,或者一查账户就知道借还了什么书。(同理还有学生与课程之间有一个选课关系也要单独提取出来为一个表,因为是多对多的关系,一个学生不可能只学习一门课程,一门课程也不可能只为一个学生开设。) - 用鲁琴老师的课件例题作为参考复习