【理论研究】数据库基本知识与原理系列01-数据库的基本原理与
admin
2023-01-27 03:20:01
0

数据库作为使用频率最广的中间件,作为一个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、解决插入异常:

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


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


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


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...