文件处理系统(file-processing system)的主要弊端:
数据冗余和不一致(data redundancy and inconsistency)、数据访问困难(difficulty in accessing data)、数据孤立(data isolation)、完整性问题(integrity problem)、原子性问题(atomicity problem)、并发访问异常(concurrent-access anomaly)、安全性问题(security problem)。
数据抽象的三个层次
1)物理层(physical level):详细描述复杂的底层数据结构
2)逻辑层(logical level):描述数据库中存储什么数据及这些数据间存在的关系。
物理数据独立性(physical data independence):应用程序不依赖于物理模式,即使物理模式改变也无须重写应用程序,逻辑层用户不必知道逻辑层结构实现可能涉及的复杂物理层结构。
3)视图层(view level):只描述数据库的某个部分,系统可以为同一数据库提供多个视图,使用户与系统交互更简单。
数据库模式
实例(instance):特定时刻存储在数据库中的信息的集合称作数据的一个实例。
数据库模式(schema):数据库的总体设计,即使发生变化,也不频繁。
数据库系统可分为几种不同的模式:e.g.物理模式、逻辑模式、子模式(subschema,描述数据库的不同视图)。
数据模型(data model):描述数据、数据联系、数据语义及一致性约束的概念工具的集合,提供一种描述物理层、逻辑层及视图层数据库设计的方式。
数据模型可被划分为四类:
关系模型(relational model):一种基于记录的模型,用表的集合来表示数据和数据间的联系,每个表有多个列,每列有唯一的列名。
实体-联系模型(entity-relationship model,a.k.a. E-R):基于对现实世界的一种认识——现实世界由一组基本对象(实体)及这些对象间的联系构成。实体是现实世界中可区别于其他对象的一件事情或一个物体。
E-R提供一种方便的图形化方式来观察数据、联系和约束。
数据库中实体通过属性(attribute)集合来描述;
联系(relationship)是几个实体之间的关联;
同一类型的所有实体的集合称为实体集(entity set),同一类型的所有联系的集合称作联系集(relationship set);
基于对象的数据模型(object-based data model):可看作E-R模型增加了封装、方法和对象标志等概念后的扩展。对象-关系数据模型结合了面向对象的数据模型和关系数据模型的特征。
半结构化数据模型(semistructured data model):允许相同类型的数据项含有不同的属性集的数据定义。
网状数据模型(network data model)、层次数据模型(hierarchical data model)如今已经很少使用。
数据库语言
数据库系统提供数据定义语言(data-definition language)和数据操纵语言(data-manipulation language),构成了单一数据库语言的不同部分。
1. 数据操纵语言(DML):使用户可以访问或操纵那些按某种适当的数据模型组织起来的数据。
DML的访问类型包括:增、删、查、改。
查询(query):要求对信息进行检索的语句,DML中涉及信息检索的部分称作查询语言(query language)。
通常有两类基本的DML:
1)过程化DML(procedural DML):要求用户指定需要什么数据以及如何获得这些数据。
2)声明式DML(declarative DML):也称非过程化DML,还要求用户指定需要什么数据,而不指明如何获得这些数据。
2. 数据库定义语言(DDL):用于表达说明数据库模式的一系列定义(定义数据库模式),也可用于定义数据的其他特征。
数据存储和定义(data storage and definition)语言:一系列特殊的DDL语句,用于说明数据库系统所使用的存储结构和访问方式,定义了数据库模式的实现细节。
存储在数据库中的数据值必须满足某些一致性约束(consistency constraint),DDL语言提供指定这种约束的工具,每当数据库更新时数据库系统都会检查这些约束。
·域约束(domain constraint):每个属性都对应于一个所有可能的取值构成的域。
·参照完整性(referential integrity):一个关系中给定属性集上的取值也在另一关系的某一属性集的取值中出现。
·断言(assertion):数据库需要时刻满足某一条件。断言创建后系统会监测其有效性,如果断言有效,则以后只有不破坏断言的数据库更新才被允许。
·授权(authorization):对于不同用户在数据库中的不同数据值上允许不同的访问类型,这些区别以授权来表达。如:a. 读权限(read authorization)允许读取数据但不能修改数据;b. 插入权限(insert authorization)允许插入新数据但不允许修改已有数据;更新权限(update authorization)允许修改但不能删除数据;删除权限(delete authorization)允许删除数据。
数据字典:DDL以指令(语句)作为输入,生成输出放在数据字典(data dictionary)中。数据字典包含元数据(metadata)。数据字典可以看做一种特殊的表,只能由数据库系统本身来访问和修改,在读取和修改实际数据前数据系统要先参考数据字典。
关系数据库:基于关系模型,使用一系列表来表达数据以及这些数据之间的关系。一种基于记录的模型,数据库的结构时几种固定格式的记录。
表:每个表包含一种特定类型的记录,每种记录类型定义固定数目的字段或属性(每个表有多个列),表的列对应记录类型的属性(每个列有唯一的名字)。
来自应用程序的数据库访问
大多数计算和动作必须用一种宿主语言(如C/C++/Java)来完成,再在其中使用嵌入式的SQL查询来完成对数据库的访问。由宿主语言执行DML访问数据库的两种途径包括:
1. 通过提供应用程序接口(过程集),将DML和DDL语句发送给数据库再取回结果。e.g. C语言+ODBC、Java+JDBC
2. 通过扩展宿主语言的语法,在宿主语言的程序中嵌入DML调用。
规范化
设计关数据库所用到的一种方法,通过设计一种符合适当范式(normal form)的模式,生成一个关系模式集合,使存储信息时没有不必要的冗余,同时又能轻易检索数据。
数据存储和查询
数据库系统的功能部件大致可分为存储管理器和查询处理部件。
1) 存储管理器: 数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供接口的部件,负责数据库中数据的存储、检索和更新。
存储管理部件包括:
·权限及完整性管理器(authorization and integrity manager):检测是否满足完整性约束,检查视图访问数据的用户的权限。
·事务管理器(transaction manager):保证即使发生故障,数据库也保持在一致(正确)的状态,并保证并发事务的执行不发生冲突。
·文件管理器(file manager):管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。
·缓冲管理器(buffer manager):负责将数据从磁盘取到内存中来,并决定哪些数据应被缓冲存储在内存中。
存储管理器实现了几种数据结构,作为系统物理实现的一部分:
·数据文件(data files):存储数据库自身。
·数据字典(data dictionary):存储关于数据库结构的元数据,尤其是数据库模式。
·索引(index):提供对数据项的快速访问(e.g. 指针、散列)
2)查询处理器
查询处理器负责编译和执行DDL和DML语句,组件包括:
·DDL解释器(DDL interpreter):解释DDL语句并将这些定义记录在数据字典中。
·DML编译器(DML compiler):将查询语言中的DML语句翻译为执行方案,包括一系列查询执行引擎能理解的低级指令。
DML编译器还进行查询优化(query optimization),从几种等价的具有相同结果的执行方案中选出代价最小的一种。
·查询执行引擎(query evaluation engine):执行由DML编译器产生的低级指令。
事务管理
事务(transaction):数据库应用中完成单一逻辑功能的操作集合。每一个事务是一个既具有原子性又具有一致性的单元,。
事务的定义应使之不违反数据库的一致性约束。一个事务可以被定义为由多个单独程序组成,程序依次执行可以保持一致性,但单个程序自身都不是把数据库从一个一致状态转入一个新的抑制状态,因此这些程序不是事务。
事务管理器(transaction manager)包括并发控制管理器(concurrency-control manager,控制并发事物间的相互影响,保证一致性)和恢复管理器(recovery manager,事务失败时进行故障恢复,保证原子性和持久性)。
数据库体系结构
1. 两层体系结构(two-tier architecture):应用程序驻留在客户机上(前端),通过查询语言表达式来调用服务器上的数据库系统功能(后端)。(应用程序接口标准e.g.ODBC/JDBC用于进行客户端和服务器的交互)
2. 三层体系结构(three-tier architecture):后端分为应用服务器和数据库服务器;客户机只作为前端,不包含任何直接的数据库调用,通过一个表单界面与应用服务器(application server)通信;应用服务器与数据库系统通信以访问数据,应用程序的业务逻辑(business logic)被嵌入到应用服务器中而不是分布在多个客户机上。
数据库用户和管理员
使用数据库的人员可分为数据库用户和数据库管理员
1. 数据库用户
数据库用户可分为四种类型,系统为不同类型用户设计不同类型的用户界面
·无经验的用户(naïve user):通过激活事先写好的应用程序同系统交互,典型用户界面是表格界面。
·应用程序员(application programmer):开发用户界面
·老练的用户(sophisticated user):不通过编写程序同系统交互,而是用数据库查询语言或数据分析软件等工具表达要求。
·专门的用户(specialized user):编写专门的、不适合于传统数据处理框架的数据库应用的富有经验的用户。
2. 数据库管理员
对系统进行集中控制的人称作数据库管理员(DataBase Administrator,DBA),DBA的作用包括:
·模式定义(schema definition)。通过用DDL书写一系列定义来创建最初数据库模式。
·存储结构及存取方法定义(storage structure and access-method definition)。
·模式及物理组织的修改(schema and physical-organization modification)。由DBA对模式和物理组织进行修改以反映机构的需求变化,或为提高性能选择不同的物理组织。
·数据访问授权(granting of authorization for data access)。DBA通过授予不同类型的权限来规定不同的用户各自可以访问数据库的部分。
·日常维护(routine maintenance),包括:
a. 定期备份数据
b. 确保正常运转所需的空余磁盘空间,并在需要时升级磁盘空间
c. 监视数据库的运行,并确保数据库性能不因一些用户提交了花费时间较多的任务就下降很多。