前言
本文是结合《数据库系统概念》的摘要与上课ppt的笔记。
网络资源:
www.itpub.net
开源数据库学习:
- PostgreSQL
- IBM DB2
半结构化的数据模型
- XML
第一章 引言
数据库管理系统(DBMS):由一个互相关联的数据的集合和一组用以访问这些数据的程序(DBAP)组成。
数据库(Database):相互有关联关系的数据的集合。
数据库管理员(DBA):管理数据库的人员。
SQL:数据库语言(数据库管理人员需要掌握这些语言来管理数据库)
1.1 数据库系统的应用
- 企业信息
- 银行和金融
- 大学
- 航空业
- 电信业
1.2 数据库系统的目标
数据库系统作为商业数据计算化管理的早期方法而产生。
1.2.1 文件处理系统:
是传统的操作系统所支持的,数据会永久记录被存储在不同的文件中,人们编写不同的应用程序将记录从有关文件中取出或加入到适当的文件中。
但其弊端有:
- 数据的冗余和不一致性:比如不同程序可能采用不同的程序设计语言与结构,信息之间存在重复和冲突;
- 数据访问困难:对于一些特殊临时的需求没有对应应用程序去完成
- 数据孤立:数据存储分散,不同文件具有不同的格式
- 完整性问题:数据库中所存储数据的值必须满足某些特定的一致性约束,但当约束涉及不同文件中的多个数据项时,问题便变得复杂
- 原子性问题:针对的是有些问题要么发生要么不发生,不允许中断。
- 并发访问异常
- 安全性问题:并非数据库系统的所有用户都可以访问所有数据。
1.2.2 数据库系统:
数据存储更为高效。关系模型数据库在结构化过程中可能丢失一定的语义信息。
1.3 数据视图
数据库系统是一些互相关联的数据以及一组使得用户可以访问和修改这些数据的程序的集合。其主要目的之一是为了给用户提供数据的抽象视图,而系统会隐藏关于数据存储和维护的某些细节。
1.3.1 数据抽象
一个可用的系统必须能高效的检索数据。
- 物理层:最低层次的抽象,描述数据实际上是怎么存储的,比如编译器中被描述为数据连续存储位置。
- 逻辑层(物理数据独立性):比物理层层次稍高的抽象,描述数据库中存储什么数据及这些数据间存在什么关系
- 视图层:最高层次的抽象,只描述整个数据库的某个部分。视图层抽象的定义正是为了使用户与系统的交互更为简单。系统可以为统一数据库提供多个视图
1.3.2 实例和模式
实例(instance):特定时刻存储在数据库中的信息的集合(在某一特定前提下具体变量得取值,例如下图中白色栏目中每一行)
模式(schema):数据库的总体设计(蓝色框中得变量名罗列)
数据库系统的不同模式:
- 物理模式:在物理层描述数据库的设计(物理模式隐藏在逻辑模式下,它可以轻易被更改而不影响应用程序,但决定了数据库的性能)
- 逻辑模式:在逻辑层描述数据库的设计(程序员使用逻辑模式构造数据库应用程序)
数据的物理独立性(即数据不依赖物理模式,不需要对应的映射结构,例如一个文件的图标不会因为存储位置的不同而显示不同)
1.3.3 数据模型
数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。
- 关系模型
- 实体-联系模型
- 基于对象的数据模型
- 半结构化数据模型
流程设计图:
- ER(Entity-Relationship data model)
- 基于对象的数据模型
①面向对象模型;
②对象关系模型;
二者区别在于:
对象关系模型允许用户自定义数据类型,能够防止相同域中数值类型一致但语义类型不同的数据之间进行比较(例如工资栏中以美元为单位的数据和以元为单位的数据,二者在面向对象模型中都属于数值类型,但明显语义不同,数值之间逻辑上不应该进行加减乘除;而如果使用对象关系模型,数据库允许用户自定义人民币结构体与美元结构体,自然而然就将域进行了划分)
1.4 数据库语言
数据库系统提供数据定义语言来定义数据库模式,以及数据操纵语言来表达数据库的查询和更新。
1.4.1 数据操纵语言(DML)
DML的访问类型:检索、增加、插入、删除、修改
两类基本的数据操纵语言:
- 过程化DML要求用户指定需要什么数据以及如何获得这些数据
- 声明DML(非过程化DML)只要求用户指定需要什么数据,而不需如何获得这些数据
SQL(非过程化的语言)是一种结构化的查询语言,是一种键盘语言
关系代数是一种抽象的查询语言,用对关系的运算来表达查询,是一种作为研究关系数据语言的数学工具。
元组关系演算
域关系演算
1.4.2 数据定义语言
数据库模式通过一系列定义来说明,这些定义由一种称作数据定义语言(DDL)的特殊语言来表达。
数据库系统所使用的存储结构和访问方式是通过一系列特殊的DDL语句来说明的,而DDL以一些指令(语句)作为输入,生成一些输出,DDL的输出放在若干表与视图中,这些表与视图称作数据字典(data dictionary)。而数据字典中包含了元数据,元数据是关于数据的数据(用于管理用户建立的表)。
关系即为:数据字典是一种只能由数据库本身访问和修改的表,而在读取和修改实际的数据前,数据库要先参考数据字典。
约束——是关于数据库的任意谓词:
- 域约束:每个属性都必须对应于一个所有可能的取值构成的域(eg.整数型、字符型、日期/时间型)
- 参照完整性:一个关系中给定属性集上的取值也在另一关系的某一属性集的取值中出现。
- 断言:一个断言就是数据库需要时刻满足的某一条件。域约束和参照完整性约束是断言的特殊形式。
- 授权:用于对用户加以区分,判断依据为用户在数据库上的访问类型
①读权限
②插入权限
③更新权限
④删除权限
1.5 关系数据库
数据库应该是一个纯粹的逻辑概念
关系数据库基于关系模型,使用一系列表来表达数据以及这些数据之间的联系。
读的次数多写的次数少就存入固态硬盘
1.5.1 表
每个表有多个列,每个列有唯一的名字(表的列对应记录类型的属性)。
1.5.2 数据操纵语言
SQL查询语言是非过程化的,它以几个表作为输入(也可能只有一个),但总是返回一个表。
1.5.3数据定义语言
SQL提供丰富的的DD领域延,通过它,我们可以定义表、完整性约束、断言。
1.5.4 来自应用程序的数据库访问
有一些计算无法通过SQL来表达,但可以使用一些通用的程序设计语言来表达。这种计算和动作必须使用一种宿主语言来编写,比如C/C++/Java,然后在其中使用嵌入式的SQL查询来访问数据库中的数据。
应用程序:指以这种方式与数据库进行交互的程序。
1.6 数据库设计
(暂略,后续详学)
1.7 数据存储和查询
1.7.1 存储管理器
存储管理器是数据库系统中负责在数据库中存储的底层数据与应用程序以及向系统提交的查询之间提供接口的部件。存储管理器负责与文件管理器进行交互。
存储管理部件包括:
- 权限及完整性管理器——检测是否满足完整性约束,并检查试图访问数据的用户的权限
- 事务管理器——保证在即使有故障的情况下,数据库也能保持在正确的状态,并保证并发事务的执行不会冲突
- 文件管理器——管理磁盘存储空间的分配。
- 缓冲区管理器——负责将数据从磁盘上渠道内存中并决定哪些数据应被缓冲存储在内存中。
- 数据文件——存储数据库自身
- 数据字典——存储关于数据库结构的元数据
- 索引——提供对数据项的快速访问(eg.新华字典的偏旁部首查找法)
1.7.2 查询处理器
查询处理器组件:
- DDL解释器:解释DDL语句并将这些定义记录在数据字典中
- DML编译器:①将查询语言中的DML语句翻译为一个执行方案;②可进行查询优化
- 查询执行引擎:执行由DML编译器产生的低级指令
1.8 事务管理
事务:是数据库应用中完成单一逻辑功能的操作集合,每一个事务是一个极具与原子性又具有一致性的单元。
- 事务执行过程中允许暂时的不一致状态存在
- 事务应能保持数据库的正确性
恢复管理器:
保证数据库自身的原子性和持久性
故障恢复:
检测系统故障并将数据库恢复到故障发生以前的状态
并发控制管理器:控制并发事务间的相互影响,保证数据库的一致性
事务管理器:包括并发控制管理器和恢复管理器
1.9 数据库体系结构
- 客户机:远程数据库用户工作设备
- 服务器:运行数据库系统的设备
数据库应用通常可分为两个或三个部分:
在一个两层体系结构中,应用程序驻留在客户机上,通过查询语言表达式来调用服务器上的数据库系统功能。
三层体系结构,客户机只作为一个前端并且不包含任何数据库调用。客户端通常通过一个表单界面与应用服务器进行通信,而应用服务器与数据库系统通信以访问数据。应用程序的业务逻辑控制反应。
1.10 数据挖掘与信息检索
数据挖掘:指半自动地分析大型数据库并从中找出有用地模式地过程
信息检索:查询结构化的文本数据
1.11 特种数据库
1.11.1 基于对象的数据模型
面向对象数据模型:可以看作是E-R模型的扩展,增加了封装、方法(函数)和对象标识。
1.11.2 半结构化数据模型
1.12 数据库用户和管理员
1.12.1 数据库用户和用户界面
1.12.2 数据库管理员
对系统进行集中控制的人称作数据库管理员(DBA),其作用有:
- 模式定义:DBA通过DDL书写一系列定义来创建最初的数据库模式
- 存储结构及存取方法定义
- 模式及物理组织的修改
- 数据访问授权
- 日常维护
1.13 数据库系统的历史
层次模型(效率极高,但弊端在于:要求设计者清楚数据库在物理层的结构
网状模型(允许有一个以上的根节点
关系模型(目前最广泛使用的模式)