您的位置:首页 > 数据库 > MySQL

mysql--数据库优化的目的、数据库设计的步骤以及什么是三范式、三范式的优缺点

2019-05-18 12:33 531 查看

数据库结构优化的目的:

首先要减少数据冗余,冗余指的是相同的数据在多个地方存在,或者说表中的某一个列可以通过计算得到,减少数据冗余并不是说 就不允许出现数据冗余,因为有些时候数据冗余是必要的

其次,避免在数据维护中出现更新插入和删除异常,插入异常,如果表中的某个实体随着另一个实体的存在而存在,如果缺少了某个实体就无法表示另一个实体,这样设计出来的表就存在存在插入异常。
比如:

查看这张表的结构,这张表有两个主键,一个是study_no,一个是course_name,如果这个时候向表中插入数据,insert intp seleccourse(course_name,course_point) values(‘语文’,10 分),这时候出现报错问题,显示study_no不能为空,这就是如果缺少了某个实体就无法表示另一个实体的情况,这样设计的表就是插入异常

更新异常就是说,如果更改表中的某个实体的单独属性的时候,需要对多行进行更新
update 表名 set 字段名=值,比如,uodate selectcourse set course_point=15 where course_name=‘数学‘;这个时候会同时更新两行数据,如果选择的这里的数据越多,更新的数据就越多,更新异常和数据冗余有很大的联系
删除异常和更新异常和插入异常有点像,如果删除了表中的某个实体则会导致其他实体消失,比如delete from selectcourse where study_name=’张三’;这个时候,会将所有的张三删除,如果想避免插入更新删除异常就要按照范式化对表进行设计
节约数据的存储空间,(可以通过减少冗余)
提高查询的效率

数据库设计的步骤

1.需求分析,全面了解产品设计的存储需求,要存储什么数据,这些数据有什么特点,数据处理的响应时间,是否是批量处理,数据的完整性确定要存储的真正数据,因为要和非开发的人员进行沟通
2.逻辑设计阶段弄清楚数据之间的逻辑关系,逻辑设计阶段是解决数据冗余和数据维护异常(插入增加删除问题)的阶段,这个阶段直接影响了之后的数据处理和数据存储方式,要解决数据冗余和数据维护异常,按照数据库的设计范式可以最大限度的进行解决
3.物理设计阶段,根据所使用的数据库的特点进行表结构的设计,选择合适的存储引擎和表中的列使用什么样子的数据类型
4.优化和维护:根据实际的情况对索引,存储结构等进行优化

第一范式第二范式第三范式

数据库的设计范式就是在进行数据库设计的时候遵循的一些规范,只要按照这些规范进行设计就会设计出没有数据冗余和数据维护异常的数据库结构,数据库的设计规范有很多,基本上满足数据库的三范式就能设计出符合性能要求数据库,符合性能要求并不是就是最好的性能,因为在设计数据库的时候要考虑一些业务上的要求,有些时候要违反数据库的设计范式,数据库设计的第一范式:1.数据库表中的所有字段都只有的单一属性 ,每一列都是不可以拆分的,2.单一属性的列是由基本的数据类型构成的,整型,字符型 3.设计出来的表都是简单的二维表,数据库设计的第二范式,符合第二范式的表要满足第一范式,第二范式中要求一个表中只具有一个业务主键,也即是说符合第二范式的表中不能存在非主键列只对部分主键的依赖关系,非主键列只对部分主键存在依赖关系,这种情况下只能出现在主键是复合主键的情况下,主键是单一主键的情况不会出现这种问题,比如
selectcourse表中主键是复合主键是study_no,course_name,学分这一列之和课程名称有关,不符合第二范式,可以将这张表进行拆分


数据库设计的第三范式指的是每一个非主的属性既不部分依赖于也不可以传递依赖于业务主键,也就是在第二范式的基础上,消除了非主属性对主键的传递依赖
什么是传递依赖关系,
例如,现在这个学生信息表还是有数据冗余的,
在这个表中,有一个主键是学号,学号可以确定学生所在的学院,学院的电话和学院也有关系,学院电话和学号有传递依赖关系,因此要进行拆分,拆分成学生信息表,和学院信息表,以学号作为主键,包含学生名称和生日和学院名称。另一张表是学院信息表,表中只有学院名称和学院电话,学院名称是主键。经过这样的处理就满足了第三范式

范式化设计的优点和缺点

范式化设计的优点:可以减少数据冗余,数据表体积小更新快,范式化的更新操作比 反范式化更快,范式化的表通常比反范式化更小。
缺点:对于查询需要对多个表,会关联多个表,在应用中,进行表关联的成本是很高
更难得进行索引优化
反范式化设计的优缺点
可以减少表的关联,可以对查询更好的进行索引优化,缺点,表结构存在数据冗余和数据维护异常,对数据的修改需要更多资源。
因此在设计数据库结构的时候要将反范式化和范式化结合起来

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: