Mysql——》范式

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】

一、范式化

1、范式

Normal Form = NF = 范式
指的是一张数据表的表结构所符合的某种设计标准的级别。

2、三范式

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识
第三范式:3NF是对字段的冗余性约束,要求字段没有冗余,任何字段不能由其他字段派生出来(每个属性都跟主键有直接关系而不是间接关系)

3、优点

可以尽量得减少数据冗余,使得更新快,体积小

4、缺点

对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化

二、反范式化

1、反范式化

反范式化就是违反范式化设计,使用空间来换取时间

  1. 为了性能和读取效率而适当的违反对数据库设计范式的要求
  2. 为了查询的性能,允许存在部分(少量)冗余数据

2、优点

可以减少表的关联,可以更好得进行索引优化

3、缺点

数据冗余以及数据异常,数据得修改需要更多的成本

4、常见的反范式设计

缓存:存储从其他表获取数据的表
汇总:存储聚合数据的表

Q:如何维护缓存表和汇总表中的数据?
A:常用的有两种方式,具体使用哪种取决于应用程序:
1、实时维护数据
2、定期重建
一般来说,缓存表用实时维护数据更多点,往往在一个事务中同时更新数据本表和缓存表,汇总表则用定期重建更多,使用定时任务对汇总表进行更新。

三、范式化 VS 反范式化

不同点范式化反范式化
内存占用
更新操作
数据重复度
查询表关联
查询索引命中率

总结

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值