为什么要使用数据库系统?
数据 vs. 信息
· 我们可以使用最简单的.txt文件来存储数据,那为什么我们还需要数据库系统呢?
· 首先,先明确数据(Data)与信息(Info)的区别。
· 数据是未经处理的事实,说人话就是一堆杂乱无章的数字,还没经过人为处理,还没有意义。数据可以以结构化形式(如表格),非结构化形式(音视频),半结构化形式存在。
· 信息是数据按需加工后的结果,说人话就是把数据按人的想法加工了,比如从一堆IP里面筛选出广东的IP。
传统文件系统管理的缺点
· 我们来观察下面这两个.txt文件
· 假设我们在course.txt中增加了一列数据,用于存储每个课程的授课老师,那我写的查询代码就需要改变了。这就是第一个缺点,当文件格式发生变化的时候,对应的应用程序代码就需要重写。
· 在student.txt中,我们发现Alice选了两门课001和002,但其实Alice、F、CS这些数据是重复的。这是第二个确定,存在冗余数据。
· 如果student.txt非常大,那要寻找某一条数据就非常地慢了,这是第三个缺点,没有索引(Index)。
· 我们需要访问整个文件才能拿到其中的某一条数据,这样其实安全性非常差,如果数据暴露给用户就很危险。
· 文件系统无法做并发控制,多个程序访问同一个文件的时候会出现冲突。
· 而数据库系统,就可以完美地解决这些问题。
什么是数据库系统?
· 数据库系统(Database System,DBS)是由数据库、数据库管理系统、数据库应用程序、数据库用户构成的系统。
· 八股文定义永远都这么抽象,没关系,我们来一个个解释。
数据库(Database,DB)
· 定义:长期储存在计算机内、有组织的、可共享的大量数据的集合。
· 说人话,其实就是把很多数据按照人为规定的方式组织好,然后存在硬盘内,并且这些数据随时都能被取用。
· 数据库的起源是一张又一张的表(Table),数据库内存的其实就是一张又一张的表,这些表之间又有关联。
· 表的定义:按行、列的形式组织及展现的数据。我们熟悉的Excel其实就是表。
· 通常来说,一张表包含了表名、表头和内容,在数据库中,我们把一张表称为一种关系(Relation),而把表名和表头称为关系模式(Relational Schema),最后把表的内容称为值或记录。
· 关系型数据库(Relational Database):指的就是一堆有关联的表组成的数据库。
数据库应用程序(Database Application,DBAP)
· 定义:通过向数据库管理系统(DBMS)发出适当的请求(通常是SQL语句)来进行交互的一个与数据库交互的计算机程序。
· 说人话,它就是一个程序,这个程序可以和数据库管理系统通信,从而对数据库进行操作。
数据库用户(Database User)
· 一般数据库的用户分为三个角色,分别是数据库管理员,数据库设计者和终端用户。
· 数据库管理员(Database Administrator,DBA):授权数据库的访问、协调和监控数据库使用,获取软硬件资源,控制资源的使用,监控数据库性能。
· 数据库设计者(Database Designer):负责定义数据库的内容、结构、约束、存储过程和事物,说人话就是设计表的人。
· 终端用户(End User):查询数据库,生成报表,部分终端用户还可以修改数据库内容,说人话就是能看到数据库内容的普遍用户。
数据库管理系统(Database Management System,DBMS)
· 位于用户与操作系统之间的一层数据管理软件。
· 为不同用户、应用程序,提供对数据库的组织、存储、操纵、控制、维护等操作的系统软件。
数据库管理软件给用户提供了什么功能?
① 数据定义
· 即让用户指定创建出的表是怎么样的,包括表的表名(关系)、表头(数据模式),那DBMS是如何实现的呢?
· DBMS提供了一套数据定义语言(Data Definition Language,DDL),用户使用这套语言去描述自己的表即可,DBMS将会根据用户的DDL定义去创建表。
② 数据操纵
· 即允许用户对数据库中的表进行增加、删除、更新、查询、检索、统计等操作。
· 同样的,DBMS提供了一套数据操作语言(Data Manipulation Language,DML),用户使用这套语言去描述自己想要进行的操作即可,DBMS就会根据用户的DML去向数据库指向这些操作。
③ 数据控制
· 即允许管理员用户对数据库中的表进行权限控制,规定哪些用户可以访问哪些数据,哪些不可以。
· 同样的,DBMS提供了一套数据控制语言(Data Control Language,DCL),管理员使用这套语言去描述要实施的控制即可。
④ 系统维护
· 即允许管理员用户对整个数据库进行转储、恢复、重组、性能监测。
· DBMS提供了一系列的程序(实用程序或例行程序)给用户,通常只有管理员用户(DBA)可以使用。用户可以使用这些程序对数据库进行维护。
⑤ 数据组织存储与管理
· DBMS会把数据持久地存储在物理介质(如硬盘)上。
· 同时,还会管理数据文件的创建、分配、扩展和回收,以最大化存储空间的利用率。
· 同时,还会实现查询优化,以获得高的查询效率;提供多种存储方法,以获得高效存储。
总结DBMS
· 一张图总结DBMS的功能
· PS:DBMS是可以直接绕过操作系统,对底层的内存调度、磁盘存储进行直接管理的!(?
· 一句话总结DBMS:终端用户想对数据库进行的操作+管理员用户的维护、控制操作。
数据库系统的标准结构
数据抽象
· 我们之前提到要把现实世界的数据存入计算机中要进行一次数据抽象,那具体来说数据抽象是什么呢?
· 数据抽象(Data Abstraction)其实就是把现实世界映射到计算机世界的过程。
· 信息世界则是一个中间过程,其产物是概念模型。计算机世界中的抽象产物是数据模型,数据库管理系统的实现都围绕着所得到的数据模型来进行。
· 举个例子,在现实世界中我们有“学号、姓名、已选课程”,在信息世界中,就要抽象为“表名、表头、表关系”,到计算机世界中,就可以设计为一个数据库表。
数据库中的数据、数据模式与标准三级模式
· 首先,先明确数据库中的数据(Data)或视图(View)指的是同一个东西,就是表里面具体的一条一条记录。
· 数据模式(Data Schema)其实是对现实问题的一种抽象,并对这种抽象做出描述和限制。比如定义上图中学生信息表的表名和表头,并对每一个表头的数据进行限制如下
· 数据库对数据进行标准的三级模式管理,分别是外部层次(External/User Schema)、概念层次(Conceptual/Logical Schema)、内部层次(Internal/Physical Schema)。
· 外部模式指的是某一用户能够看到与处理的数据的结构描述;概念模式指的是从全局角度理解/管理的数据的结构描述,,含相应的关联约, 体现在数据之间的内在本质联系;内部模式值存储在介质上的数据的结构描述,含存储路径、存储方式 、索引方式等。 (好抽象啊QAQ)
· 如下图中的学生管理系统例子,终端用户(学生、教师、教务人员)操作的就是数据的外部层次,DBMS接收到请求后会在概念层次把请求转换为数据库可理解的语言,然后数据库会在内部层次的数据完成操作。
· 为了能把三个层次连接起来,数据库系统定义了二级映射(Mapping),E-C Mapping和C-I Mapping。
· 首先,在外模式上定义E-C Mapping,它可以把外模式映射为概念模式;然后,在概念模式上定义C-I Mapping,它可以把概念模式映射为内模式,便于计算机存储。
· 那么,定义了三级模式和二层映射有什么好处呢?
· 逻辑数据独立性:当概念模式被改变的时候,不需要改变外模式,即应用程序的代码无需改动。可以理解为Java中接口的实现方式改变了,但是调用的接口没变。
· 物理数据独立性:当内部模式被改变时,不需要改变概念模式,从而不需要改变外部模式。
· 总的来说,这两个“数据独立性”的目的,都是为了最外层应用程序不需要因为数据库的变动而修改代码!方便开发!
数据库系统的特点
· 整体数据的结构化是数据库的主要特征之一。
· 数据的共享性高,冗余度低,易扩充。
· 数据独立性高(逻辑独立性、物理独立性)。
· 数据统一由DBMS进行管理。