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

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

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

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

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

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

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

3、节约数据存储空间

4、提高查询效率

show create table selectcourse\G

select * from selectcourse;

 

4-2 数据库结构设计

数据库结构设计的步骤

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

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

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

SQL:Oralce、Mysql、postgresSQL

NoSQL:mongo、Redis、Hadoop

存储引擎和列的数据类型

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

数据库设计三范式

 第一范式,

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

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

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

 第二范式,

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

 第三范式,

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

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

用户登录及用户管理功能

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

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

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

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

商品展示及商品管理功能

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

供应商管理功能

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

在线销售功能

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

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

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

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

完全范式化设计的缺点:

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

  更难进行索引优化。

反范式化设计的缺点:

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

4-6 物理设计介绍

物理设计涉及的内容

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

    可读性原则

    表意性原则

  选择合适的存储引擎。

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

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

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

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

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

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

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

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

 建立数据库结构。

4-9 物理设计-总结

如何为Innodb选择主键

  主键应该尽可能的小    

  主键应该是顺序增长的 

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

《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化的更多相关文章

  1. Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)

    什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...

  2. 《打造扛得住的MySQL数据库架构》第7章 SQL查询优化

    SQL查询优化 7-1 获取有性能问题SQL的三种方法 如何设计最优的数据库表结构 如何建立最好的索引 如何拓展数据库的查询 查询优化,索引优化,库表结构优化 如何获取有性能问题的SQL 1.通过测试 ...

  3. 转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读

    军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...

  4. 高性能MySQL笔记:第1章 MySQL架构

    MySQL 最重要.最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理(Query Precessing)及其系统任务(Server Task)和数据的存储/提取相分离.   1.1 MyS ...

  5. 第四模块:网络编程进阶&数据库开发 第2章·MySQL数据库开发

    01-MySQL开篇 02-MySQL简单介绍 03-不同平台下安装MySQL 04-Windows平台MySQL密码设置与破解 05-Linux平台MySQL密码设置与破解 06-Mac平台MySQ ...

  6. MySQL基础之第5章 操作数据库

    假设已经登录 mysql-h localhost -uroot -proot 5.1.显示.创建.删除数据库 show databases;     显示所有的数据库 create database ...

  7. MySQL篇,第四章:数据库知识4

    MySQL 数据库 4 数据备份(在Linux终端操作) 1.命令格式 mysqldump -u用户名 -p 源库名 > 路径/XXX.sql 2.源库名的表示方式 --all-database ...

  8. MySQL篇,第三章:数据库知识3

    MySQL 数据库 3 索引 1.普通索引(MUL)   2.唯一索引(UNI)   3.主键索引(PRI) 1.使用规则 1.一个表中只能有一个主键(primary)字段 2.对应字段的值不允许重复 ...

  9. MySQL基础之第13章 MySQL函数

    13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...

随机推荐

  1. 【LeetCode】反转每对括号间的子串

    [问题]给出一个字符串 s(仅含有小写英文字母和括号). 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果. 注意,您的结果中 不应 包含任何括号. 示例 : 输入:s = ...

  2. CSS的position属性:relative和absolute

    relative:是相对于自己来定位的,例如:#demo{position:relative;top:-50px;},这时#demo会在相对于它原来的位置上移50px.如果它之前的元素也为relati ...

  3. Android Studio 移动虚拟机

    突然间发现C盘 空间占用量增加了很多,经过找寻原因之后发现是因为安装了虚拟机的原因:在Android Studio中安装运行虚拟机时,默认的安装路径一般都在C盘,对于我这种不喜欢C盘存储太满的人来说是 ...

  4. Java自学-集合框架 Comparator和Comparable

    Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collection ...

  5. 关于TCP连接的3次握手和4次挥手

    3次握手: 关键在于双方都需要确认自己的发信和收信功能正常,收信功能通过接收对方信息得到确认,发信功能需要发出信息—>对方回复信息得到确认. 举个日常例子,打电话时我们对话如下: 如上,需要第三 ...

  6. Python 比较 相等性 真值

    1 == 操作符测试 值 的相等性: is 测试对象的一致性.注意短字符串的is相等性测试,PVM会缓存短字符串,s1 is s2 将返回true. 2 false:"", [], ...

  7. Ubuntu 14.04 安装 Dash to Dock

    每次打开或选择一个已经打开的应用都要把鼠标指到左上角,相当费事. Ubuntu 14.04 GNOME自带 Tweaks (系统中名为:优化工具),可以使界面如Windows般(最小化.最大化.底部任 ...

  8. 编译Linux

    下载内核源文件 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/ 生成.config配置文件 make ...

  9. PHP常用的数学函数和字符串函数

    PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...

  10. 二、在SAP中创建一个程序

    一.我们来到SE38 二.添加一个程序的名字,需要以Y或者Z开头,点击创建就可以了 三.我们输入hello Sap,然后选择可执行程序,然后保存 四.创建对象目录时,可以选择把这个加入到包中,或者选择 ...