2020年1月5日Coding3206 字约 21 分钟


数据库原理与应用

第一章 数据库系统概论

数据与数据管理

数据:描述事物的符号记录。

数据管理:对数据进行有效的分类、组织、编码、存储、检索、维护和应用——数据处理的中心问题。

数据库管理系统:由一个相互关联的数据的集合和一组用以访问、管理和控制这些数据的组成。

数据库:数据的集合。

数据模型:描述一个数据结构、数据操作、以及数据约束的数学形式。

  • 概念模型(信息模型):概念层次的数据模型。
  • 逻辑模型:用来描述数据库数据的整体逻辑结构,也是现实世界的第二层抽象。
  • 物理模型:用来描述数据的物理存储结构和存取方法。

数据结构:描述数据库的组成对象(实体)以及对象之间的关系。

数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及有关的操作规则。它是对系统动态特性的描述。

数据完整性规则:数据、数据语义和数据联系所具有的制约和一村规则,包括数据结构完整性规则和数据操作完整性规则。用以限定负荷数据模型的数据库状态以及状态的比,以保证数据的正确、有效和相容。

数据完整性约束:一组数据完整性规则。

数据库技术的产生与发展

人工管理阶段

文件系统阶段

特点

  • 实现了文件内的数据结构性
  • 应用程序与数据之间有了一定的物理独立性

问题

  • 数据共享性差,数据冗余和不一致
  • 数据独立性差
  • 数据孤立,数据获取困难
  • 完整性问题
  • 原子性问题
  • 并发访问异常
  • 安全性问题

数据库管理系统阶段

特点

  • 数据结构化
  • 数据共享度高,冗余度低,易扩充
  • 数据独立性高
    • 物理独立性
    • 逻辑独立性
  • 数据由数据库管理系统统一管理和控制
    • 数据的安全性保护
    • 数据的完整性保护
    • 并发控制
    • 数据库的恢复

关系模型

由一组关系构成,每个关系的数据结构是一张规范化的二维表。

常用术语

关系(relation):一个关系对应一张二维表,每一个关系有一个名称,即关系名;

元组(tuple):表中的一行称为一个元组;

属性(attribute):表中的一列称为一个属性,每一个属性有一个名称,即属性名;

码(key):也称为码键。表中的某个属性或属性组,它可以唯一地确定关系中的一个元组,如关系Student中的学号,它可以唯一地标识一个学生 ;

域(domain):属性的取值范围;

分量(component):元组中的一个属性值;

外码(foreign key):表中的某个属性或属性组,用来描述本关系中的元组(实体)与另一关系中的元组(实体)之间的联系

  • 外码的取值范围对应于另一个关系的码的取值范围的子集
  • 如关系Score中的学号,它描述了关系Score与关系Student的联系(即哪个学生选修了课程),因此学号是关系Score的外码
  • 同理,课程号也是关系Score的外码,它描述了关系Score与关系Course的联系(即哪门课程被学生选修了)

关系模式(relational schema):通过关系名和属性名列表对关系进行描述,即二维表的表头部分(表格的描述部分)

规范条件

关系的每一个元组必须是可区分的,即存在码属性。

关系的每一个属性(即元组的分量)必须是一个不可分的数据项,即不允许表中有表。

关系数据模型的操作

主要包括查询更新插入、删除修改)。

完整性约束

基本概念

候选码: 一个或一组属性能唯一地标识一个元组,而其子集不能

主码: 若有多个候选码.则选其中一个为主码

外键(外码): 一个表中一个(多个)属性,不是自身的主码,且这个属性和另一个表中的主码属性是同一个属性,则这个(组)属性称为外码

实体完整性:主码不能重复,主码不能为空

参照完整性:外键不能为空(或者均为空值)外键等于被参照表的主码值

用户自定义完整性:用户自定义的完整性约束条件

优点

  • 严格的数学基础:有关系代数作为语言模型,有关系数据理论作为理论基础
  • 概念单一:无论实体还是实体之间的联系都是用关系来表示,对数据(关系)的操作(查询和更新)结果还是关系。所以其数据结构简单、清晰,用户易懂易用
  • 存取路径透明:具有更高的数据独立性、更好的安全保密性,简化了程序员的工作,提高了软件的开发和维护效率

缺点

  • 由于存取路径对用户透明,查询效率往往不如非关系数据模型
  • 为了提高性能,DBMS必须对用户的查询请求进行查询优化,这样就增加了DBMS的开发难度

数据抽象

DBMS

