目录

数据库优化的目的

数据库结构设计的步骤

数据库设计范式

数据库第一范式

数据库第二范式

数据库第三范式

数据库设计的目的

实战

需求说明

需求分析及逻辑设计

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

反范式化设计总结

范式化设计和反范式化设计优缺点

数据库的物理设计介绍

物理设计涉及的内容

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

选择适合的存储引擎

物理设计-数据类型的选择

不同数据类型在Mysql服务器上的体现

如何选择VARCHAR和CHAR类型

应该如何确定VARCHAR的宽度

VARCHAR的实用场景

如何选择varchar和char类型

CHAR类型的适用场景

物理设计-如何存储日期类型

如何存储日期数据

timestamp在Mysql的时区不同的体现

datetime、timestamp是如何存储微秒值

查看timestamp自动更新特征

Timstamp数据结果操作结论

date类型和time类型

存储日期时间数据注意的事项

物理设计——本章节总结

存储引擎的最好选择

InnoDB存储引擎的选择注意事项

如何为Innodb选择主键

数据库设计的整个过程


  • 数据库优化的目的

  1. 1 减少数据的冗余。

问:那么什么是数据冗余呢?

答:指相同的数据在多个地方的存在,或者说表中的某个列的,可以由其他列来计算得到,这样的数据就是冗余的。这里所说的,那是要尽量减少数据的冗余,而不是说要完全的没有冗余的数据,因为在一些情况下,必要的数据冗余也是必须的。

  1. 2 尽量避免在数据维护中出现的更新,插入以及删除异常。

  1. 3 节约数据库的存储空间
  1. 4 提高查询的效率
  • 数据库结构设计的步骤

  • 数据库设计范式

  • 数据库第一范式

例子:

分析:

每一列不可拆分,所有列由基本的数据类型组成,是二维表(但是还是存在冗余【反范式】)

  • 数据库第二范式

例子:show creat table selectcourse;

分析:学号课程名称组成符合组件,有可能不满足第二范式要求的,学分只和课程名称名称关联也就是上面的第二个,总结是不符合。

拆分成符合:

分成:《学分表》《课程表》《学生选课关系表》

show create table study\G

show create table course\G

前两种表只有一个主键so满足第二范式要求;

show create tablestudycourse\G

第三张表不存在非主键的依赖关系也是符合第二范式。

修改结果

已满足第二范式看是否满足第三范式。

  • 数据库第三范式

例子:

分析:但是学院的地址和学院又有依赖关系,那就是说学院地址和学院具有传递依赖关系。

拆分改造:《学生信息表》《学院信息表》

结论:第三范式该造后不会有数据冗余和数据维护异常。

  • 数据库设计的目的


  • 实战

  • 需求说明

按下面的需求,设计一个电子商务网站的数据结构

  1. 网站只销售图书类商品
  2. 需要具有以下功能(用户登录,商品展示,供应商管理,用户管理,在线销售)
  • 需求分析及逻辑设计

用户登录及用户管理功能

  1. 用户必须注册并登录系统才能进行网上交易(用户名作为用户信息的业务主键)
  2. 同一时间,一个用户只能在一个地方登陆
  3. 用户信息:{用户名,密码,手机号,姓名,注册日期,在线状态,出生日期}

只有一个业务主键,一定是符合第二范式;

没有属性和业务主线存在传递依赖关系,符合第三范式

商品展示及商品管理功能

供应商管理功能

在线销售功能

问:这样的设计已经符合了范式化的要求,但是数据库处理来说,是否是高效的呢?

答:前面我们已经说过,在数据库设计时不仅要考虑到范式化,同时也要考虑到查询性能的要求!

问:编写SQL查询出每一个用户的订单总额?

答:

首先这个查询关联四张表,关于MySQL而言关联表越多性能越差,虽然说四张表并不算多,但是这样的查询可能会非常的频繁,所以如果能减少关联表的数量,能提高性能!

问:现在只在商品表中记录了价格,一旦商品发生价格变动,会产生什么样的问题呢?

答:这样会导致历史订单的价格也会发生变化,我们恰恰是不想要看到的。

假设下单用户就是商品的收货人,我们在发货前一定要查询出每个订单的下单人信息,而这些信息全部记录在用户信息表中。

问:编写SQL查询出下单用户和订单详情?

答:

