数据库表的范式化优化

1、表范式化

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

存在以下传递函数依赖关系:
(商品名称)->(分类)->(分类描述)
也就是说存在非关键字段 “分类描述”对关键字段“商品名称”的传递函数依赖。
不符合第三范式要求的表存在以下问题:
1、  数据冗余:(分类,分类描述)对于每一个商品都会进行记录。
2、  数据的插入异常
3、  数据的更新异常
4、  数据的删除异常(删除所有数据,分类和分类描述都会删除,没有所有的记录)
如何转换成符合第三范式的表(拆分表):
将原来的不符合第三范式的表拆分为3个表
商品表、分类表、分类和商品的关系表

2、反范式化

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

如何查询订单信息?

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该怎么写了?

select a.用户名,a.电话,a.地址,a.订单ID,a.订单价格
from 订单表 as a

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

数据库-优化-数据库结构的优化-表范式化优化相关推荐

  1. 数据库树状结构的关系表的删除方案

    所谓的树状结构的关系,即是记录之间有id,parentId关系的数据.场景是这样的:业务中用到了一张分享表,表里的主要字段有分享人,和被分享人,以及分享任务ID,可以通过一系列的分享构造成树状的结构, ...

  2. 数据库调优策略:优化MySQL服务器、优化数据库结构、大表优化、隐藏索引对调优的帮助

    文章目录 1. 数据库调优的措施 1.1 调优的目标 1.2 定位调优问题 1.3 调优的维度和步骤 2. 优化MySQL服务器 2.1 优化服务器硬件 2.2 优化MySQL的参数 3. 优化数据库 ...

  3. 数据库优化:结构优化

    ** 数据库结构优化的目的: ** 1.减少数据冗余,数据冗余是指相同的数据在多个地方存在,表中的某个列可以在其他某个列中获取到. 2.尽量避免数据维护中出现更新.插入和删除异常, 插入异常:如果表中 ...

  4. 3、MySQL优化数据库结构的3种方法

    一个好的数据库设计方案会对数据库的性能起到事半功倍的效果.合理的数据库结构不仅可以使数据库占用更小的磁盘空间,而且能够使查询速度更快. 数据库结构是否合理,需要考虑是否存在冗余.对表的查询和更新的速度 ...

  5. Mysql数据库——数据表的优化、外键与三范式

    数据表优化 将商品信息表进行优化 1.创建商品种类表: create table if not exists goods_cates( id int unsigned primary key auto ...

  6. 数据库大表如何优化?

    数据库大表如何优化? 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 1. 限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句.比如:我们当用户在查询订 ...

  7. 数据库优化:表的优化

    一个好的数据库设计方案对于数据库的性能往往会起到事半功倍的效果. 需要考虑数据冗余.查询和更新的速度.字段的数据类型是否合理等多方面的内容. 1. 将字段很多的表分解成多个表(垂直分割) 对于字段较多 ...

  8. 数据库建表原则,SQL数据库建表前期优化,SQL数据库操作优化,数据库命名规范...

    2019独角兽企业重金招聘Python工程师标准>>> 关键字: 数据库建表原则 ·1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  9. SQL数据库建表前期优化

    关 于数据库优化方面的文章很多,但是有的写的似是而非,有的不切实际,对一个数据库来说,只能做到更优,不可能最优,并且由于实际需求不同,优化方案还是有 所差异,根据实际需要关心的方面(速度.存储空间.可 ...

最新文章

  1. JQ-CSS-实现导航菜单效果
  2. 18岁初中毕业学Java_刚满十八 初中毕业 java自学完了 没学历 该怎么办?
  3. 快别发语音了! | 今日最佳
  4. concurrency_Java Concurrency Essentials教程
  5. 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器
  6. Bugtags 2016-06-16 更新内容
  7. JS中元素的属性(class、style)操作
  8. PyTorch1.2.0版本来啦!居然还有全套视频!让你快速熟练掌握深度学习框架!
  9. 译文-Minor GC vs Major GC vs Full GC
  10. Axure RP 9基础教程(3)——添加图标元件
  11. ArcGIS为什么计算面积被禁用
  12. 看看淘宝的工程师如何评论12306
  13. 设计心理学2-与复杂共处【读书笔记】
  14. 华三和华为交换机配置FTP文件传输
  15. 衡山湘大学计算机学校,南岳衡山烧香求学业显灵感恩南岳大庙祈福考上985双一流重点大学...
  16. 服务器接上显示器操作,服务器接上显示器
  17. Chrome无法安装axure插件
  18. 九龙证券|新三板再现最“壕”分红!北交所公司不遑多让
  19. php讯飞文本纠错接口对接
  20. SVN解决冲突的办法

热门文章

  1. POPTEST老李分享修改dns ip的vbs代码
  2. 密钥登陆Linux服务器
  3. HDU 4869 Turn the pokers(思维+组合公式+快速幂)
  4. vc使用opencv库 读取图像
  5. javascript,jquery 操作 dropdownlist ,select
  6. 智能导航短信告警的一个逻辑处理
  7. 从Java面试官的角度,如何快速判断程序员的能力
  8. iOS8 TabBarItem设置自定义图片问题
  9. jquery可编辑表格(版本二)
  10. 使用devenv/MSBuild在命令行编译单个project