前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库MySQL-数据库表的范式化优化

数据库MySQL-数据库表的范式化优化

作者头像
cwl_java
发布2020-02-13 11:03:38
5600
发布2020-02-13 11:03:38
举报
文章被收录于专栏:cwl_Javacwl_Java

2、数据库表的范式化优化

1、表范式化

范式化是指数据库设计的规范,目前说道范式化一般是指第三设计范式。也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。

在这里插入图片描述
在这里插入图片描述

存在以下传递函数依赖关系: (商品名称)->(分类)->(分类描述) 也就是说存在非关键字段 “分类描述”对关键字段“商品名称”的传递函数依赖。

不符合第三范式要求的表存在以下问题: 1、数据冗余:(分类,分类描述)对于每一个商品都会进行记录。 2、数据的插入异常 3、数据的更新异常 4、数据的删除异常(删除所有数据,分类和分类描述都会删除,没有所有的记录)

如何转换成符合第三范式的表(拆分表): 将原来的不符合第三范式的表拆分为3个表 商品表、分类表、分类和商品的关系表

在这里插入图片描述
在这里插入图片描述

2、反范式化

反范式化是指为了查询效率的考虑把原本符合第三范式的表“适当”的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。

在这里插入图片描述
在这里插入图片描述

如何查询订单信息

代码语言:javascript
复制
select b.用户名,b.电话,b.地址,a.订单ID,sum(c.商品价格*c.商品数量)as 订单价格
from 订单表 as a
join 用户表 as b on a.用户ID=b.订单ID
join 订单商品表 as c on c.订单ID=b.订单ID
group by b.用户名,b.电话,b.地址,a.订单ID

对于这样的表结构,对于sum(),group by会产生临时表,增加IO量。我们怎么优化都效率不高,那我们怎么样才能让它效率高了,就需要一些字段进行冗余。

在这里插入图片描述
在这里插入图片描述

订单表中增加了冗余字段,那SQL该怎么写了?

代码语言:javascript
复制
select a.用户名,a.电话,a.地址,a.订单ID,a.订单价格 
from 订单表 as a

说明:表结构的设计直接涉及到SQL的查询效率及优化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、数据库表的范式化优化
    • 1、表范式化
      • 2、反范式化
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档