最近在复习数据库的知识,本文将描述数据库中的基本概念,以及数据库要解决的基本问题,某些话题也许不会很详细,但是,争取描述清楚该话题的概念及其目的。
数据
数据是数据库的基本对象,是描述事物的符号记录,数据的类型有很多,文本、图形、图像、音频、视频等都是数据,他们经过数字化处理存入计算机。
在现代计算机系统中数据的概念是广义的。早起计算机系统主要用于科学计算,处理的数据为整数、实数、浮点数等。现在计算机储存和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。
数据的表现形式还不能表达其内容,需要经过解释,数据和关于数据的解释是不能拆分的。数据的解释是对数据含义的说明,数据的含义成为数据的语义,数据与其语义是不可分割的。
数据库
数据库即存放数据的仓库。数据都是按一定格式储存在计算机设备上的。
人们收集并抽取出一个应用所需要的大量数据之后,应将其保存起来,以供进一步加工处理,进一步抽取有用信息。
严格的讲,数据库是长期储存在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
概括的讲,数据库具有永久储存、有组织和可共享三个基本特点。
数据库系统的特点
- 数据结构化
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由数据库管理系统(DBMS)统一管理和控制
数据库管理系统
数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。
它的主要功能有以下几个方面:
1. 数据定义功能
DBMS 提供数据定义语言(Data Definition Language, DDL),对数据库中的数据对象进行定义。
2. 数据组织、存储和管理
DBMS 要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等。要确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率和方便存取,提供多种存取方法(如索引查找,Hash 查找,顺序查找等)来提高存取效率。
3. 数据操纵功能
提供数据操纵语言(Data Manipulation Language,DML),用户可以使用 DML操纵数据,实现对数据库的基本操作,如查询、插入、删除和修改等。
4. 数据库的事务管理和运行管理
数据库在建立、运用和维护时由 DBMS 统一管理、控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统修复。
5. 数据库的建立和维护功能
包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等。这些功能通常是由一些使用程序或管理工具完成的。
6. 其他功能
包括:DBMS与网络中其他软件系统的通信功能;一个 DBMS 与另一个 DBMS 或文件系统的数据转换功能;异构数据库之间的互访和互操作功能等。
数据库管理系统是数据库系统的重要组成部分。 数据库的共享是并发的(Concurrency)共享,所以 DBMS 还必须提供以下几方面的数据控制功能:
- 数据的安全性(Security)保护
- 数据的完整性(Integrity)检查
- 并发(Cncurrency)控制
- 数据库恢复(Recovery)
常见的数据库管理系统
目前有许多数据库产品,如 Oracle、Sybase、Informix、Microsoft SQL Server、Microsoft Access、Visual FoxPro、MySQL 等产品各以自己特有的功能,在数据库市场上占有一席之地。下面简要介绍几种常用的数据库管理系统。
Oracle 是一个最早商品化的关系型数据库管理系统,也是应用广泛、功能强大的数据库管理系统。Oracle 作为一个通用的数据库管理系统,不仅具有完整的数据管理功能,还是一个分布式数据库系统,支持各种分布式功能,特别是支持 Internet 应用。作为一个应用开发环境,Oracle 提供了一套界面友好、功能齐全的数据库开发工具。Oracle 使用PL/SQL 语言执行各种操作,具有可开放性、可移植性、可伸缩性等功能。特别是在 Oracle 8i 中,支持面向对象的功能,如支持类、方法、属性等,使得 Oracle 产品成为一种对象/关系型数据库管理系统。
MySQL 是流行的关系型数据库管理系统,特别是在 WEB 应用方面,MySQL 是好的关系数据库管理系统。由瑞典 MySQLAB 公司开发,目前属于 Oracle 旗下公司。MySQL 所使用的 SQL 语言是用于访问数据库的常用标准化语言。软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP,Linux 和 Apache 可组成良好的开发环境,经过多年的 web 技术发展,在业内被广泛使用的这种 web 服务器解决方案被称为 LAMP。
数据库系统
数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。应当指出的是,数据库的建立、使用和维护等工作只靠一个 DBMS 远远不够,还要有专门的人员来完成,这些人被称为数据库管理员。
数据库管理员
数据库管理员的具体职责1:
- 决定数据库中的信息内容和结构
- 决定数据库的存储结构和存取策略
- 定义数据的安全性要求和完整性约束条件
- 监控数据库的使用和运行
- 数据库的改进和重组重构
数据模型
数据模型是一种模型,是对现实世界数据特征的抽象。也就是说,数据模型是用来描述数据、组织数据和对数据进行操作的。数据模型就是现实世界的模拟,现有的数据库系统均是基于某种数据模型的。
数据模型应能满足三方面的要求:
- 能比较真实地模拟现实世界
- 容易为人所理解
- 便于在计算机上实现
如同在建筑设计和施工的不同阶段需要不同的图纸一样,在开发实施数据库应用系统中也需要使用不同的数据模型:概念模型、逻辑模型和物理模型。
概念模型,也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。
逻辑模型,主要包括层次模型(Hierarchical Model)、网状模型(Netword Model)、关系模型(Relational Model)、面向对象模型(Object Oriented Model)和对象关系模型(Object Relational Model)等。它是按计算机系统的观点对数据建模,主要用于 DBMS 的实现。
物理模型,是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是 面向计算机系统的。物理模型的具体实现是 DBMS 的任务,数据库设计人员要了解和选择物理模型,一般用户则不必考虑物理级的细节。
数据模型的组成要素
数据模型通常由数据结构、数据操作和完整性约束三部分组成。
数据结构,描述数据库的组成对象以及对象之间的联系。数据结构描述的对象主要有两类,一是与对象的类型、内容、性质相关的;另一个是与数据之间啊联系有关的对象。数据结构是所描述对象类型的集合,是对系统静态特性的描述。
数据操作,是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。数据库主要有查询和更新(插入、删除、修改)两大类操作,数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。是对系统动态特性的描述。
完整性约束,是给定的数据模型中数据及其联系所具有的制约和依存规则。反应和规定本数据模型必须遵守的基本的通用的完整性约束条件。此外,数据模型还应该提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
概念模型
概念模型用于信息世界的建模,是显示世界到信息世界的第一层抽象。
信息世界的基本概念,实体,属性,码,域,实体型,联系。
两个实体之间的联系,一对一,一对多,多对多。
概念模型的一中标识方法:实体-联系方法。
逻辑数据模型
数据库领域中常用的逻辑数据模型:
- 层次模型(Hierarchical Model)
- 网状模型(Network Model)
- 关系模型(Relational Model)
- 面向对象模型(Object Oriented Model)
- 对象关系模型(Object Relarional Model)
其中层次模型和网状模型统称为格式化模型2。
数据库系统模式
模式(schema),是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及到型的描述,不涉及到具体的值。模式的具体值称为模式的一个实例(Instance)。同一个模式可以有很多实例。模式是相对稳定的,而实例是相对变动的。
三级模式结构
三级模式结构是指数据库系统是由外模式、模式和内模式三级构成。
模式,也称逻辑模式,是数据库系统中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
外模式,也称子模式(Sbuschema)或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
内模式,也称存储模式(Storage Schema),一个数据库只有一个内模式。它是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
为了在系统内部实现这 3 个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:
- 外模式/模式映像:保证了数据与程序的逻辑独立性;
- 模式/内模式映像:保证了数据与程序的物理独立性;
这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
关系数据库
关系数据库是支持关系模型的数据库系统。本文主要涉及关系数据库的下面几个问题:关系模型、数据结构、关系操作、完整性约束。
至于关系数据库标准语言 SQL 的语法,本文不做过多赘述,读者可参考任一本关于 SQL 的书籍,但是,本文将介绍 SQL 在数据定义、数据查询、数据更新、数据控制等方面的功能。前文中提到的数据库的并发问题的几个方面,本文也会做一些简短的描述。 关系数据理论是关系数据库的理论基础,如果作者我近期复习这部分有总结性的体会的话,会增加到本文中。
关系数据结构
关系模型的数据结构只包含单一的数据结构——关系,在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
若一个关系有多个候选码,则选定其中一个为主码。
候选码的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。最简单情况下,候选码只包含一个属性。在最极端情况下,关系模式的所有属性是这个关系的候选码,称为全码。
关系模式,数据库 中要区分型和值。关系数据库中,关系模式是型,关系是值。关系的描述称为关系模式(Relarion Schema),可以形式化的表示为 R(U,D,DOM,F)。
- R:关系名
- U:组成该关系的属性名集合
- D:属性组 U 中属性所来自的域
- DOM:为属性向域的映像集合
- F:属性间数据的依赖关系集合
关系操作
基本关系操作
关系模型中常用的操作包括查询、插入、删除、修改。查询操作又可分为:选择、投影、连接、除、并、差、交、笛卡尔积等。
关系数据语言的分类
- 关系代数语言
- 关系演算语言
- 元组关系演算语言
- 域关系演算语言
- 具有关系代数和关系演算双重特点的语言(例如 SQL)
关系代数、元组关系演算和域关系演算三种语言3在表达能力上是完全等价的。关系语言是一种高度非过程化的语言,用户不必请求 DBA 为其建立特殊的存取路径,存取路径的选择由 RDBMS 的优化机制来完成。
关系完整性约束
关系模型的完整性规则是对关系的某种约束条件。任何关系在任何时刻都要满足这些语义约束。
关系模型中有有三类完整性约束:实体完整性,参照完整性,用户自定义的完整性。
实体完整性规则,若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值4。
参照完整性,若属性(或属性组)$F$ 是基本关系 $R$ 的外码,它与基本关系 $S$ 的主码 $K_s$ 相对应(基本关系 $F$ 和 $R$ 不一定是不同的关系),则对于 $R$ 中每个元组在 $F$ 上的值必须为:
- 空值( $F$ 的每个属性值都为空值)
- 等于 $S$ 中某个元组的主码值
用户自定义的完整性,针对某一具体关系数据库的约束条件,在 SQL 追踪,由 CHECK 表达。
结构化查询语言(SQL)
SQL 本文不做过多介绍,通过下面目录的形式描述其功能:
- 数据定义
- 模式定义与删除
- 基本表定义、修改、删除
- 索引的建立与删除
- 数据查询
- 查询指定列
- 查询全部列
- 查询经过计算的值
- 消除取值重复的行
- 查询满足条件的元组
- ORDER By 子句
- 聚集函数
- GROUP By 子句
- 连接查询
- 等值于非等值连接查询
- 自身连接
- 外连接
- 复合条件连接
- 嵌套查询
- 带有 IN 谓词的子查询
- 带有比较运算符的子查询
- 集合查询
- SELECT 语句的一般格式
- 数据更新
- 插入
- 修改
- 删除
- 视图
- 定义
- 查询
- 删除
- 数据保护/控制
- 授权与回收
- GRANT
- REVOKE
- 数据库角色
- 数据库完整性
- 实体完整性检查和违约处理
- 参照完整性检查和违约处理
- 用户定义完整性定义
- 完整性约束命名子句
- 触发器
- 授权与回收