CS-Notes 学习笔记
面试常问Java 后端 · MySQL

数据库的三大范式是什么?什么时候会有意反范式?

先自己想一想,再看参考要点

参考要点

  • 第一范式:属性不可分,例如“联系方式”中同时存电话和邮箱,要拆成两列
  • 第二范式:每个非主属性完全函数依赖于键码,例如以(学号,课程)为键的选课表中,姓名、学院只依赖学号,要拆成学生表和成绩表
  • 第三范式:非主属性不传递依赖于键码,例如学号决定学院、学院决定院长,要把学院和院长拆出去
  • 范式减少冗余和修改异常,代价是查询时要连接更多的表
  • 反范式有意保留冗余,例如在文章表中保存评论数,查询不必每次 COUNT,但增删评论时要同时更新它
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。