数据库系统概论
数据库系统概念
数据库基础概念
数据库管理系统(DataBase-Management System,DMBS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称作数据库(database)
概括地说,有两种使用数据库的方式。
第一种方式是支持联机事务处理(online transaction processing),即大量的用户使用数据库,每个用户检索相对少量的数据,进行小的更新。这是数据库应用系统的绝大多数用户的主要使用方式。
第二种方式是支持数据分析(data analytics),即审阅数据,给出结论,并推导出规则或决策程序,以用于驱动业务决策。
数据挖掘(data mining)领域将人工之恩那个研究者和统计分析员所创造的知识发现技术与使之能够被用于超大规模数据库的高效的实现技术结合起来。
文件处理系统(file-processing system)是传统的操作系统所支持的。系统将永久记录存储在多个不同的文件中,需要有不同的应用程序来将记录从有关文件中去除或加入适当的文件中。
- 文件处理系统的主要弊端:
- 数据的冗余和不一性(data redundancy and inconsistency)
- 同一份数据存在了不同的地方,如一个老师必然它的数据在教务系统存了一份,在人事系统也存了一份,这样相同的数据存在多个地方,就会存储浪费,访问麻烦。而且导致**数据不一致性()**的问题,你修改了某一个文件的信息时,不一定修改了另一个的文件的信息,那么数据就不一致。
- 数据访问困难(difficulty in accessing data)
- 需要找出满足特定范围或特定需求的数据时,缺少这样的一个列表的程序,不支持以一种方便而高效的方式去获取所需数据,需要开发通用的、反应更加敏捷的数据检索系统。
- 数据孤立(data isolation)
- 由于数据分散在不同文件中,这些文件又可能具有不同的格式,因此编写新的应用程序来检索适当数据很困难
- 完整性问题(integrity problem)
- 数据库中所存储数据的值必须满足某些特定类型的一致性约束(consisteny constraint)。在不同程序受到不同约束的数据,难以进行统一维护
- 原子性问题(atomicity problem)
- 要么全部发生,要么根本不发生。
- 并发访问异常(concurrent-access anomaly)
- 同时10个人抢一张票,那么只能允许一个人搞到票,也就是并发访问控制。而票这个数据,同时被10个客户端修改成功,那么就出问题了。
- 安全性问题(security problem)
- 并非数据库系统的每一个用户都可以访问所有数据。
- 数据的冗余和不一性(data redundancy and inconsistency)
数据模型
- 关系模型(relational model)
- 关系模型用表的集合来表示数据和数据间的联系。表也称作关系。
- 实体-联系模型(entity-structured data model )
- 实体-联系(E-R)数据模型使用称作实体的基本对象的集合,以及这些对象间的联系
- 半结构化模型(semi-structured data model)
- 半结构化数据模型允许在其数据定义中某些相同类型的数据项含有不同的属性集。
- 基于对象的数据模型(object-bsed data model)
- 过程可以被存放在数据库系统中,并由数据库系统来执行它们,这可以看成对关系模型进行扩展,增加了封装、方法和对象标识等。
数据抽象:对用户屏蔽复杂性,以简化用户与系统的交互
- 物理层(physical level):最低层次的抽象,描述数据实际上是怎样存储的。物理层描述复杂的底层数据结构
- 逻辑层(logical level):比物理层次稍高的抽象,描述数据库中存储什么数据以及这些数据库间存在什么联系。虽然逻辑层的简单结构的实现可能设计复杂的物理层结构,但逻辑层的用户不必意识到这样的复杂性,
- 视图层(view level):最高层次的抽象,它只描述整个数据的某些部分。视图层抽象的存在正是为了使这些用户与系统的交互更简,系统为同一数据库提供多个视图。
实例和模型
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance),而数据库的总体设计称作数据库模式(schema)。
按不同的抽象层次划分,数据库系统有几种模式。物理模式(physical schema)在物理层描述数据库的设计 ,而逻辑模式(logical schema)则在逻辑层描述数据库的设计。数据库在视图层也可以有几种模式,有时称为子模式(subschema),它描述了数据库的不同视图。
数据库语言
数据库系统提供数据定义语言(Data-Definition Language,DDL)来定义数据库模式,并提供数据操作语言(Data-Manipulation Language,DML)来表达数据库的查询和更新。
数据定义语言
数据库模式是通过一系列定义来说明的,这些定义由一种称作数据定义语言的特定语言来表达。DDL也可用于定义数据的其他特征。
通过一系列特定的DDL语句来说明数据库系统所采用的存储结构和访问方式,这种特定的DDL称作数据存储和定义(data storage and definition)语言。这些语句定义了数据库模式的实现细节。
存储在数据库中的数据值必须满足某些一致性约束:
- 域约束(domain constraint):每个属性都必须对应于一个所有肯恶搞的取值构成的域(如,整数型、字符型、日期/时间型)
- 引用完整性(referential integrity):希望能确保一个关系中给定属性集上的取值也在零一关系的某一属性集的取值中出现。
- 授权(authorization):对于不同的用户在数据库中的不同数据值上允许不同的访问类型。这些区别以授权来表达。常见的是:读权限(read authorization),允许读取数据,但不能修改数据;插入权限(insert authorization),允许插入新数据,但不允许修改已有数据;更新权限(update authorization),允许删除数据。我们可以赋予用户所有或部分这些权限,也可以不赋予用户任何这些权限。
DDL的输出放在数据字典(data dictionary)中,数据字典包含元数据(metadata),元数据是关于数据的数据。
数据操纵语言是这样一种语言,它使得用户可以访问或操纵那些按照某种适当的数据模型组织起来的数据。有以下访问类型:
- 对存储在数据库中的信息进行检索
- 向数据库中插入新的信息
- 修改数据库中存储的信息
基本上由两种类型的数据操纵语言:
- 过程化的DML(procedural DML)要求用户指定需要什么数据以及如何获得这些数据
- 声明式的DML(declarative DML)(也称为非过程的DML)只要求用户指定需要什么数据,而不必指明如何获得这些数据。
查询(query)是要求对信息进行检索的语句。DML中涉及信息检索的部分称作查询语言(query language)
从应用程序访问数据库
应用程序(application program)就是用来以这种方式与数据库进行交互的程序。
为了访问数据库,需要将DML语句从宿主发送到执行这些语句的数据库。最通用的办法是使用应用程序接口(过程集合),它可以用来将DML和DDL的语句发送给数据库,再取回结果。开放数据库连接(ODBC)标准定义用于C语言和其他几种语言的应用程序接口,Java数据库连接(JDBC)标准为Java语言提供了相应的接口。
数据库设计
概念设计(conceptual-design)设计者选择一个数据模型,并运用该选定的数据模型的概念,将那些需求转换成一个数据库的概念模式。
规范化(normalization)它将所有属性集作为输入,生成一组关系表。
在功能需求说明(specification of functional requirement)中,用户秒火速将在数据之上执行的各种操作(或事务)。
在逻辑设计阶段(logical-desgin phrase),设计人员将高层的概念模式映射到要使用过的实现数据库系统的数据模型上。……设计人员将得到的特定于系统的数据库模式用到后续的物理设计阶段(physical-design phrase)中,在这个阶段说明数据库的物理特性,这些特性包括文件组织的形式以及内部的存储结构。
数据库引擎
数据系用的功能部件大致可分为存储管理器、查询处理器(query processor)部件和事物管理部件。
一个GB(gigabyte)大约为10亿字节,或1024个MB(megabyte)兆字节,而一个TB(terabyte)大约为1万亿字节,或1024个MB。最大的企业的数据库规模达到数个PB(petabyte)千万亿字节,或1024个TB。
存储管理器(storage manager)是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供接口的部件。原始数据通过操作系统提供的文件系统存储在磁盘上。存储管理器将各种DML语句翻译为底层文件系统命令。因此,存储管理器负责数据库中数据的存储、检索和更新
存储管理器部件包括
- 权限及完整性管理器(authorization and integrity manager),它检测是否满足完整性约束,并检查试图访问数据的用户的权限。
- 事物管理器(transaction manager)它保证即使系统发生故障,数据库也保持在一致的状态,并保证并发事务的执行不发生冲突。
- 文件管理器(file manager),它管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。
- 缓冲区管理器(buffer manager),它负责将数据从磁盘上取到内存中,并决定哪些数据应被缓冲存储在内存中。
- 数据文件(data file)它存储数据库自身。
- 数据字典(data fictionary)它存储关于数据库结构的元数据,特别数据库模式。
- 索引(index)它提供对数据项的快速访问。提供了指向包含特定值的数据项的指针。
查询处理器
查询处理器组件包括:
- DDL解释器(DDL interpreter)它解释DDL语句并将这些定义记录在数据字典中
- DML解释器(DML interpreter)它将查询语言中的DML语句翻译为包括一些列查询执行引擎能理解的低级指令的执行方案。DML编译器还进行查询优化(query optimization),就是从几个候选执行计划中选出代价最小的那个。
- 查询执行引擎(query evaluation engine)它执行由DML编译器产生的低级指令。
事物管理
这种要么都发生要么都不发生的要求称作原子性。除此以外,资金转账的执行还必须保持数据库的一直行。例如:A和B的余额之和应该是保持不变的。这种正确性要求称作一致性。最后,当资金转账成功结束后,即使发生系统故障,账户A和B的余额也应该保持转账成功结束的新值。这种保持的要求称作持久性。
事物(transaction)是数据库应用中完成单一逻辑功能的操作集合。每一个事物是一个既具有原子性又具有一致性的单元。
原子性和持久性的保证是数据库系统自身的职责,确切的说,是恢复管理器(recovery manager)的职责。
故障恢复(failure recovery):即它必须检测系统故障并将数据恢复到故障发生以前的状态。
并发控制管理器(concurrency-control manager)控制并发事物间的相互影响,保证数据库的一致性。事物管理器(transaction manager)包括并发控制管理和恢复管理器。
数据库和应用体系结构
较早一代的数据库应用系统采用两层体系结构(two-tier architeture),其中应用程序驻留在客户机上,通过查询语言来调用服务器上的数据库系统功能。
而当今的数据库应用系统采用三层体系结构