隐藏关于数据存储和维护的某些细节,为用户提供数据在不同层次上的视图,即数据抽象,方便不同的使用者可以从不同的角度去观察和利用数据库中的数据

物理层抽象

最低层次的抽象,描述数据实际上是怎样存储的

逻辑层抽象

描述数据库中存储什么数据以及这些数据之间存在什么关系。

提供给数据库管理员和数据库应用开发人员使用的,他们必须明确知道数据库中应该保存哪些信息 。

视图层抽象

最高层次的抽象,只描述整个数据库的某个部分。

系统可以为同一数据库提供多个视图,每一个视图对应一个具体的应用,亦称为应用视图 。

数据库的三级模式

模式

也称为逻辑模式,对应于逻辑层数据抽象,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

模式的一个具体值称为模式的一个实例(instance)。

它是DBMS模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。

外模式

也称子模式用户模式,对应于视图层数据抽象。

是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一具体应用有关的数据的逻辑表示。

外模式是保证数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的 。

内模式

也称存储模式,对应于物理层数据抽象,它是数据的物理结构和存储方式的描述,是数据在数据库内部的表示方式。

数据库的两层映像功能与数据独立性

外模式/模式映像

对应于一个模式可以有多个外模式。对于每一个外模式,数据库管理系统都有一个模式/外模式映像,它定义了该外模式与模式之间的对应关系
在各自的外模式描述中定义外模式/模式映像
保证了数据与应用程序的逻辑独立性,简称为数据的逻辑独立性

模式/内模式映像

数据库中只有一个模式,也只有一个内模式,模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系
在模式描述中定义模式/内模式映像
保证了数据与应用程序的物理独立性,简称为数据的物理独立性

数据库管理系统——DBMS

数据库管理系统(DBMS)是一组软件,负责数据库的存取、维护和管理。

功能

数据定义:DBMS提供数据定义语言(DDL)。

数据组织、存储和管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等 。

数据操纵:DBMS还提供数据操纵语言(DML) 。

数据库的事务管理和运行管理:数据库在建立、运行和维护时由DBMS统一管理、统一控制,以保证数据的安全性、完整性(一致性),以及多用户对数据并发操作时的数据库正确性(称为并发控制)和系统发生故障后的数据库正确性(称为恢复与备份) 。

数据库的建立和维护

其他功能

组成

查询处理器:对用户请求的SQL操作进行查询优化,从而找到一个最优的执行策略,然后向存储管理器发出命令,使其执行。

存储管理器:根据执行策略,从数据库中获取相应的数据,或更新数据库中相应的数据。

事务管理器:负责保证系统的完整性,保证多个同时运行的事务不发生冲突操作,以及保证当系统发生故障时数据不会丢失 。

开发、管理和使用数据库系统的人员:

  • 数据库管理员
  • 系统分析员
  • 数据库设计人员
  • 应用程序员
  • 最终用户
数据库管理员的主要职责
  • 决定数据库中的信息内容和结构
  • 决定数据库的存储结构和存取策略
  • 定义数据的安全性要求和完整性约束条件
  • 监控数据库的使用和运行
  • 数据库的改进和重组重构

第三章 SQL

数据库

1
2
3
4
5
-- 创建数据库
create database demo;

-- 删除数据库
drop database demo;

数据表

1
2
3
4
5
6
7
-- 创建数据表
create table student (
id char(10) not null,
name varchar(50) not null,
sex char(2) check(sex = '男' or sex = '女'),
birthday datetime check(birthday between '1900-01-01' and getdate())
)

查询

1
2
3
4
5
select [distinct] * from table_name where some_column = some_value
/*
* distinct —— 消除重复数据
* where —— 限制查询条件
*/

插入

1
2
3
4
5
-- 不指定列
insert into table_name values (value1, value2)

-- 指定列
insert into table_name (colunm1, column2) values (value1, value2)

修改

1
2
update table_name set column1 = value1, column2 = value2
where some_column = some_value

删除

1
delete from table_name where some_column = some_value

第十章 事务管理与恢复

事务

事务是具有完整逻辑意义的数据库操作序列的集合。

特性:

  • 原子性:事物的所有操作要么全部执行,要么全部不执行。
  • 一致性:总是将数据库从一个一致性状态转化到另一个一致性状态。
  • 隔离性:并发执行的各个事务不能互相干扰。
  • 持久性:一个事务成功提交后,他对数据库的改变必须是永久的。

事务并发可能会出现 3种 不一致性:不可重复读读脏数据丢失更新

基本锁

共享锁(S锁)

又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排它锁(X锁)

又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

特点

共享锁与排它锁不相容。

排它锁与排它锁不相容。