引言
文件处理系统
文件处理系统(file-processing system):
是传统的操作系统所支持的。在数据库管理系统(DBMS)出现以前,各个组织通常都采用这样的系统来存储信息 (永久记录被存储在多个不同的文件中,人们编写不同的应用程序来记录从有关文件中取出或加入到适当的文件中)
(存储组织信息的)主要弊端:
- 数据的冗余和不一致 data redundancy and inconsistency:
冗余除了导致存储和访问开销增大以外,还可能导致数据不一致性,即同一数据的不同副本不一致 - 数据访问困难 difficulty in accesssing data:
传统的文件处理系统不支持以一种方便而高效的方式去获取所需数据。我们需要开发通用的、能对变化的需求做出更快反应的数据检索系统 - 数据孤立 data isolation:
- 完整性问题 integrity problem:
数据库中所存储的数据的值必须满足某些特定的一致性约束consistency constraint - 原子性问题 atomicity problem:
保持原子性,要么全部发生要么根本不发生,而在传统的文件处理系统中很难做到 - 并发访问异常 concurrent-access anomaly
- 安全性问题 security problem:
由于应用程序总是即席的加入到文件处理系统来,一些安全性约束难以实现
数据抽象
开发人员通过如下几个层次的上的抽象来对用户屏蔽复杂性:
- 物理层(physical level):
最低层次的抽象,描述数据实际上是怎样存储的。它详细描述复杂的底层数据结构 - 逻辑层(logical level):
层次稍高,描述数据库中存储什么数据及这些数据间存在什么关系。这样它就通过少量相对简单的结构描述了整个数据库。物理数据独立性physical data independence:逻辑层的用户不必知道涉及物理层结构的复杂性 - 视图层(view level):
最高层次的抽象,只描述数据库的某个部分。系统可以为同一数据库提供多个视图
实例、模式、数据模型
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance)
而数据库的总体设计称作数据库模式(schema)(数据库模式即使发生变化,也不频繁)
- 物理模式 physical schema ——物理层
- 逻辑模式 logical schema ——逻辑层
- 子模式 subschema ——视图层
数据库结构的基础是数据模型(data model),数据模型 是一个 描述 数据、数据联系、数据语义以及一致性约束 的概念工具 的集合,提供了一种描述 物理层、逻辑层以及视图层数据库设计 的方式
- 关系模型 relation model
- 实体-联系模型 entity-relationship model
- 基于对象的数据模型 object-based data model
- 半结构化数据模型 semistructured data model
还有很少被使用的 网状数据模型 network data model 和 层次数据模型 hierarchical data model
数据库语言
数据定义语言(data-definition language,DDL)定义 数据库模式
数据操纵语言(data-manipulation language,DML)表达 数据库的查询和更新
它们并不是两种分离的语言,而是简单的构成了单一的数据库语言(如SQL语言)的不同部分
DDL
- 域约束(domain constraint):是 完整性约束 的最基本形式
- 参照完整性(referential integrity)
- 断言(assertion):一个断言 就是数据库需要时刻满足的某一条件。域约 束和参照完整性约束 是断言 的特殊形式
- 授权(authorization):
- 读权限 read authorization
- 插入权限 insert authorization
- 更新权限 update authorization:允许修改,但不能删除数据
- 删除权限 delete authorization
- 数据字典 data dictionary:可以把它看作一种特殊的表 ,这种表只能由数据库系统本身(不是常规的用户) 来访问和修改。在读取和修改实际的数据前,数据库系统先要参考数据字典
元数据 metadata:是关于数据的数据。数据字典 包含了元数据
DDL以一些指令(语句)作为输入 ,生成一些输出 。DDL的输出放在数据字典中
DML
- 访问类型:检索、插入、删除、修改 (DML中涉及信息 检索 的部分称作查询语言 query language)
- 类别:过程化DML procedural DML、声明式DML declarative DML(也称为 非过程化DML)
关系数据库
每个表有多个列 ,每个列 有唯一的名字。每个表包含一种特定类型的记录,每种记录类型定义固定数目的字段或属性,表的列对应记录类型的属性
关系数据库基于关系模型,关系模型是基于记录的模型的一个实例,之所以叫基于记录的模型是因为数据库的结构是几种固定格式的记录
这里的应用程序是指,以这种方式与数据库进行交互的程序
为了访问数据库 ,DML语句需由宿主语言来执行,有两种途径 :
- 通过提供应用程序接口(过程集),它可以用来将DML和DDL的语句发送给数据库,再取回结果
开放数据库连接(ODBC)标准(与C语言一起使用的),是一种常用的应用程序接口标准,JAVA数据库连接(JDBC)标准为JAVA语言提供了相应的特性 - 通过扩展宿主语言的语法,在宿主语言的程序中嵌入DML调用
通常用一个特殊字符作为DML调用的开始,并且通过DML预编译器(DML precompiler),来将DML语句转变为宿主语言中的过程调用
实体-联系模型、规范化、存储管理器
实体-联系(E-R)数据模型使用一组称作实体的基本对象,以及这些对象间的联系
数据库的实体通过属性(attribute)集合来描述,联系(relationship)几个实体之间的关联
同一类型 的所有实体的集合称作实体集(entity set),同一类型 的所有联系的集合称作联系集合(relationship set)
数据库的总体逻辑结构(模式)可以用实体-联系图(entity-relationship diagram,E-R 图)进行图形化表示。画图采用的方法包括统一建模语言(Unified Modeling Language,UML),基于UML的符号中,E-R图如下表示:
- 实体集用矩形框表示,实体名在头部,属性名列在下面
- 联系集用连接一对相关的实体集的菱形表示,联系名放在菱形内部
E-R模型描绘的数据库必须遵守的一个重要约束是映射基数(mapping cardinality),它表示通过某个联系集能与一实体进行关联的实体数目
规范化:
- 最常用的方法是使用函数依赖(functional dependency)
- 目标是生成一个关系模式集合,使存储信息时没有不必要的冗余 &同时能轻易检索数据
存储管理器负责数据库中数据的存储、检索和更新,存储管理部件包括:
数据库体系结构
系统体系结构:
两层体系结构(two-tier architecture)和三层体系结构(three-tier architecture):