数据库的三大范式

为什么需要范式

避免信息重复

方便更新异常

插入异常:无法正常显示信息

删除异常:丢失有效的信息

三大范式

要举例的数据较多,我就用Excel演示了

第一范式

要求数据库中每一个字段都是不可再分的原子数据项
重点是不可再分

先看下下面这张表
数据库的三大范式
有没有什么不对的?

根据不可再分的要求,学习状况这栏就不满足
应该拆分为如下的字段数据库的三大范式
这个表才满足第一范式的要求

第二范式

在满足第一范式的基础上,要确保数据库中每一列都和主键相关只存储一类数据

比如下面的反例
数据库的三大范式
虽说的确可以考试与学号相关
但考试成绩这一类是依赖于考试号应当单独为一个表数据库的三大范式

第三范式

在满足第二范式的基础上
确保每个数据与主键直接相关

还是下面这张表,其班主任信息确实依赖学生存在
但班主任其实并不是直接依赖于学生,其可以自己独立成一张表,比如“李四”的信息,这里就存储了两次
数据库的三大范式
如果单独一张表,再以班主任姓名关联,那么在大数据的背景下就可以节约诸多的空间
数据库的三大范式

规范与性能的博弈

第一范式就要去我们尽可能多的建表,让每个数据块都足够规整
这就意味着我们要获取完整数据的时候必须联表查询

其带来的时间消耗是巨大的,尤其是在数据量上万的时候……时间就是金钱啊

阿里的数据库规范性文件要求中就有数据库的三大范式
强制的要求,关联查询的性能代价可见一斑

性能为优

在实际用户使用时,如果长时间未响应,用户还会等待吗?

所以在条件允许的情况下,保证常常要访问的数据的完整性,使其一张表就能都查完,这才是更重要的