数据库设计--三范式与反三范式

范式

关系型数据库中,关于数据表设计的基本原则和规则就成为范式

三范式

第一范式:保持每列字段的原子性
第二范式:在满足第一范式的基础上,消除对主键的部分依赖,保证对主键的绝对依赖
第三范式:在满足第二范式的基础上,消除间接依赖. 不存在对主键间接依赖传递

范式优缺点
优点:

  1. 数据的标准化有助于消除数据库中的数据冗余
  2. 第三范式通常被认为 在性能,扩展性和数据完整性方面达到了最好的平衡
    缺点:
  3. 降低了查询效率,因为范式等级越高,设计出来的表就越多,进行数据查询的时候就可能需要关联多张表,不仅代价昂贵,而且可能会使得一些索引失效
  4. 范式只是提出设计的标准,实际设计的时候,我们可能为了性能和读取效率违反范式的原则,通过增加少量的冗余或重复的数据来提高数据库的读取性能,减少关联查询,实现空间换时间的目的

第一范式 : 每列保持原子性
原子性 : 只有一类信息 , 信息不可再拆分 ,字段代表唯一业务的语义,不会出现多维度的信息

第二范式: 属性字段完全依赖于主键—>不存在对主键部分的依赖
前提:满足第一范式
表中字段对主键产生的部分依赖 : 联合主键索引 ----- 主键的底层就是索引
在这里插入图片描述
表中属性字段对不全部依赖于两个主键 , 只依赖于两个主键之一的一部分

第三范式: 任何非主属性字段不依赖于其它非主属性字段–>不存在对主键间接依赖传递
前提 : 满足第二范式
消除间接依赖

违反第三范式
在这里插入图片描述
优化 : 按关系分成两个表
在这里插入图片描述

反三范式

  1. 一张表只做一件事—高内聚

  2. 适当的反三范式,以空间换时间

  3. 优势:
    减少跨表查询带来的性能开销
    减少微服务之间跨库联查,提高查询性能

  4. 劣势:
    存储空间变大
    一个表中字段做了修改,另外一个表中冗余字段也要同步进行修改,不然会导致数据不一致
    频繁的增删改会消耗系统资源
    数据量小不能体现优势 反而会让设计更复杂

  5. 对数据库的设计关注度上 需求>性能>表结构

  6. 适用场景: 当冗余信息能大幅度提高查询效率的时候,我们才会采用反范式的优化

增加冗余字段的建议

  1. 该冗余字段不需要经常修改
  2. 该冗余字段查询的时候不可或缺
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值