结论:完全符合范式化的设计,有时并不能得到良好的SQL查询性能(即反范式化设计)。

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

问:什么叫做反范式化设计?

答:反范式化是针对范式化而言的,在前面介绍了数据库设计的方式,所谓的反范式化就是为了性能和读取效率的考虑,而适而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余,换句话来说,办事话就是利用空间来换取时间。

图书在线销售网站数据库的反范式化改造

反范式化改造后的查询

问:编写SQL查询出每一个用户的订单总额?

答:

问:编写SQL查询出下单用户和订单详情?

答:

  • 反范式化设计总结

  1. 不能完全按照范式化的要求进行设计
  2. 考虑如何使用表

  • 范式化设计和反范式化设计优缺点

  1. 1 范式化设计的优点

  1. 2 范式化设计的缺点

  1. 1 反范式化优点

  1. 2 反范式化缺点

  • 数据库的物理设计介绍

问:什么是数据库的物理设计?

答:根据所选择的关系型数据库的特点,对逻辑模型进行存储结构设计。

  • 物理设计涉及的内容

  1. 定义数据库、表及字段命名规范
  2. 选择合适的存储引擎
  3. 为表中的字段选择合适的数据类型
  4. 建立数据库结构
  • 定义数据库表、及字段命名规范

  1. 定义数据库、表及字段命名要遵守 可读性原则
  2. 定义数据库、表及字段命名要遵守 表意性原则
  3. 定义数据库、表及字段命名要遵守 长名原则
  • 选择适合的存储引擎

  • 物理设计-数据类型的选择

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

当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符型,对于相同级别的数据类型,应该优先选择占有空间小的数据类型。

问:如何选择正确的整数类型?

答:

问:如何选择正确的实数类型?

答:

  • 不同数据类型在Mysql服务器上的体现

1、表结构:

2、查询表内容:select * from t_double

3、对上述数据进行汇总操作 select i,sum(d1) as a,sum(d2) as b from t_double group by i having a<>b;

结论:21.40000000..6意味着double是非精确的值,两个double汇总和直接结果是有差异的,DECIMAL是精确地实数类型,但是所占用存储空间比上述2个大——财务数据,其他可以用double和float。

如何选择VARCHAR和CHAR类型

VARCHAR的存储特点

  1. VARCHAR用于存储变长字符串,只占用必要的存储空间(无论长短varchar只占有必要的存储空间,如varchar(50)近存储10个字符,只占用10个字符的宽度,字符==多个字节-->【UTF-8 1个字符==3个字节】,VARCHAR是以字符为单位不是以字节为单位,如:以UTF-8为例,varchar中存储10个字符,只要定义为10即可,而不是30)
  2. 列的最大长度小于255,则只占用一个额外字节,用于记录字符串长度
  3. 列的最大长度大于255,则要占用两个额外字节,用于记录字符串的长度
  • 应该如何确定VARCHAR的宽度

  • VARCHAR的实用场景

  • 如何选择varchar和char类型

  • CHAR类型的适用场景


​​​​​​​​​​​​​​

  • 物理设计-如何存储日期类型

  • 如何存储日期数据

  • timestamp在Mysql的时区不同的体现

​​​​​​​1、设置时区

set time_zone='+10:00';

2、创建表

create table t(d1 datetime,d2 timestamp);

3、插入时间值

insert into t values(new(),now());

4、插入结果

5、修改当前时区后查询变化是什么呢?

结论:timestamp数据显示和时区有关。

  • datetime、timestamp是如何存储微秒值

  1. 进行宽度设置(alter table t modify d1 datetime(6),modify d2 timestamp(6);)
  2. 插入数据(insert into t values(now(),now());)
  3. 查询结果有图所示                       
  • 查看timestamp自动更新特征

  1. drop table t;
  2. create table t(id int,d1 datetime,d2 timestamp not null,d3 timestamp not null);
  3. insert into values(1,now(),now(),now());
  4. 如果只插入id(insert into t(id) value(1);)
  5. 插入结果,仅仅datetime类型数据为空
  • Timstamp数据结果操作结论

timestamp具有自动更新的功能,但是第二个却不能就能发现,在MySql中只有第一个Timestamp类型具有自动跟新的。

  • date类型和time类型

