【理论研究】数据库基本知识与原理系列01-数据库的基本原理与

发布时间:2020-05-27 14:50:02 作者:繁星亮
来源:网络 阅读:452

数据库作为使用频率最广的中间件,作为一个IT工程师,就算不打算从事数据库开发或者做DBA,也应该掌握其基础的知识、原理与基本的使用。

为此,本篇开始,尝试对数据库的基本知识与原理进行讲解。


数据库的类型

关系型数据库以前,市面上最常见,使用最广泛的数据库,叫做关系型数据库,例如大名鼎鼎的Oracle、SQL Server(微软的,也叫MSSQL)、Mysql、DB2(IBM的),都是关系型的数据库。由于它使用最广泛、最常见,每个入门的人员都必须要掌握,因此接下来的几篇《数据库基本知识与原理》都会围绕关系型数据库先展开叙说,后面有机会再介绍No SQL的数据库。

非关系型数据库:叫作No SQL数据库,其实只是个统称,有各种的列式数据库,KEY VALUE值的数据库。



什么是关系型数据库?

关系型数据库的本质就是一张张有关联关系的二维表。

二维表意思就是有行与列组成的表格,与EXCEL表里面的单个工作表(sheet)是一个意思。与EXCEL表里面每个独立的工作表唯一的不同,是关系型数据库中的表格,都是有关联关系的。

假设你的EXCEL表里面有3个工作表分别叫A、B、C,如果表A有A1、A2、A3列且有内容,B表里面有B1、B2、B3列且有内容、C也有C1、C2、C3列且有内容,而B2的每个单元格其实是从A2列对应行的单元格里面引用过来的,而C3的单元格也是从B3里面引用过来的,那么其实A、B、C三个表格就有关联关系了。那么这样的EXCEL表就更加接近关系型数据库里面的表了。

只不过,数据库里面的,没有规定B2的某个单元格一定要引用A2里面对应行的单元格,可以是任意一行的单元格的值。


为什么要用数据库?

为什么要用数据库而不用EXCEL表?这是一个重要的问题。如果都不知道一个东西有什么用,能解决什么问题,那么花时间学习一个新东西干嘛?

首先,在数据量很少的情况下,直接用EXCEL表格也是没有问题的。

但是当数据有2万行左右的时候,发觉一台K22的联想笔记本用EXCEL来打开,可能都要7~8秒才能打开了,这基本上已经到达了用户可以忍受的延迟时间的极限了,如果一个用户打开一个网页,7~8秒都打不开的话,估计他会选择叉掉这个网页,然后去其他网站去了。

因此,当数据量很大的时候,我们发觉EXCEL已经无法满足我们的性能需求了,因此需要使用数据库。


除了性能之外,使用普通的二维表,还有以下几个问题:

数据冗余:大量同样的数据重复存储,我们以下面一张很简单的学生选课记录表为例。

序号学号学生姓名性别联系电话课程名称授课老师
12019063001张三13900000001语文孙七
22019063001张三13900000001数学周八
32019063001张三13900000001英语吴九
42019063002李四13900000002语文孙七
52019063002李四13900000002数学周八
62019063003王五13900000003数学周八
72019063003王五13900000003英语吴九
82019063004赵六13900000004体育郑十

看到“张三”选了“语文、数学、英语”3门课程,但是“张三”每选修一门课程,他的“学号”、“性别”、“联系电话”等数据就会被重复存储1次,如果有100条关于他的记录,这些数据就会被重复100次。这样的数据冗余会带来如下问题:

1)浪费存储空间。

2)导致增加了检索有效数据的时长(因为数据总量增多了,搜索的时候遍历的数据增多了)。


删除异常:想删除1个数据,结果会导致不想删的数据也被删除了。(依然以上述例子为例)

序号学号学生姓名性别联系电话课程名称授课老师
82019063004赵六13900000004体育郑十

如果“赵六”退学了,我们想要删除赵六的数据,但是我们会发现只有“赵六”选修了体育课。

这时候一旦删除了“赵六”,“体育”的课程,“郑十”这位授课老师,都会无故从这个表格被删掉,这就叫删除异常。


修改异常:修改一个数据,却需要修改多次,并且如果修改不安全,会导致数据不一致。

序号学号学生姓名性别联系电话课程名称授课老师
12019063001张三13900000001语文孙七
22019063001张三13900000001数学周八
32019063001张三13900000001英语吴九

如果“张三”更换了手机,修改手机号,张三有多少条记录就需要修改多少次,写入操作的开销是大于读操作的,会带了额外增加的开销,并且如果修改不完全,会导致表格中“张三”的联系电话不一致。


插入异常:应该插入的数据无法插入。

序号学号学生姓名性别联系电话课程名称授课老师





生物张强


数据库是怎样处理上面数据的?

数据库会将上面的一张二维表,拆分为多张具有关联关系的二维表进行存储。注意关键词有2个,1是多张,2是有关联关系。如下:

1)先将1张二维表拆分为多张二维表

学生表
序号学号学生姓名性别联系电话
12019063001张三13900000001
22019063002李四13900000002
32019063003王五13900000003
42019063004赵六13900000004


课程表
序号课程ID课程名称
10001语文
20002数学
30003英语
40004体育



老师表
序号老师ID老师姓名
1T0001孙七
2T0002周八
3T0003吴九
4T0004郑十

2)为上面独立的表格,创建关联关系,使得他们之间关联起来

选课记录表
序号学号课程ID
1139000000010001
2139000000010002
3139000000010003
4139000000020001
5139000000020002
6139000000030002
7139000000030003
8139000000040004


授课记录表
序号学号课程ID
10001T0001
20002T0002
30003T0003
40004T0004


按照上述处理,有什么效果?

1张表,拆成了上面的5张表,好像把简单的问题复杂化了。弄这么复杂,到底有什么作用呢?解决了什么问题?

1、解决数据冗余:

再看一下学生表,同一个学生的信息只存储了一次,节省了空间、提升了查找性能,解决了数据冗余的问题。


2、解决删除异常:

再看一下学生表,如果此时“赵六”退学,需要删除“学生表”的“赵六”数据,此外,与“学生表”的“学号”字段有关联关系的“选课记录表”,会自动删除“赵六”学号(2019063004)的行,即第8行,就完成操作了。而“体育课”与体育课的授课老师“郑十”数据会完整保留在“课程表”与“老师表”中,不会被异常删除,解决了删除异常的问题。


3、解决修改异常:

现在“赵六”更换了手机,只需要在学生表中,更新“赵六”-“联系电话”的字段,其他表格根本没有保存这个信息,也就是说只需要进行一次的写操作就完成了,不会出现数据不一致或者多次写操作,解决了修改异常。


4、解决插入异常:

如果现在新增了“政治课”,没有授课老师与选修的学生,只需要在课程表里面增加一行记录“政治课”就可以了,其他表格需要写入。不会出现像之前没有授课老师或者没有选修学生,连新增的课程都无法插入的问题,解决了插入异常。


综上,我们需要使用数据库,来解决上面几个普通二维表无法解决的问题。


上面说的,大部分都是功能上需要使用数据库的原因,下一篇我们再来讨论一下从性能上,为啥要使用数据库。


推荐阅读:
  1. 普及交换机基本原理与配置
  2. Docker系列01-容器初探

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

理论研究 数据库

上一篇:Java创建线程池实现异步音频播放器

下一篇:Linux系统中vim文本编辑器的使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》