mysql(3)

151 阅读1分钟

三大范式

	三大范式越来越严格,第一范式 < 第二范式 < 第三范式 

第一范式

  • 确保每一列都保持原子性(每个字段的值都是原子的不可分割的)

      eg:如果经常对字段里面的某一部分值进行操作,那么就要把它分离出来(住址中的城市)
    

第二范式

  • 记录具有唯一性,即记录要有唯一标识,不存在部分依赖。

  • 确保数据中的每一列都和主键有关,数据不是糅杂的

      (不能在user表里面放test的内容)
      学号,姓名,课程号,学分(学分依赖课程号,姓名依赖学号),所以要把这张表拆成两张表
      student(学号,姓名) course(课程号,学分) studentCourse(学号,课程号,成绩)
    

第三范式

  • 每一列的数据都和主键直接相关,不是间接相关(字段之间不存在传递依赖)

反范式

  • 为了性能考虑,可以反范式(一般而言,数据库的设计应该满足第三范式)

范式的优点

  1. 范式化的表的更新操作更快
  2. 范式化的表数据冗余更少,重复数据少,修改的数据更少
  3. 范式化的表的数据更少,所以占的空间小,可以放在内存里面,操作更快
  4. 查询更简单

范式的缺点

  • 表之间需要关联

反范式的优点

  • 避免了表的关联
  • 可需要扫描一张表(这个通常是顺序io,比随机io更快),速度很快

混用

范式化和反范式可以混合使用,最常用的就是复制(冗余部分数据可以边鱼查询)或者缓存

《高性能mysql》 我爱mysql