1. 什么是三范式
-- 设计关系型数据库表时,要想设计一个好的关系,必须使关系满足 一定的约束条件,这些约束条件就是 范式
2.为什么设计数据库要遵循 范式
    -- 1. 使数据库简洁、结构明晰
    -- 2. 不会发生插入、删除、更新操作带来的异常
    -- 3. 避免数据冗余
3. 范式的种类
    -- 第一范式(1NF)
    -- 第二范式(2NF)
    -- 第三范式(3NF)
    -- 巴斯-科德范式(BCNF)
    -- 第四范式(4NF)
    -- 第五范式(5NF,又称完美范式)
    -- 一般来说,数据库只需要满足第三范式就行了
4. 第一范式
-- 保证每列的原子性 : 数据库表中所有字段的值都是不可分解的原子值,不是集合、数组等非原子项
5. 第二范式
-- 保证每张表只描述一个事情
-- 示例(不符合第二范式)
学号  姓名  年龄  课程  成绩  学分
1    张飞  20    数学  90   2
2    关羽  21    语文  91   1
2    关羽  21    英语  91   1
3    张飞  22    英语  92   2
4    张让  25    英语  90   2
-- 分析
-- 1. 满足第一范式(字段的原子性)
-- 2. 不满足 第二范式
--      描述了两个信息 : 1.学生信息 2. 课程信息
-- 存在问题
--   1. 数据冗余
--      同一门课程中,学分重复了
--      同一个学生 参加了多门课程, 学号、姓名、年龄重复了
--   2. 更新异常
--      如果某们课程调整了学分,包含这门课程的所有记录,都得更新数据 (数据一致性成本较大)
--   3. 插入异常
--      如果开设一门新课程,如果没人选这门课程,该课程的信息无法存储
--   4. 删除异常
--      如果完成课程的学生记录删除,该门课程也会被删除
-- 示例(符合第二范式)
-- 学生信息表
学号  姓名  年龄
1    张飞  20
2    关羽  21
3    张让  25
-- 课程信息表
课程  学分
数学  2
语文  1
英语  3
-- 学生成绩表
学号  课程  成绩
1    数学  2
2    语文  1
2    英语  1
3    英语  2
4    英语  2
6. 第三范式
-- 保证 每列都 和 主键相关
-- 也就是 表的字段 和 主键 直接对应,不依靠其他字段
-- 分析
-- 学号 与 学分对应 需要依靠课程名称