数据库系统概论
第一章
数据库系统
组成
①数据库
②数据库管理系统
③开发工具
④应用程序
⑤管理员
⑥用户
数据库系统的主要功能
①数据库的定义
②数据库的运行管理
③数据的存取
④数据库的创建和维护
使用的好处
①提高开发效率
②减少程序的维护和修改
③方便用户使用
④减轻维护负担
⑤数据集中管理
⑥控制数据冗余
抽象
抽象的目的
屏蔽复杂性、方便有不同需求的用户使用。
三层抽象
物理、逻辑、视图层
①物理层:数据在物理元件上怎么存储的。
②逻辑层:数据如何存储、数据之间有什么关系
③视图层:数据库的一部分,只能看到部分的数据,为了使用户与系统更容易交互、保护部分重要数据的安全 —>比如银行大部分人只能看到姓名等基本信息,但是不会看到身份证号等敏感信息
数据模型
概念
是现实世界数据的抽象,是一系列严格定义的概念的集合
组成要素
数据结构、数据的操作、完整性约束
作用
按计算机系统的观点对数据进行建模,主要用于DBMS的实现
数据库系统的三级模式结构、二级映像功能和数据独立性
实例:数据库在某一时刻的状态
三级模式
- 物理模式、内模式只能有一个。可以帮助达到更好的时间和空间效率。
记录的内容有:
①数据的存储方式(按照堆来存放,还是按照有序存储。堆存放比有序存放要快);
②索引的组织方式(要用B+树还是HASH索引等,但是如何使用B+树等是DBA的任务)
③数据是否加密
④数据是否压缩存储
⑤树存储记录结构的规定(数据是定长还是变长的) - 逻辑模式、模式
只有一个,描述的是数据库中全部数据的逻辑结构和特征,保证安全性、完整性等等,以一个模型为基础,是综合考虑用户的所有需求而定成一个逻辑模式 - 视图模式、外模式、子模式:介于模式和应用之间,可以简化应用程序、保证数据的安全性、保证数据的独立性。一个外模式可以对多个应用程序使用,而一个程序只能使用一个外模式。
两级映射
- 外模式与模式的映射:即视图模式和逻辑模式之间的映射,一个模式(逻辑模式)可以对应多个外模式(子模式、视图模式),可==保证数据的逻辑独立性== ,可以使得不同层的设计相互独立,当逻辑模式(模式)改变时,视图模式(外模式)不用改变。
- 模式和内模式的映射:逻辑模式和物理模式之间的映射,==保证数据的物理独立性,==可以使得逻辑模式和物理模式独立,当物理模式(内模式)改变时,只需要改变物理层到逻辑层的映射方式,而不需要更改逻辑模式(模式)。
- 如何记住是什么独立性(不一定正确):
只有发生变化了但是不对其他的产生影响的才称作是有独立性,那么变化的是什么就称为什么独立性;记住为什么不对另一个产生影响,是因为使用的接口不发生改变,那么使用接口的永远是外层的,所以变化的永远是靠内层的那个。
DBMS和文件系统的不同点与联系
-
DBMS:
①协调物理和逻辑层的读和写;(暂时还无法理解)
②能让某些数据能够共用、减少冗余性;
③可灵活、随时读取;(暂时还无法理解)
④可多用户同时访问操作同一个文件,感觉像是一个用户在用。
⑤面向现实世界
⑥整体结构化 (这也是数据库管理系统与文件系统的根本、主要区别) -
文件系统:
①只协调物理层的读;
②冗余性高;
③只能是编译好了的程序读取数据;
④只能多用户同时访问或操作不同的文件;
⑤面向应用程序 -
DBMS和文件系统的联系
DBMS 是在操作系统的基础上实现的,在文件系统上进行数据的组织和存储;
文件系统是操作系统的组成部分,DBMS 是独立于操作系统的系统软件。
数据库管理系统DBMS的五个职能(responsibilities)
①**与文件系统的交互**:如果没有实现,则没有存储在文件系统中的数据可能就不能被检索
②**完整性**:如果没有,可能余额会小于0、性别可能除了男女还有其他
③**安全性**:如果没有,则未授权的用户可能访问某些敏感数据、只授权了视图A却访问了视图B。
④**备份和恢复**:如果没有,则可能导致数据永久丢失。(比如转账过程中由于故障使得中断,则一方的余额减少而一方的余额没有增加,此时需要恢复)
⑤**并发控制**:如果没有,则可能导致实际结果不符合现实情况。(比如二者同时取钱,则余额应减去两人取的数额,不能只计算一个人的)
事实举例
玫瑰先生买房拿着他父亲的银行卡去ATM取款,刷卡后看到这张卡的余额和交易记录等信息(③,因为玫瑰先生看不到他朋友菊花先生的交易记录和余额;②,因为当玫瑰先生不可能看到自己的余额是负数;),玫瑰先生尝试取款,但是网络突然断了、未弹出现金、取款失败(①,登录、尝试取款操作都会留下记录,都要保存下来,所以要能和文件系统交互;④,网络中断、取款没有完成,但是应该在网络恢复后把相应的可能已被更改的数据给恢复回去,因为玫瑰先生发起取款请求后,有可能是本地数据已改变、但是还未来得及弹出现金,网络就故障了,此时余额数据已经变化但是没有取到钱,网络正常后需要恢复数据),此时玫瑰先生的父亲也想取一些钱随身携带,两个人恰巧同时点击了取款按钮并取到了各自想要的钱(⑤,两个人分别取钱,余额应该是本金减去两个人取钱金额之和,不应该是只处理某一方的操作请求,所以需要并发控制)
用m*n的数组解释三层抽象的不同、解释实例与模型的区别
- 解释三层抽象的不同
- 物理层:就是硬件层面的总数为m*n的一个个存储单元,可能是连续排列可能是非连续的。每个单元格的大小需要根据定义的数据类型而改变。
- 逻辑层:就是人可理解的总数为m*n的、m行n列的格子矩阵,是矩阵,是矩阵,就是人类能想到的模样,每个格子可能会存放一个整数或者浮点数或者字符串等等。
- 视图层:就是用户看到的内容,这个 内容可能不全,可能只是某些行或者某些列或者某些格子,根据实际需求给用户展示需要的内容。(一定要想到内容可能不全,不能光想着视图层就是用户看到的)
- 实例和模式之间的区别
- 模式(schema):简单理解为,与类名对应,模型本身没有数据,只表示数据是什么形式、该怎么怎么存。可以以声明的方式创建数据表变量
- 实例(instance): 简单理解为,与一个个由类名声明出来的对象变量对应,有具体的数据。可以用”实例名.属性名“的形式使用实例中的属性
结构化查询语言
数据定义语言(DDL,Database Definition Language)
是为了 创建数据库。可定义表的约束条件。
DDL主要是操纵数据库的一列,对数据库的结构进行操作。
DDL包括drop、alter等
数据操作语言(DML,Database Manipulation Language)
是为了 操作数据库 ——可以实现增删改查的功能,又称查询语言。主要是信息检索,但是也能操作和更新数据。
DML主要是操作数据库的一行,对数据库的元组进行操作。
DML包括delete、update、insert等
元数据
- 定义:
包括数据库的模式、完整性约束、权限数据等,是描述数据库所存储数据的数据,是描述数据仓库内数据的结构和建立方法的数据,可帮助数据仓库管理员和数据仓库的开发人员非常方便地找到他们所关心的数据。 - 元数据分类(按用途的不同)
①技术元数据(Technical Metadata)
②业务元数据(Business Metadata)。
程序语言分类
过程性语言、非过程性语言(也叫声明性语言)
过程性语言
用户需要写明要什么类型的数据、怎么去获得这些数据。就是要定义变量、要写循环得到所有数据。
非过程语言
用户不需要写怎么获取某些数据,直接写条件等等就能拿到(SQL是最广泛的非过程语言。)
查询语句格式:select 要检索的属性的名字 from 要用到哪些数据表的表名 where 满足什么条件的被检索
查询语言也有过程性和非过程化语言的分类,他们的区别也是相同的
应用程序如何访问数据库
①向高级语言代码嵌入SQL语句,预编译阶段会处理SQL代码;
②用语言的开放接口在代码中调用,以访问数据库。
用户 必须 通过数据库管理系统 访问数据库 !!!!
用户 不必 通过数据库管理系统 访问应用程序!!!!
数据库系统由:数据库、数据库管理系统、数据库管理员、开发工具、应用程序组成
关系型数据库
基于关系型数据模型、用一系列的表来表示数据和数据之间的关系、DML和DDL、SQL查询语言
mysql只能查询关系型数据库!!
关系表中属性顺序、元组顺序的不同是无所谓的,因此虽然表现出来的顺序可能不同,但是其属于同一个关系
元组指的就是一个表中的一整行数据
数据库的设计
- 主要是模式的设计。
分为需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
数据库设计过程
做需求 --> 概念结构设计(要画ER图)–> 逻辑结构设计(做表的设计)–> 物理结构设计(就是表在物理磁盘上如何存储)–> 数据库的实施和运行维护
数据库与程序结合三步
①数据库设计
②SQL语言
③高级语言编程
数据库设计和SQL语句做得好的话,在第三步的编程阶段会更容易
逻辑层设计
需要考虑 数据库的模式、要找到一个 好的关系模式的集合。
找到一个好的关系集合与两个方面有关:业务层面、计算机科学层面
①业务层面:我要存储哪些数据属性
②计算机科学层面:我们有什么样的关系模式、属性在不同的关系模型中怎么分布
物理设计
就是物理层怎么设计
数据库的用户
- 应用程序员(通过DML调用来和系统交互)
- 熟练用户(通过查询语言来获取数据)
- 专业用户(负责编写数据库应用等等,不适用于传统数据处理框架)
- 无经验用户(使用已写好的程序系统与数据库进行交互,比如银行取款机访问的就是数据库)
数据库管理员(DBA)
对数据库有最高管理权限,需要了解企业业务的各个方面;能够操作数据库的逻辑层
DBA的五个职责(responsibilities)
①模式定义(指的是数据库表从无到有。总得有个数据表吧?)
②存取结构和存取方法的定义(指的是如何存取数据。创建了数据表总得存数据吧?存了数据要用就需要读取出来吧?)
③定义完整性约束(指的是保证数据的合理性。要存数据那肯定就不是无论什么数据都要存的吧?)
④授权(指的是控制用户对数据库的访问。数据肯定是很多个用户的数据,那难道每个人都能看所有人的数据吗?)
⑤与用户进行联络和监控性能,并及时根据需求进行优化改进(比如卡顿或者业务量增加了,就要优化,做了这个数据库这个项目总得有售后吧?要去联系用户、问问用户使用体验吧?获取到反馈知道了问题后总得修改优化吧?)
DBMS的功能组件
存储管理器(存储)、查询处理器(读取)
存储管理器
- 是什么:
是系统的一个部件,可管理磁盘的存储;也可通过文件管理器和缓冲区管理器在数据库中存储数据、检索数据、更新数据以及与文件系统交互。 - 分类:
①权限和完整性管理器:检查完整性约束、检查用户对数据的访问权限
②事务管理器:每个语句都是一个事务。发生故障了可以保证一致性;同时也保证并发执行时不出错
并发控制调度器:管理原子性和独立性和一致性;
日志:管理持久性,每个数据库操作都记录在日志上,日志放在磁盘上;
③文件管理器:分配磁盘存储空间、管理用于存储磁盘中数据存储的数据结构
④缓冲区管理器:管理内存(缓冲区)的存储,从磁盘读取到内存中,并决定哪些数据可以从磁盘中读取到内存中。 - 物理层面所实现的数据结构有:
①数据文件(数据库本身)
②数据字典(称为系统目录,用于存储数据库结构等信息的元数据)
③索引(对数据项的快速获取,包含索引列和指向原始表的数据指针):分为顺序索引和散列索引。
顺序索引:常用的是 “B+Tree” 结构,按照值进行排列。
散列索引:通过散列函数将值平均分布到多个散列图中,
查询处理器
- 目的:
为了让数据在磁盘和内存之间高效移动。负责简化数据和方便数据访问,通过数据抽象和非过程性语言来实现。 也会将逻辑层写的SQL语句编译成物理层的一些高效序列。 - 组成:
包括以下三个组件:
①DDL解释器:解释DDL语句,把有效的查询语句的定义存储在数据字典里;会对数据的完整性约束和用户的权限进行检查。检查过后把sql查询语句转化为等价的关系代数格式。
②DML编译器(也称查询编译器)(把DML语句翻译成执行方案,执行方案可以被查询处理引擎执行;也是将查询语句转为查询计划)
③查询执行引擎(处理前一步生成的低级指令;也即执行查询计划) - 查询执行引擎执行步骤:
① 客户端发送一条查询给服务器;
② 服务器先会检查查询缓存(query cache),如果命中了缓存,则立即返回存储在缓存中的结果。没有命中则进行步骤c。
③ 服务器端进行SQL解析(parsing)、预处理(transition),再由优化器(optimization)生成对应的执行计划;
④ 根据优化器生成的执行计划,调用存储引擎的API来执行分布(distribution)查询;
⑤ 将结果返回给客户端。 - 最广泛使用的两个模型是:关系模型和ER模型