数据库系统概论(个人笔记)
文章目录
- 数据库系统概论(个人笔记)
- 1、介绍
- 1.1 数据库系统应用
- 1.2 数据库系统的历史
- 1.3 数据库系统的目标
- **大学数据库例子**
- 1.4 数据视图
- 1.5 数据库语言
- 1.6 数据库设计
- 1.7 数据库引擎
- 1.8 数据库体系结构
- 1.9 数据库用户和管理员
1、介绍
1.1 数据库系统应用
Database Applications
下面是一些有代表性的应用:
-
企业信息
- 销售
- 会计
- 人力资源
-
制造业
-
银行与金融
- 银行业务
- 信用卡交易
- 金融
-
大学
-
航空公司
-
电信
-
基于网络的服务
- 社交媒体
- 在线零售商
- 在线广告
-
文献数据库
-
导航系统
Database System
DBMS(Database Management System)包含了特定企业的信息:
- 收集相关数据
- 访问数据的程序集
- 使用起来既方便又高效的环境
DBS(Database System)用于管理以下数据集:
- 极有价值的
- 相对大
- 由多个用户和应用程序访问,通常是同时访问。
现代资料库系统是一个复杂的软件系统,其任务是管理庞大而复杂的资料收集。
1.2 数据库系统的历史
History of Database
1950s 和 1960s 早期:
- 用磁带存储的数据处理
- 磁带只提供顺序存取
- 用于输入的穿孔卡片
1960s 末 和 1970s 初:
-
允许直接访问数据的硬盘
-
广泛使用的网络和层次数据模型
-
Ted Codd定义了关系数据模型
-
这项工作将赢得 ACM 图灵奖
-
IBM研究院开始系统 R 原型
-
加州大学伯克利分校(Michael Stonebraker)开始 Ingres 原型
-
甲骨文发布第一个商业关系数据库
-
-
高性能(时代)事务处理
1970s 末 和 1980s 初:
- 研究关系原型演变成商业系统
- SQL成为工业标准
- 并行和分布式数据库系统
- Wisconsin,IBM,Teradata
- 面向对象数据库系统
1990s:
- 大型决策支持和数据挖掘应用
- 大型多兆字节数据仓库
- 网络商务的出现
2000s:
- 大数据存储系统
- Google BigTable,Yahoo PNuts,Amazon
- ”NoSQL“系统
- 大数据分析:超越SQL
- Map reduce and friends
2010s:
- SQL重新加载
- SQL前端到Map Reduce系统
- 大规模并行数据库系统
- 多核主存数据库
1.3 数据库系统的目标
Purpose of Database
早期,应用程序是直接构建在文件系统之上的
使用文件系统来存储和操作数据有几个缺点
使用文件系统的缺点:
- 不同文件中的数据冗余和不一致信息重复
- 访问数据困难
- 需要编写一个新的程序来执行每一项新的任务
- 数据隔离——多个文件和格式
-
完整性问题
- 完整性约束(如账户余额>0)会“隐藏”在程序代码中,而不是明确声明
- 很难添加新的约束或更改现有的约束
-
更新的原子性
- 故障可能会使数据处于不一致的状态,并执行部分更新
- 从一个账户到另一个账户的资金转移要么完成,要么根本不发生
- 多个用户并发访问
- 性能需要并发访问
- 不受控制的并发访问可能导致不一致
- 两个人同时阅读平衡并更新它
- 安全问题
- 很难为用户提供对部分数据的访问,但不是全部数据
数据库系统提供方案来解决以上的问题。
大学数据库例子
University Database Example
在本文中,我们将使用一个大学数据库来说明所有的概念。
数据包括以下信息
- 学生
- 教员
- 班级
应用程序示例 :
- 添加新的学生、教员和课程
- 为学生注册课程,并生成班级名册
- 为学生分配成绩、计算平均绩点(GPA)并生成成绩单
Data Models
用于描述的工具集合:
- 数据
- 数据关系
- 数据语义
- 数据约束
提供了一种方法来描述数据库在物理、逻辑和视图级别的设计。
关系模型
实体-关系数据模型
- 主要用于数据库设计
基于对象的数据模型
- 面向对象
- 对象关系
半结构化数据模型
- XML
其他老型号:
- 网络模型
- 分层数据模型
Relational Model
使用表集合来表示数据和这些数据之间的关系。
A Sample Relational Database
The Entity-Relationship Model
将企业建模为实体和关系的集合。
实体 Entity:一个现实世界中可区别于其他物体的“事物”或“物体”。
-
由一组**属性 attribute **描述
Each department, instructor
department: dept_name, building, budget
instructor: name, dept_name, ID, salary
关系 Relationship:一个在几个实体之间的关联
一个成员关系将一个指导员与她的部门联系在一起
实体集 Entity Set:同一类型的所有实体的集合
关系集 Relationship Set:同一类型的所有关系的集合
1.4 数据视图
View of Data
数据库系统提供数据的抽象视图 abstraction view
- 隐藏数据存储和维护方式的某些复杂细节
- 通过几个抽象级别实现
- 物理级别
- 逻辑级别
- 视图级别
Level of Abstraction
物理级别 Physical level:
- 描述记录(例如,教员)的存储方式
逻辑级别 Logical level:
-
描述存储在数据库中的数据,以及数据之间的关系。
type instructor = record ID : string; name : string; dept_name : string; salary: integer; end;
视图级别 View level:
- 应用程序隐藏数据类型的详细信息。视图还可以出于安全目的隐藏信息(如员工的工资)。
Instances and Schemas
类似于编程语言中的类型和变量。
模式 Schema——数据库的总体设计
- 类似于程序中变量的类型信息
实例 Instance——在某个特定时间点存储在数据库中的信息的集合
- 类似于一个变量的值
DBS 的几种模式
- 物理模式 Physical schema:物理级别的数据库设计
- 逻辑架构 Logical schema:逻辑级的数据库设计
- 子模式 Sub schema:在视图级别描述不同的视图
Physical Data Independence
物理数据独立性 Physical Data Independence——在不改变逻辑模式的情况下修改物理模式的能力
- 应用程序依赖于逻辑架构
- 一般来说,各个层次和组成部分之间的接口应该被很好地定义,以便某些部分的变化不会严重影响其他部分。
1.5 数据库语言
Database Language
数据库系统提供了:
- 数据定义语言 Data Definition Language(DDL)来指定数据库架构
- 数据操作语言 Data Mainpulation Language(DML)来表示数据库查询和更新
实际上,DDL和DML构成单一数据库语言的组成部分
- SQL(结构化查询语言 Structured Query Language)
Data Definition Language(DDL)
定义数据库模式的规范符号。
DDL 编译器根据 DDL 语句生成表,并将这些表的模式定义存储在数据字典 data dictionary中。
数据字典包含元数据(即关于数据的数据)
- 数据库模式
- 完整性约束
- 主要关键字(唯一标识教师的ID)
- 授权
- 谁可以访问什么
Data Mainpulation Language(DML)
访问和操作由适当的数据模型组织的数据的语言
- 信息检索
- 插入新信息
- 删除信息
- 修改信息
DML 也称为查询语言 query language
两类语言(DDL & DML):
- 过程 Procedural——用户指定需要哪些数据以及如何获取这些数据
- 声明性(非过程性) Declarative (nonprocedural)——用户指定所需的数据,而不指定如何获取这些数据
SQL 是使用最广泛的非过程查询语言。
SQL Query Language
SQL查询语言是非过程性的。一个查询接受几个表(可能只有一个)作为输入,并且总是返回一个表。
在 Comp. Sci. 部门中查找所有教员的示例:
select name
from instructor
where dept_name = 'Comp. Sci.'
SQL 不是图灵机的等价语言。
为了能够计算复杂的函数,SQL通常嵌入到一些高级语言中。
应用程序访问数据库一般是通过其中一个:
- 允许嵌入式 SQL 的语言扩展
- 允许将 SQL 查询发送到数据库应用程序接口(例如ODBC/JDBC)
Database Access from Application Program
非过程查询语言(如SQL)不如通用图灵机功能强大。
SQL 不支持用户输入、显示输出或网络通信等操作。
这种计算和操作必须用宿主语言 host language 编写,如C/C++、Java或Python,并嵌入访问数据库中数据的SQL查询。
应用程序 Application programs——是用来以这种方式与数据库交互的程序。
1.6 数据库设计
Data Design
设计数据库的一般结构的过程:
- 逻辑设计 Logical Design一一决定数据库模式。数据库设计要求我们找到一个“好的”关系模式集合。
- 业务决策——我们应该在数据库中记录哪些属性?
- 计算机科学决策——我们应该有什么样的关系模式,以及属性应该如何分布在不同的关系模式之间?
- 物理设计 Physical——决定数据库的物理布局
1.7 数据库引擎
Database Engine
数据库系统被划分为处理整个系统的每一个职责的模块。
数据库系统的功能组件可以分为:
- 存储管理器
- 查询处理器组件
- 事务管理组件
Storage Management
数据库数据通常存储在辅助内存(硬盘)上,使用文件系统
存储管理器 Storage Manager是一个程序模块,负责
- 与文件系统交互
- 数据的高效存储、检索和更新
存储管理器包括以下组件:
- 授权和完整性管理器
- 事务管理器
- 文件管理器
- 缓冲区管理器
授权和完整性管理器 Authorization and integrity manager
- 测试完整性约束的满足程度,并检查用户访问数据的权限
事务管理器 Transaction manager
- 确保数据库在系统故障时仍保持一致的状态
- 确保并发事务执行在没有冲突的情况下进行
文件管理器 File manager
- 分配磁盘存储空间
- 管理用于表示存储在磁盘上的信息的数据结构
缓冲区管理器 Buffer manager
- 将数据从磁盘存储器提取到主存储器
- 决定在主存中缓存哪些数据
存储管理器实现以下数据结构:
- 数据文件 Data File:存储数据库本身
- 数据字典 Data Dictionary:存储有关数据库结构的元数据,特别是数据库的模式
- 索引 Indices:提供对具有特定值的数据项的快速访问
Query Processing
DBS 的主要目的之一是简化和方便访问数据。
DBS 实现这一目标,通过:
- 数据抽象
- 非程序语言
查询处理器 Query Processor 在逻辑层将用非过程语言编写的更新和查询翻译成物理层的有效操作序列。
查询处理器组件 components 包括:
- DDL 解释器 DDL interprets——解释 DDL 语句并在数据字典中记录定义。
- DML 编译器 DML compiler——将查询语言中的 DML 语句转换为由查询计算引警可理解的低级指令组成的计算计划。
- DML编译器执行查询优化。也就是说,它从各种备选方案中挑选成本最低的评估计划。
- 查询评估引擎 Query evaluation engine——执行由 DML 编译器生成的低级指令。
评估给定查询的替代方法:
- 等价表达式
- 每个操作的不同算法
评估查询的好方法和坏方法之间的成本差异可能是巨大的。
需要估算运营成本:
- 关键取决于数据库必须维护的关系的统计信息
- 需要估计中间结果的统计量以计算复杂表达式的成本
查询处理的步骤:
- 解析与翻译 Parsing and translation
- 最佳化 Optimization
- 评价 Evaluation
Transaction Management
事务 transaction是在数据库应用程序中执行单个逻辑函数的操作集合。
事务管理组件 Transaction-management component 确保数据库保持一致(正确)的状态,尽管系统故障(如电源故障和操作系统崩溃)和事务失败。
并发控制管理器 Concurrency-control manager控制并发事务之间的交互,保证数据库的一致性。
1.8 数据库体系结构
Database Architecture
集中式数据库 Centralized databases
- 一个到几个核心,共享内存
客户端-服务器 Client-server
- 一台服务器机器代表多台客户机执行工作。
并行数据库 Parallel databases
- 多核心共享内存
- 共享磁盘
- 什么都不分享
分布式数据库 Distributed databases
- 地域分布
- 模式/数据异质性
Database Applications
数据库应用程序通常被划分为两个或三个部分。
两层体系结构 Two-tier architecture——应用程序驻留在客户机上,在服务器上调用数据库系统功能。
三层体系结构 Three-tier architecture——客户机充当前端,不包含任何直接的数据库调用。
- 客户端通常通过表单接口与应用服务器通信。
- 应用服务器反过来与数据库系统通信以访问数据。
1.9 数据库用户和管理员
Database Users
用户的区别在于他们期望与系统交互的方式。
应用程序员 Application programmers——通过 DML 调用与系统交互
高级用户 Sophisticated users——数据库查询语言中表单请求
专门的用户 Specialized users——编写专门的数据库应用程序,不适合传统的数据处理框架
初级用户 Naive users——调用以前编写的永久应用程序之一
- 例如,通过网络访问数据库的人、银行出纳员、文员
Database Administrators
数据库管理员 Database Administrator —> DBA
- 对数据库系统有中央控制权的人,协调数据库系统的所有活动
- 对企业的信息资源和需求有很好的了解
数据库管理员的职责 duties 包括:
- 模式定义
- 存储结构和访问方法定义
- 授予用户访问数据库的权限
- 指定完整性约束
- 充当与用户的联络人
- 监测执行情况并对要求的变化作出反应
Overall System Structure
系统总体结构