三大范式
三大范式越来越严格,第一范式 < 第二范式 < 第三范式
第一范式
-
确保每一列都保持原子性(每个字段的值都是原子的不可分割的)
eg:如果经常对字段里面的某一部分值进行操作,那么就要把它分离出来(住址中的城市)
第二范式
-
记录具有唯一性,即记录要有唯一标识,不存在部分依赖。
-
确保数据中的每一列都和主键有关,数据不是糅杂的
(不能在user表里面放test的内容) 学号,姓名,课程号,学分(学分依赖课程号,姓名依赖学号),所以要把这张表拆成两张表 student(学号,姓名) course(课程号,学分) studentCourse(学号,课程号,成绩)
第三范式
- 每一列的数据都和主键直接相关,不是间接相关(字段之间不存在传递依赖)
反范式
- 为了性能考虑,可以反范式(一般而言,数据库的设计应该满足第三范式)
范式的优点
- 范式化的表的更新操作更快
- 范式化的表数据冗余更少,重复数据少,修改的数据更少
- 范式化的表的数据更少,所以占的空间小,可以放在内存里面,操作更快
- 查询更简单
范式的缺点
- 表之间需要关联
反范式的优点
- 避免了表的关联
- 可需要扫描一张表(这个通常是顺序io,比随机io更快),速度很快
混用
范式化和反范式可以混合使用,最常用的就是复制(冗余部分数据可以边鱼查询)或者缓存
《高性能mysql》 我爱mysql