1.数据库结构优化的目的
1.1)减少数据冗余
1.2.)尽量避免数据维护中出现更新,插入和删除异常
插入异常:如果表中的某个实体随着另一个实体而存在
更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新
删除异常:如果删除表中的行会导致其他实体的消失
1.3)节约数据存储空间
1.4)提高查询效率
2.数据库结构设计的步骤
1.需求分析:全面了解产品设计的存储需求
2.逻辑设计:设计数据的逻辑存储结构(数据实体之间的逻辑关系,解决数据冗余和数据维护异常)
3.物理设计:跟据所使用的数据库特点进行表结构设计
4.维护优化:跟据实际情况对索引、存储结构等进行优化
3.数据库设计范式
数据库设计的第一范式
1.数据库表中的所有字段都只具有单一属性
2.单一属性的列是由基本的数据类型所构成的
3.设计出来的表都是简单的二维表
数据库设计的第二范式
1.要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系
数据库设计的第三范式
指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖
4.什么叫做反范式化设计
反范式化是针对范式化而言的,在前面介绍了数据库设计的范式,所谓的反范式化就是为了性能和读取效率的考虑而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余,换句话来说反范式化就是使用空间来换取时间
5.为表中的字段选择合适的数据类型
当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占
用空间小的数据类型
1.如何选择 VARCHAR和 CHAR 类型
VARCHAR 类型的存储特点
1.varchar 用于存储变长字符串,只占用必要的存储空间
2.列的最大长度小于 255 则只占用一个额外字节用于记录字符串长度
3.列的最大长度大于 255 则要占用两个额外字节用于记录字符申长度
VARCHAR 的适用场景
1.字符串列的最大长度比平均长度大很多
2.字符串列很少被更新
3.使用了多字节字符集存储字符串
CHAR 类型的存储特点
1.CHAR 类型是定长的
2.字符串存储在 CHAR 类型的列中会删除末尾的空格
3.CHAR 类型的最大宽度为 255
2.如何存储日期数据
DATATIME 类型
以 YYYY-MM-DDHH:MM:SS[ fraction]格式存储日期时间
datetime= YYYY-MM-DD HH: MM: SS
datetime (6)= YYYY-MM-DD HH: MM: SS fraction
DATATIME 类型与时区无关,占用8 个字节的存储空间
TIMESTAMP 类型
timestamp 类型显示依赖于所指定的时区
date 类型的优点
1. 占用的字节数比使用字符串、 datetime、int 存储要少,使用 date 类型只需要3 个字节
2. 使用 Date 类型还可以利用日期时间函数进行日期之间的计算
存储日期时间数据的注意事项
不要使用字符串类型来存储日期时间数据日期时间类型通常比字符串占用的存储空间小日期时间类型在进行查找过滤时可以利用日期来进行对比日期时间类型还有着丰富的处理函数,可以方便的对时期类型进行日期计算
如何为 Innodb 选择主键
1.主键应该尽可能的小 2.主键应该是顺序增长的 3.Innodb 的主键和业务主键可以不同