在mysql 5.7之前的操作如上,mysql5.7 以后的版本直接使用date类型

  • 存储日期时间数据注意的事项


  • 物理设计——本章节总结

  • 存储引擎的最好选择

  • InnoDB存储引擎的选择注意事项

  • 如何为Innodb选择主键

  • 数据库设计的整个过程

​​​​​​​

MySQL 学习篇(四)数据库结构设计目的、基本字段类型介绍和实战内容相关推荐

  1. MySQL学习记录 (四) ----- SQL数据管理语句(DML)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  2. Mysql学习篇之---Windows环境下安装 (修改密码)

    Mysql学习篇之---Windows环境下安装 (修改密码) 前言: 自己瞎鼓捣本机上的Mysql,结果导致mysql密码用那个都登录不进去了. 解决方案: 首先把mysql重新删除掉,重新解压了一 ...

  3. 帆软FineReport学习篇(四)——父子格设置

    帆软FineReport学习篇(四)--父子格设置 1.概念 子单元格设置父单元格后,子单元格随父单元格进行扩展 简易的说,子单元格根据父单元格分组显示 2 对比示意图 2.1 左父格对比示意图 2. ...

  4. Oracle数据库中字符串相关字段类型辨析

    本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处! 1 引子 字符串类型的字段在各关系数据库中均占有重要地位. ...

  5. MySql基础篇---001 数据库概述与MySQL安装篇:概述,表和类对应关系,表关系、数据库卸载,下载,安装,配置,启动,登录,演示,图形化工具,目录结构,常见问题

    第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储 ...

  6. Mysql学习(二)创建数据库和表

    MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的 ...

  7. 数据库学习篇之数据库大字段的理解

    前言 Oracle数据库大字段问题 问题描述:字段内容长度超4000 项目中存在用某些字段存预处理sql语句,最初,项目此类型字段用varchar2(4000),但随着项目跟进到二期,牵连的表越来越多 ...

  8. Redis学习篇之数据库实现和过期策略相关

    参考:Redis设计与实现 事先声明:本文为对该书的总结.并参考 https://segmentfault.com/a/1190000016951866 作者:java3y 数据库相关 Redis服务 ...

  9. MySQL流浪记(四)—— DDL和DML区别与介绍

    DDL与DML的区别 DDL:数据定义语言,对于数据库.表.图.索引等进行操作. 具体操作有:CREATE(创建).ALTER(修改).DROP/TRUNCATE(删除) DML:数据操纵语言,对表中 ...

最新文章

  1. JS判断GridView中复选框有没有被选中
  2. 设计模式--中介者(Mediator)模式
  3. springMVC——注解配置方式实现Helloworld
  4. 大闹天竺里的机器人_在《大闹天竺》中哪一位演员是你喜欢的
  5. 19-Harris角点检测
  6. shell 25个常用命令
  7. java中项目启动时加载_如何在项目启动时,加载或解析某配置文件
  8. 对一道if-else相关的程序题的简单分析
  9. dell inspiron 只有一个飞行模式 没有wifi_【显示器推荐③】2K常规显示器|显示器|电脑|hdr|dell|hdmi...
  10. 适配器模式在 Java 日志中的应用
  11. 《给予者》:害羞,内向,不善言辞,如何构建人脉?
  12. 【gigabyte】开机循环进入技嘉主板界面、BIOS功能识别不出硬盘
  13. 屁屁岚分析开源项目3——贴片机飞达控制板
  14. 电梯曳引机常用海德汉编码器ERN1387、ID749147-16 749147-59 ECN1313、768295-54介绍
  15. oracle百分比转数字_子分公司一把手谈企业数字化转型——新疆能源
  16. 板载天线设计相关资料
  17. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解
  18. Chap.15 总结《CL: An Introduction》 (Vyvyan Evans)
  19. IP地址段与子网掩码
  20. MIZ7035上的AXI接口的MIG测试

热门文章

  1. 删除 Windows 文件资源管理器左侧 OneDrive 图标
  2. librosa--学习笔记(1)
  3. 数据库系统概念 引言(一)
  4. informatica关于计划任务的表说明
  5. 计算机网络复习资料(前六章谢希仁版)
  6. SQL注入分类、防御
  7. 【前端之旅】Webpack模块打包工具
  8. 推荐系统综述--初识推荐系统(美研面试专用)
  9. SetItemText
  10. 远程桌面连接是什么?远程桌面连接使用教程