文章目录
前言
刚学数据库系统概论这门课,如果文章中由错误,欢迎指出。
第一章
1.1.1四个基本概念
1. 数据
定义
描述事物的符号记录。
种类
文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等。
特点
数据与其语义是不可分割的。
(数据的)语义:数据的含义
为什么不可分割?
因为数据的表现形式还不能完全表达其内容。
举个例子:
这里的数据是
8
,表现形式是文本。但是作为提问的一方,单纯看数字是不知道明天几点要去做核酸检测的。
这个8可以有多种语义:
语义1:早上8点
语义2:晚上8点
等等。
只有该数据配合上语义(语义1或语义2),数据(8)才能描述事物(几点去核酸检测)。
2.数据库
定义
数据库是长期存储在计算机内,有组织的、可共享的大量数据的集合。
特点
-
数据按一定的模型组织、描述和存储。
-
冗余程度较小
冗余[rǒng yú]:多余的重复内容。
什么叫冗余程度较小?举个例子:
一个学校要收集某个年级的个人信息,包括:姓名、年龄、性别、民族、联系方式、家庭住址。并通过表格形式来记录。
如果你是制度这个表格的人,你觉得哪些信息是冗余的?
很显然,性别和民族会有很多重复的记录,因为性别只有男女;而大多数人都是汉族。
如果不减小冗余程度,记录的表格可能是这样:
在人数不多的情况下还好,但如果一个年级有上千人,将有大量的冗余信息。
我们可以将表格分为4个子表格:男生汉族、男生少数民族、女生汉族、女生少数民族。
这样就减少了大量的冗余信息。
你可能会说年龄也是有冗余的,但注意,我们是希望冗余程度较小,而不是没有,如果按照年龄分出多个表格,虽然一个年级的人年龄差距不大,但是由于冗余的信息点较多,表格也会很多,这增加了不必要的开销。
-
数据独立性较高
什么是数据独立性?
数据独立性分为2种:物理独立性、逻辑独立性。
什么叫独立性较高?说来话长:
一个可用的系统必须能够高效的检索数据。这种需求促使设计者使用复杂的数据结构来表示数据,但大部分使用系统的用户并没有受过计算机专业训练,为了提高用户体验
(比如查单词,假如你想查的是abandon,往往只需要输入几个字母就会出现该单词的提示:
用户只关系这个软件查单词是否好用,它具体是怎样实现的用户并不关心,也不应该是提高使用门槛的一部分。)
,开发人员通过3个层次来简化用户与系统的交互。
-
物理层:最低层次,描述数据是怎样存储的。详细描述底层复杂的数据结构
-
逻辑层:描述数据库中存储什么样的数据,以及这些数据存在什么样的关系。虽然逻辑层的一些简单的东西可能涉及复杂的物理层结构,但逻辑层的用户(数据库程序设计人员,实现数据库的某种功能)并不需要了解。这就是数据的物理独立性。
比如用户定义了数据库中的某个
字段
(可以理解为表中的某一列,比如姓名、性别等等)是Int(整数)类型,并不需要知道Int是如何定义的。 -
视图层:只描述数据库的某个部分,或者可以说是某个应用程序,某个界面(就像查单词的软件)。让用户直接点点鼠标,打打键盘就可以完成查询、修改等等功能。这就是数据的逻辑独立性。
再来举一个例子,将这些知识点串起来吧:
设计一个学生管理系统(简化版),我们定义如下记录:
S t u d e n t = { I d : i n t n a m e : c h a r ( 20 ) m a j o r : c h a r ( 20 ) g r a d e : i n t Student = \left\{ \begin{array}{lr} Id & : & int\\ name & : & char(20) \\ major & : & char(20) \\ grade & : & int \end{array} \right. Student=⎩⎪⎪⎨⎪⎪⎧Idnamemajorgrade::::intchar(20)char(20)intchar(20)表示数据内容最长为20个字符。
在物理层,一个Student记录可能被描述为连续存储位置组成的存储块(比如内存)。
编译器为程序设计人员屏蔽了这一层(物理层)的细节。
在逻辑层,每个Student的记录通过类型定义来描述,比如学号(Id)是整型。如果有多种记录类型(Teacher、Worker),同时还要定义这些记录类型的关系,比如Teacher可以登记Student的成绩等等。
在视图层,一系列应用程序,让用户操作更舒服。
像这样:
-
-
可为各种用户共享(学生管理系统就是给在校的所有学生使用的嘛)
-
易扩展
比如要给某张表添加字段,或者给数据库添加表,操作最好不要太复杂。
3.数据库管理系统 DataBaseManagerSystem
简称DBMS。
定义
由数据库
和访问数据库中数据的程序
组成。
数据库管理系统主要是为了提供一种方便、高效的途径存取数据。
功能
先贴个ppt(虽然很无聊,但说不定有人需要呢),再通过例子讲。
ppt真的很枯燥 : (
让我们从实际例子出发 : )
某个大学决定开设一个新的专业,就叫数据科学
吧,那么这个大学就要建立一个新的系,并创建一个永久性文件
(如果这个系已经存在,那就在这个系的文件中添加信息也行)来记录关于这个系的老师、这个专业的学生、开设的课程等等。然后编写程序来处理这个专业的规则。
上面所描述的是文件处理系统
,说不定就是你写的某个作业。在数据库管理系统
出现以前,大家都是通过这样的系统来存取信息的。
但是文件处理系统比起DBMS仍有缺点(不然就不用DBMS啦)
-
数据的冗余和不一致。
冗余相信大家都理解了,那么不一致是什么意思呢?
举个例子:
一个学生他读了两个专业,比如数学和生物,这个学生的地址和电话号码等信息就有可能同时存在于数学系和生物系记录的文件中,这种冗余浪费空间不说,如果该学生换了电话号码,而只报告了数学系,那么明明是同一个人的电话号码,生物系的记录却和数学系的不一样。
-
数据访问困难
就是不能以高效的方式获取想要的数据。
举个例子:
现在是疫情期间,在学生返校的几天后,某地突然发生了一些阳性患者,那么政府就需要收集该地的学生名单。
文件系统只能提供所有学生的名单,那怎么办呢?有两种办法:
方法1:人工收集,从所有学生的名单中找出该地的学生。
方法2:编写一个程序,来将该地的学生过滤出来。
对于方法1,如果大量学生一个一个去找,那也是极为痛苦。方法2看似很好,但如果政府还需要这些学生中没打过疫苗的怎么办?重写一遍!
没有什么需求是重写一遍程序完成不了的,如果有,那就重写两遍。 -------沃·兹基硕德
写程序的人说:写程序要啸着写。
这都是由于数据检索系统不够好,导致无法处理通用的、能够应对变化的需求。
-
数据孤立
数据放在不同的文件中,文件的格式也可能有所不同,因此编写新的应用程序来检索数据是很麻烦的。
-
原子性问题
计算机系统偶尔会发生故障,一旦故障发生,数据就应该要恢复到故障发生前的状态。
举个例子:
张三要转500块钱给李四,显然这样的程序要做两件事:1.张三余额-500,2.李四余额+500
因此为了保证数据的一致性(这里体现在转账前后两个人的总余额保持不变),要求扣钱和加钱必须同时发生或者同时失败。
文件处理系统中难以做到。
-
并发访问异常
为了提高系统的竞争力,系统允许多个用户同时更新数据,但这些更新操作可能会影响数据的一致性。
举个例子:
某个家庭在电商平台共用一个账户,账户余额为10000元。
假如小明买了一部手机2000元,小明妈妈买了一台冰箱3000元,这两个操作同时发生。
可是两个付款程序读到的余额都是10000元,并分别修改为8000元和7000元。
那么到底是8000还是7000取决于哪个程序后完成。
但是实际的余额应该是5000元,所以系统肯定要以某种形式管理,但文件处理系统中没有协调多个程序访问数据,管理就很难进行。
-
安全性问题
并非所有的用户都可以访问所有的数据。
举个例子:
学生只能查询与自己相关的信息,不能查询老师的工资等等。
文件处理系统的查询是即席的,即席查询是由用户自定义查询条件的。看看工资也可以忍忍,要是看期末卷子还得了。
4.数据库系统
定义
数据库系统是指在计算机系统中引入数据库后的系统。
构成
数据库系统由数据库
、数据库管理系统
、应用系统
、数据库管理员
组成。
这里的应用系统是指管理检索数据的应用程序
的系统。
其中,DBA是数据库管理员(DataBase Administrator)的缩写。