三大范式

范式

范式(Nomal Format):是离散数学中的知识,是为了解决数据的存储与优化问题,保证数据存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,终极目标是为了减少数据的冗余。
范式是一种分层结构的规范,分为6层。每一层都比上一层更加严格;若要满足下一层范式,前提是满足上一层范式。
六层范式:1NF,2NF…6NF,1NF是最底层,要求最低,6NF最高层,最严格。
mysql属于关系型数据库,有空间浪费,需要节省存储空间,与范式所要解决的问题不谋而合,在设计数据库的时候,会利用到范式来知道设计。但是数据库不单要解决空间问题,还要保证效率问题,范式只解决空间问题,所以数据库的设计又不能完全按照范式的要求实现,一般情况下,只有前三种范式需要满足,即满足三范式。
范式在数据库的设计中有指导意义,但是不是强制规范。

1NF

第一范式:在设计表存储数据的时候,如果表中设计的字段存储的数据,在取出来使用之前还需要额外的处理(拆分),那么说表的设计不满足第一范式。第一范式要求字段的数据具有原子性,即不可再分。

2NF

要满足第二范式必须满足第一范式。
第二范式:在数据表设计的过程中,如果有复合主键(多字段主键),且表中有字段并不是由整个主键来确定,而是依赖主键中的某个字段(主键的部分),存在字段依赖主键部分的问题,称之为部分依赖,第二范式就是解决表设计不允许出现部分依赖。
解决方案1:
可以拆表
解决方案2:
取消复合主键,使用逻辑主键。比如增加一个id。

3NF

要满足第三范式必须满足第二范式。
第三范式:理论上说,应该一张表中的所有字段都应该直接依赖主键(不包括逻辑主键,因为逻辑主键代表的是业务主键)。如果表设计中存在一个字段,并不直接依赖主键,而是依赖非主键字段的依赖关系称之为传递依赖。第三范式就是解决传递依赖问题。
解决方案:将存在传递依赖的字段以及依赖的字段本身单独取出,形成一个单独的表,然后在需要对应的消息的时候,使用对应实体表的主键加进来。

逆规范化:
有时候,在设计表的时候,如果一张表中有几个字段是需要从另外的表中去获取信息,理论上来讲,的确可以获取到想要的数据,但是就是效率低一点。会刻意的在某些表中,不去保存另外表的主键(逻辑主键),而是直接保存想要的数据信息,这样一来,在查询数据的时候,一张表可以提供数据,而不需要多表查询(效率低),但是会导致数据冗余增加。
逆规范化:磁盘利用率与效率的对抗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值