数据库结构优化介绍

介绍了很多对数据库性能会带来的因素,包括服务器的硬件,操作系统,MYSQL服务器配置等等,但是总的来说,

对数据库性能影响最大的呢,实际上就是数据库的结构了

良好的数据库逻辑设计和物理设计是数据库设计获得高性能的基础,会要求我们在设计数据库时,不能只考虑

数据库需要,还要考虑我们将来,要怎样来使用我们数据库来编写,查询语句才能得到我们的数据,所以我们也要使用我们的

查询语句呢,来设计我们的数据库结构,结构的设计呢,最好是使得数据库的查询语句呢,尽量的简单,为了达到这个目的,

通常我们需要考虑很多的因素,如果我们根据查询对表进行反范式化的设计,那么可能是可以加快一些语句的查询速度的,

范式又会对其他查询语句造成性能上的影响,所以我们在进行数据库设计时,一定要平衡各方面的利益,以达到最好的效果,

总的来说呢,我们进行数据库设计呢,希望可以达到以下几个目的的,首先我们进行数据库结构设计呢,期望达到的第一个

目的呢,减少数据的冗余,那么什么是数据冗余呢,数据冗余就是指,相同的数据,在多个地方呢存在,或者说,表中的某个列呢,

由其他列来计算得到,这样的数据呢就是冗余,这应该很好理解,但是有一点需要注意,我们这里说的是要尽量减少数据的冗余,

而不是要完全的没有冗余的数据,因为在一些情况下呢,必要的数据冗余呢,也是必须的,在我们的下面数据设计中呢,大家就会

看到,数据库设计的第二个目的呢,就是要避免在数据维护中,出现插入,更新,删除异常,对于数据维护的异常呢,理解起来就不

像数据冗余那么容易了,我们可能需要分别来为大家讲解一下,所谓插入异常呢,从定义上来看呢,是这样的,如果表中的某个实体,

随着另一个实体的存在而存在,也就是说,如果缺少了某个实体,就无法表示另一个实体,那么这样设计出来的表呢,插入异常,是不太

好理解,我们来看一个实际的表就清楚了

我们进入到dbs数据库

use dbs;

这里呢我们有这样的一张表

show create table selectcourse\G

现在这个selectcourse的表结构,这张表记录了每一个学生,和讲课的名称,和学分,其中学号和课程名称呢,

是这个表的主键,也就是说,一个学生只能选择相同的课程一次,我们下面来看一下这个表的数据,这样理解起来可能就会

更加的直观

select * from selectcourse;

现在这个表中一共存在了4行数据,首先大家可以看到这个表是存在数据冗余问题的,其中多次出现了学生的姓名,生日这些信息,

另外没门课程的学分呢,也是冗余的,那么什么是插入异常呢,如果我们要新增加一门课程,语文,并且学分是10分,但是还没有任何

学生来选择这门课程,那么我最后可以单独的把这个信息插入到这个表中,我们可以来看一下,我们insert into,selectcourse这张表,

其中我们只想插入课程信息,课程的名称和课程的学分,比如我们要插入语文课,他的学分是10分

insert into selectcourse(course_name,course_point) values('语文',10);

可以看到,这里就爆出了一个异常,学号这一列是没有默认值的,并且由于学号是我们主键的一部分,所以不能为空,

所以这里就产生了刚才所说的插入异常,在没有学生选择这门课的情况下,是无法把新插入的课程,插入到表中的,

搞清楚了数据的插入异常,继续往下看,那么什么是数据的更新异常呢,更新异常是这样子的,如果更改表中的某个

实体的单独属性时,需要对多行进行更新,那么这个表就存在更新异常,依然让人不太好理解,还是回到我们的演示系统中

来看一下

如果这个时候要更新数学的学分为15,那么我们要同时更新多少行数据呢,我们来看一下,现在我们数学这门课程的学分,

等于15分

update selectcourse set course_point = 15 where course_name = '数学';

这个时候我们同时更新了两行数据,如果我们选择这门课程的学生越多,表更新的数据也会越多,这就是更新异常的

表现,可以看到数据的更新异常,数据的冗余,是有很大的联系的,那最后我们再来看看什么是删除异常,其实删除异常和

插入异常,看上去差不多,如果我们删除了某一个表中的实体,则会导致其他实体的消失,这就是删除异常,以我们的演示

来说吧,如果我们删除了选择数学的选课记录,那是不是数学这么课程的相关信息也就不存在了呢,是这样的,这就是删除数据

的异常体现,那我们对数据库进行设计呢,就要尽量避免上面所说的异常,如果要想避免这些数据的异常,那么最好的方法呢,

按照范式化来对表进行设计,这个呢我们会说到,我们对数据库结构优化的第三个目的是什么

节约数据库的存储空间,那这个就比较好理解了,如果我们减少了数据冗余,就必然会节约很多的存储空间,

不要小看存储空间,对于大的数据库来说,可能是可以节约很多空间的,当然了,我们对数据库设计那就是提高

查询的效率,这一点在项目当中一定会有引用,这里就不多说了

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值