数据库建立遵循的三大范式
数据库设计深刻影响着存储性能和数据的操作效率,为了避免操作异常,在设计数据库的时候需要满足一定的规范要求,这里就引入了范式。
范式有多种级别:第一范式,第二范式,第三范式,bcnf,第四范式以及第五范式
本章节重点讲解第一范式,第二范式和第三范式
三大范式的共同点是:一张表只描述一个事物
使用外键连接有关系的表
第一范式
第一范式是指数据库表的每一列都是不可分割的基本数据线;也就是原子性
学号(主键) | 姓名 | 联系方式 |
---|---|---|
9222 | 向高 | email:xiangg@qq.com;phone:156666 |
在该表中的联系方式没有遵守第一范式。该练习方式的列包含了邮箱地址和联系电话,应该在该列也要分为两列
第二范式
第二范式是在第一范式的基础之上建立起来的,满足第二范式的前提是先满足第一范式。
第二范式的规则是:
如果表是单键的,那么主键以外的列必须完全依赖主键
如果表是复合主键的,那么主键以外的列必须完全依赖主键,不能仅仅依赖主键的一部分
如示例出现的问题:
学号(主键) | 学生姓名 | 课程编号 | 课程名称 |
---|---|---|---|
1216 | 下颚 | 122 | 程序c |
该表本来是描述了两个事物的,学生和课程的,不能放到一个表中。因为学生依赖的唯一标识是学号主键,而课程号主键唯一标识的是学生对应的课程
可以将其改进为学生表,课程表,学生表和课程表的中间表。
第三范式
第三范式着重问题还是为了 解决数据冗余的问题。第三范式的基础的前提同样是第二范式。第三范式要求:
表中的非主键列必须和主键直接相关而不能间接相关;也就是说非主键之间不能相关依赖
示例:
用户编号(主键) | 用户姓名 | 用户等级 | 享受折扣 |
---|---|---|---|
2464 | 徐华说 | 1 | 0.9 |
2469 | 殿下 | 2 | 0.8 |
该表中:用户等级和享受折扣存在依赖关系,不满足第三范式,需要拆分表格
用户表 只有用户编号,用户姓名,用户等级
折扣表只有用户等级和享受折扣