数据库的三大范式

为什么需要范式

避免信息重复

方便更新异常

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

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

三大范式

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

第一范式

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

先看下下面这张表
在这里插入图片描述
有没有什么不对的?

根据不可再分的要求,学习状况这栏就不满足
应该拆分为如下的字段在这里插入图片描述
这个表才满足第一范式的要求

第二范式

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

比如下面的反例
在这里插入图片描述
虽说的确可以考试与学号相关
但考试成绩这一类是依赖于考试号应当单独为一个表在这里插入图片描述

第三范式

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

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

规范与性能的博弈

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

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

阿里的数据库规范性文件要求中就有在这里插入图片描述
强制的要求,关联查询的性能代价可见一斑

性能为优

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值