绪论
数据库系统概述
数据库基本概念
数据库的四个基本概念:
- 数据(data)
- 数据库(database, DB)
- 数据库管理系统(database management system, DBMS)
- 数据库系统(database system, DBS)
- 数据库用户(database user)
- 数据库管理员(database administrator, DBA)
- 数据库应用系统(database application system)
数据(Data)
数据(Data)是指具有一定的语义(semantic)含义,并且可以被记录下来的已知信息。
在计算机中,数据被表示为具有一定格式或结构的符号串(描述事物的符号串)。 单纯的符号没有任何意义,需要给予解释,说明其含义。数据的含义即「语义」。
数据是信息的载体,信息是数据的内涵。
数据的特性:
- 数据表现的多样性:数字、文字、日期/时间、图形/图像、音频/视频、二进制串、文档、抽象数据类型等
- 数据的可构造性
- 型(type)
- 数据类型 type
- 数据结构 structure
- 数据模式 schema
- 值(value)
- 型(type)
- 数据的挥发性/持久性
- 数据的私有性/共享性
- 数据的量:从「少量」到「大量」、「海量」,再到「大数据」(Big Data)
数据特性的变化趋势:
- 数据的量:从少量到大量、海量,再到大数据(Big Data)
- 数据的结构:从简单到复杂,再到无结构
- 数据的服务范围:从私有到共享
- 数据在软件中的地位:从附属地位(以程序为主体)到主导地位(以数据为中心)
数据库(Database)
数据库(Database, DB)是指长期储存在计算机内、有组织的、可共享的大量数据的集合。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的数据冗余(data redundancy)、较高的数据独立性(data independency) 和易扩展性(scalability),并可为各种用户共享。
数据库中的数据具有以下特点:
- 永久存储:存储在计算机的持久存储设备上
- 有组织:
- 按一定的数据模型组织、描述和储存
- 统一组织、集中存储
- 较小的数据冗余度
- 较高的数据独立性
- 可共享
即结构化、集成化和集中管理。
数据库管理系统(DBMS)
数据库管理系统(Database Management System, DBMS)是位于用户(应用程序)与数据库(操作系统)之间的一层数据管理软件,是一种用于管理数据库的大型软件系统。
DBMS 的作用:科学地组织和存储数据、高效地获取和维护数据
- 是数据库应用程序与数据库之间的访问接口
- 在保证数据安全、可靠的同时,提高数据库应用时的简明性和方便性
DBMS 的功能:
- 数据定义功能
- 提供数据定义语言(Data Definition Language, DDL)
- 定义数据库中的数据对象(数据模式 data schema)
- 数据组织、存储和管理功能
2)数据组织、存储和管理- 分类组织、存储和管理各种数据
- 确定数据的存储方式(文件结构、存储组织等),实现数据之间的联系
- 提供多种存取方法(顺序扫描、索引扫描、HASH 扫描等),提高存取效率
- 数据操纵功能
- 提供数据操纵语言(Data Manipulation Language, DML)
- 实现对数据库中数据的基本操作(查询、插入、删除、修改等)
- 数据库的事务管理和运行管理
- 数据库在建立、运行和维护时由数据库管理系统统一管理和控制
- 保证数据的安全性、完整性、多用户对数据的并发使用(事务管理)
- 发生故障后的系统恢复(数据库恢复)
- 数据库的建立和维护功能
- 数据库的建立,初始数据加载与转换
- 数据库转储,数据库恢复
- 数据库的重组,性能监视与分析等
- 其他功能
- 与网络中其他软件系统的通信
- 数据库管理系统之间的数据转换
- 异构数据库系统之间的互访/互操作
数据子语言(data sub-language):
- 数据定义语言(Data Definition Language, DDL):负责数据模式的定义及数据存取方法的选择
- 数据操纵语言(Data Manipulation Language, DML):负责数据的操纵,包括查询及增、删、改等操作
- 数据控制语言(Data Control Language, DCL):负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能
统一以上功能的关系数据子语言为 SQL (结构化查询语言 Structured Query Language)。
数据子语言使用方式:
- 交互式命令语言:能在终端上即席操作,能够以命令行交互方式或批处理方式独立运行
- 宿主语言:需要被嵌入到某种宿主语言中
数据库系统与数据库应用系统:
- 数据库系统(Database System,简称 DBS)是由数据库、数据库管理系统、数据库管理员、支撑系统运行所必须的系统软件和硬件平台组成的存储、管理、处理和维护数据的系统。
- 数据库应用系统(Database Application System)是由数据库系统、应用开发工具、应用系统、数据库用户组成的计算机系统。
在不引起混淆的情况下,常常把两者都统称为「数据库系统」。
数据库系统的构成:
- 数据库
- 系统硬件平台与系统软件平台
- 数据库管理系统
- 应用系统与应用开发工
- 数据库管理员 DBA
- 数据库用户
数据库用户(Database Users)是指规划、设计、建立、访问、管理、维护数据库的人员:
- 数据库管理员(DataBase Administrator, DBA)
- 负责数据库的规划、设计、建立、管理、维护、监视的专职人员。
- 应用开发人员(包括系统分析员、数据库设计人员、应用程序员)
- 最终用户(End users):通过应用系统访问使用数据库的人员。
数据管理技术
数据管理是指对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题。
数据处理则是指对各种数据进行收集、存储、加工和传播的一些列活动的总和。
人工管理:人工管理阶段应用程序与数据之间的一一对应关系:
特点:
- 数据的管理者:用户(程序员),数据不保存
- 数据面向的对象:某一应用程序
- 数据的共享程度:无共享、冗余度极大
- 数据独立性:不独立,完全依赖于程序
- 数据结构化:无结构
- 数据控制能力:应用程序自己控制
文件系统阶段应用程序与数据之间的对应关系:
特点
- 数据的管理者:文件系统,数据可长期保存
- 数据面向的对象:某一应用
- 数据的共享程度:共享性差、冗余度大
- 数据的结构化:记录内有结构,整体无结构
- 数据的独立性:独立性差
- 数据控制能力:应用程序自己控制
利用文件系统可以实现简单的数据管理和数据共享,但无法提供完整统一的数据管理功能和并发控制等多用户数据共享功能。例如:
- 对象持久化
- C++ 的持久对象存储
- Java 对象的序列化/反序列化
- 基于文本的数据共享
- XML (Extensible Markup Language)
- JSON (JavaScript Object Notation)
- K/V (Key/Value)
数据库系统阶段应用程序与数据之间的对应关系:
数据库系统的发展历史:
- 第一阶段:层次/网状数据库(20 世纪 60 年代 ~ 70 年代)
- 第二阶段:关系数据库(20 世纪 70 年代 ~ )
- 数据库从无到有,提供简单的共享数据的「读/写」
- 数据库 从有到 大规模商业化应用
- 面向事务处理型应用:OLTP(联机事务处理)
Jim Gray
- 第三阶段:关系数据库系统扩展(20 世纪 90 年代 ~ )
- 数据仓库 (Data Warehouse)
- 面向数据分析型应用:OLAP(联机分析处理)
Mike.Stonebraker
- 第四阶段:新型数据管理系统(21 世纪 ~ )
- NoSQL/NewSQL/云原生/AI+DB/新型数据库系统
数据库系统的特点
例子:学生的信息包括学号、姓名、性别、年龄、专业和奖励。
用文件系统实现学籍管理:
- 数据存储
- 学生的基本信息:定长记录,存储在「学生基本信息」文件中
- 学生获得的奖励信息:变长记录,存放在另一个「奖励」文件中
- 在「学生基本信息」记录中,添加「位置」和「长度」字段来描述该学生的奖励记录在「奖励」文件中的开始位置和长度
- 数据存取
- 编写应用程序,实现数据的录入和查找
缺点:程序员必须关注记录结构和不同文件中记录之间的联系,工作量大,编程复杂,开发速度慢。
用数据库系统实现学籍管理
- 数据存储
- 建立两张表
- students 表:存放学生的基本信息
- awards 表:存放学生获得的奖励情况
- 通过外关键字实现「学生基本信息」与「奖励信息」的关联
- 建立两张表
- 数据存取
- 使用 DBMS 提供的数据操纵语言,实现数据的录入和查找
在数据库技术出现之前,应用程序对于(文件中)数据的访问存在以下方面的问题:
- 数据存储
- 冗余存储 redundancy
- 数据的不一致性 data inconsistency
- 完整性约束 integrity constraints
- 数据访问
- 缺少标准的数据访问接口
- 数据更新操作的原子性 atomicity of updates
- 多用户并发
- 多用户访问的隔离、并发控制、故障恢复
- 数据安全:用户身份识别,访问控制
数据库系统的特点:
- 数据结构化
- 数据的共享性高,冗余度低且易扩充
- 数据独立性高
- 数据由数据库管理系统统一管理和控制
数据结构化
数据的整体结构化是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。
整体结构化
- 不再仅仅针对某一个应用,而是面向全组织
- 集成性:采用统一的数据结构,建立一个全局统一的数据模式,根据每个应用的数据需要构作局部模式
- 不仅数据内部结构化,整体是结构化的,数据之间具有联系
- 数据记录可以变长
- 数据的最小存取单位是数据项
数据的组织结构、联系方式、存取方法用「数据模型」描述,无需应用程序定义。
数据的共享性高,冗余度低且易扩充
数据面向整个系统,可以被多个用户、多个应用共享使用。
- 数据共享
- 可供多个应用程序使用,并可用于不同的目的
- 可以在已有的数据库系统上开发新的应用程序
- 可向外界提供信息服务功能
- 数据冗余
- 同一个数据在系统中的不同地方出现了重复存储
- 数据一致性
- 在系统中,同一数据的不同出现应保持相同的值
数据共享的好处:
- 减少数据冗余,节约存储空间
- 避免数据之间的不相容性与不一致性
- 使系统易于扩充
数据独立性高
数据独立性是指数据库中的数据与使用这些数据的应用程序之间的互不依赖性,即数据或数据结构的改变不会导致对使用这些数据的应用程序的修改,反之亦然。
- 物理独立性
- 指用户的应用程序与数据库中数据的物理存储是相互独立的。
- 当数据的物理存储改变了,应用程序不用改变。
- 逻辑独立性
- 指用户的应用程序与数据库的逻辑结构是相互独立的。
- 数据的逻辑结构改变了,应用程序不用改变
在数据库管理系统中,数据独立性是由三级模式及它们之间的二级映像功能来保证。
数据由数据库管理系统统一管理和控制
数据库管理系统提供的数据控制功能包括
- 数据的安全性(Security)保护:保护数据以防止不合法的使用造成的数据的泄密和破坏。
- 数据的完整性(Integrity)检查:保证数据的正确性、有效性和相容性。
- 并发(Concurrency)控制:对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。
- 数据库恢复(Recovery):将数据库从错误状态恢复到某一已知的正确状态。
数据模型
数据模型是对现实世界数据特征的抽象,用以抽象、表示和处理现实世界中的数据和信息。
数据模型应满足三方面要求:
- 能比较真实地模拟现实世界
- 容易为人所理解
- 便于在计算机上实现
数据模型是数据库系统的核心和基础。
graph LR
现实世界 --符号化--> 数据
数据 --特征抽象--> 数据模型
我们用建立在不同抽象层次上的数据模型来表示每一步转化的结果(两大类、共三种类型的数据模型)
- 概念数据模型(conceptual data model, 概念模型/信息模型)
- 按用户的观点来对数据和信息建模,用于数据库设计
- 逻辑数据模型(logic data model, 逻辑模型)
- 按计算机系统的观点对数据建模,用于 DBMS 实现
- 主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等
- 物理数据模型(physical data model, 物理模型)
- 是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法
三种数据模型之间的关系:
信息世界中的基本概念
- 实体(Entity)
- 客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。
- 每一个实体有一个「实体名」,同类实体具有相同的实体名。
- 属性(Attribute)
- 实体具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
- 每一个属性有一个「属性名」,在同一个实体内属性名互不相同。
- 联系(Relationship)
- 现实世界中事物内部以及事物之间的联系,在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。
- 每一个联系有一个「联系名」
- 实体型(Entity Type)
- 用实体名及其所有属性名的集合来抽象和刻画同类实体
- 实体的实体名及其所有属性名的集合,称为该实体的「实体型」
- 实体值(Entity Value)
- 实体中的属性可以有值,一个实体的所有属性值的集合被称为该实体的「实体值」。(也被称为「实体实例」,Entity Instance)
- 实体集(Entity Set)
- 同一类型实体的集合,称为「实体集」
- 同一个实体集中的所有实体,具有相同的实体型但实体值互不相同。
- 码(Key)
- 唯一标识实体的属性集称为码。
- 「码」也被称为关键字、键、标识符(Identifier)
- 在一个实体集中,可以通过「码」的取值来区分不同的实体。
实体之间的联系
实体之间的联系通常是指不同实体集之间的联系。
实体之间的联系有一对一、一对多、多对多等多种类型,在 ER 模型(Entidy-Relation)中被称为「联系的函数关系」。
用示意图来解释三种不同的函数关系。如下图所示,其中:
- 椭圆形代表「实体集」
- 点代表 「实体」(是现实世界中的某个客观对象在 ER 模型中的抽象表示)
- 点与点之间的线代表在现实世界中的「实体之间的联系」情况
不同联系类型:
数据模型的组成要素
数据模型(data model)用于描述数据的组织结构,定义在该数据结构上可以执行的操作以及数据之间必须满足的约束条件。
数据模型的组成要素:
- 数据结构
- 数据操作
- 数据约束
数据结构
数据模型的数据结构用以描述数据库的组成对象,以及对象之间的联系。
描述的内容:
- 与对象的类型、内容、性质有关
- 与数据之间联系有关
为了便于区别,数据模型中的数据结构被称为「数据模式」(data schema)。
数据模式是划分不同类型数据模型的依据。
数据操作
数据操作是对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
数据操作的类型:
- 查询
- 更新(包括插入、删除、修改)
数据模型对操作的定义:
- 操作的确切含义、操作符号、操作规则(如优先级)
- 实现操作的语言
数据操作是对系统动态特性的描述。
数据约束
数据的完整性约束条件:
- 一组完整性规则的集合
- 完整性规则:给定的数据模型中数据及其联系所具有的制约和依存规则
- 用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容
数据模型对完整性约束条件的定义:
- 反映和规定必须遵守的基本的通用的完整性约束条件。
- 提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
关系模型
基本概念:
- 关系(Relation):一个关系对应通常说的一张表
- 元组(Tuple):表中的一行即为一个元组
- 属性(Attribute):表中的一列即为一个属性,给每一个属性起一
个名称即属性名 - 主码(Key):也称码键。表中的某个属性组,它可以唯一确定一个
元组 - 域(Domain):是一组具有相同数据类型的值的集合。属性的取值范
围来自某个域。 - 分量:元组中的一个属性值。
- 关系模式
- 对关系的描述:关系名(属性 1,属性 2,…,属性 n)
- 例:学生(学号,姓名,年龄,性别,系名,年级)
关系必须是规范化的,满足一定的规范条件。
最基本的规范条件:关系的每一个分量必须是一个不可分的数据项,不允许表中还有表。如下表就不符合规范化要求:
优点:
- 建立在严格的数学概念的基础上
- 概念单一
- 实体和各类联系都用关系来表示
- 对数据的检索结果也是关系
- 关系模型的存取路径对用户透明
- 具有更高的数据独立性,更好的安全保密性
- 简化了程序员的工作和数据库开发建立的工作
缺点:
- 存取路径对用户透明,查询效率往往不如格式化数据模型
- 为提高性能,必须对用户的查询请求进行优化,增加了开发 DBMS 的难度