关系型数据库
关系型数据库的两个基本概念:E-R图和三大范式
1.E-R模型
(1)概念
当前的数据库都是根据E-R模型设计的
- E表示entry,实体
- R表示relationship,关系
- 一个实体转换为数据库中的一个表
- 关系描述两个实体之间的对应规则,包括一对一,一对多,多对多
如:
博客(实体)与 用户(实体)-----关系是:一对多
用户(实体)与 博文(实体)------关系是:一对多
2 .三大范式
经过研究和经验,对数据库的设计提出了一些规范,这些规范被称为范式
- 第一范式(1NF):列不可拆分,即无重复的域
- 第二范式(2NF):唯一标识,即拥有实体的唯一标识(如:身份证,id号等)
- 第三范式(3NF):引用主键,即每列数据都与主键直接相关
关系型数据库有六种范式。一般来说,数据库只需满足第三范式就可以
3.范式判断案例
1)范式判断:是否符合第一范式?
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项
不符合第一范式,因为联系方式这一列还可以再分为邮箱和电话
正确的为:
2)范式判断:是否符合第二范式
第二范式指每个表中必须仅有一个主键,其他数据元素必须与主键的关系是一一对应,这种关系称为函数依赖
第二范式:符合第一范式的条件下,消除部分函数依赖
不符合,因为班级地址依赖于班级班级编号,剩下的列依赖于姓名,应分为两个表
3)范式判断:是否符合第二范式?
1)每一名学生的学号、姓名、系名、系主任这些数据重复多次。每次系与对应的系主任的数据也重复多次(数据冗余过大)
2)假如学校新建了一个系,但是暂时还没有招收任何学生,那么无法将系名与系主任单独的添加到数据表中(插入异常)
3)假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(删除异常)
4)假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据(修改异常)
将上表分为以下几个表就可以了
4)范式判断:是否符合第三范式?
第三范式:每个表必须只有一个主键
不符合,完全符合了第二范式,但是薪资等级和奖学金之间存在函数依赖性,所以分割表
4.范式
- 三大范式只是一般设计数据库需要遵循的基本规范,由此可以建立冗余较小、结构合理的数据库
- 如果有特殊需求,需要根据需求创建数据库,数据库的设计:需求>性能>表结构
- 所以不应一味的追求符合三大范式去创建数据库