打造扛得住的mysql_《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化...

4-1 数据库结构优化介绍

良好的数据库逻辑设计和物理设计是数据库获得高性能的基础。

1、减少不必要的数据冗余。

2、尽量避免数据维护中出现更新,插入和删除异常。

插入异常:如果表中的某个实体随着另一个实体而存在。

更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新。

删除异常:如果删除表中的某一实体则会导致其他实体的消失。

3、节约数据存储空间

4、提高查询效率

show create table selectcourse\G

5ebf93b6d3953c714264b487d8003ace.png

select * from selectcourse;

7a9252e6faea3e95c13b26bdd4d6dbb8.png

126bd48bf2fa74eb4c173a2d6ae59bf4.png 

1797398cebb795ae899fa93a8543ac89.png

4-2 数据库结构设计

数据库结构设计的步骤

需求分析:全面了解产品设计的存储需求,数据处理需求,数据的安全性和完整性。

逻辑设计:设计数据的逻辑存储结构,数据实体之间的逻辑关系,解决数据冗余和数据维护异常。

物理设计:根据所使用的数据库特点进行表结构设计

SQL:Oralce、Mysql、postgresSQL

NoSQL:mongo、Redis、Hadoop

存储引擎和列的数据类型

维护优化:根据实际情况对索引、存储结构等进行优化。

数据库设计三范式

第一范式,

数据库表中的所有字段都只具有单一属性

单一属性的列是由基本的数据类型所构成的

设计出来的表都是简单的二维表

第二范式,

要求一个表中只具有一个业务主键

第三范式,

指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖。

4-3 需求分析及逻辑设计

892ff0a605bd1fb1029d6083fcba37d3.png

用户登录及用户管理功能

用户必须注册并登录系统才能进行网上交易

用户名来作为用户信息的业务主键

同一时间一个用户只能在一个地方登录

用户信息:{用户名,密码,手机号,姓名,注册日期,在线状态,出生日期}

商品展示及商品管理功能

商品信息:{商品名称,分类名称,出版社名称,图书价格,图书描述,作者}

1ab100beba69a196a332f530d325bd67.png

供应商管理功能

供应商信息:{出版社名称,地址,电话,联系人,银行账号}

在线销售功能

完全符合范式化的设计有时并不能得到良好的SQL查询性能。

适当的采取数据库反范式化,允许存在少量的数据冗余,使用空间来换取时间。

4-4 需求分析及逻辑设计-反范式化设计

dffeb7a711eb0fa3361a56d0195d62fe.png

4-5 范式化设计和反范式化设计优缺点

完全范式化设计的缺点:

对于查询需要对多个表进行关联。

更难进行索引优化。

反范式化设计的缺点:

对数据的修改需要更多的成本。

4-6 物理设计介绍

物理设计涉及的内容

定义数据库、表及字段的命名规范。

可读性原则

表意性原则

选择合适的存储引擎。

d0341db68980a7c1a3c69fa75b384846.png

为表中的字段选择合适的数据类型。

当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。

62ba9116e6dba272834b6bfa50346940.png

28900b2a770c43b780a477559b0011f1.png

VARCHAR的适用场景:字符串列的最大长度比平均长度大很多。字符串列很少被更新。

CHAR类型是定长的,最大宽度为255 适合存储长度近似的值。比如MD5加密和表示性别的数字值。

487f0027fd2cd8ad287ac503fae9cd2d.png

2cb8c75abef467e899dabcccf396132d.png

timestamp类型显示依赖于所指定的时区。在行的数据修改时可以自动修改timestamp列的值。

78bbaa13f6d55dabccc3b460f72b42e9.png

alter table t modify d1 datetime(6),modify d2 timestamp(6);

b7d1c272720f85d5861f0768bfcc659f.png

date类型的优点:只需要3个字节、可以利用上日期时间函数。

time类型的格式:格式为HH:MM:SS

8a4e04f4a228e42b08d2f52a1e45bf33.png

建立数据库结构。

4-9 物理设计-总结

197433b015bb279f0d7b5e9e31de4cc1.png

如何为Innodb选择主键

主键应该尽可能的小

主键应该是顺序增长的

Innodb的主键和业务主键可以不同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值