Loading... # 数据库原理 > 数据库系统概论(第五版) [TOC] # 1 绪论 ## 1.1 数据库系统概论 ### 1.1.1 数据库的4个基本概念 1. 数据 描述事物的符号记录称为**记录**。 2. 数据库 **数据库**是长期储存在计算机内、有组织的、可共享的大量数据的集合。 3. 数据库管理系统 数据库管理系统是位于用户与操作系统之间的一层数据管理软件。 4. 数据库系统 数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。 ### 1.1.2 数据管理技术的产生和发展 | | 人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | | ---------------- | ------------------------ | -------------------------- | ------------------------------------------------------------ | | 应用背景 | 科学计算 | 科学计算、数据管理 | 大规模数据管理 | | 硬件背景 | 无直接存取存储设备 | 磁盘、磁鼓 | 大容量磁盘、磁盘阵列 | | 软件背景 | 没有操作系统 | 有文件系统 | 有数据库管理系统 | | 处理方式 | 批处理 | 联机实时处理、批处理 | 联机实时处理、分布处理、批处理 | | 数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 | | 数据面向的对象 | 某一应用程序 | 某一应用 | 现实世界(一个部门、企业、跨国组织等) | | 数据的共享程度 | 无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 | | 数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 | | 数据的结构化 | 无结构 | 记录内有结构、整体无结构 | 整体结构化,用数据模型描述 | | 数据控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力 | - 数据库系统阶段 优点:从文件系统到数据库系统标志着数据管理技术的飞跃 ### 1.1.3 数据库系统的特点 1. 数据库**结构化** 2. 数据的**共享性高**、**冗余度低**企鹅易扩充 3. 数据**独立性高** - 物理独立性:用户的应用程序与数据库中数据的物理存储是相互独立的 - 逻辑独立性:用户的应用程序与数据库的逻辑结构是相互独立的 4. 数据由数据库管理系统**统一管理和控制** ## 1.2 数据模型 ### 1.2.1 两类数据模型 1. 概念模型 2. 逻辑模型和物理模型 ### 1.2.2 概念模型 - 信息世界中的基本概念 1. 实体 2. 属性 3. 码 4. 实体型 5. 实体集 6. 联系 - 一种表示方法 实体-联系方法(E-R方法) ### 1.2.3 数据模型的组成要素 1. 数据结构 描述数据库的组成对象以及对象之间的联系 2. 数据操作 对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则 3. 数据的完整性约束条件 数据的完整性约束条件是一组完整性规则 ### 1.2.4 常用的数据模型 - **层次模型** ```mermaid graph TD A(R1 根结点) --> B(R2) A --> C(R3 叶结点) B --> D(R4 叶结点) B --> E(R5 叶结点) ``` 层次模型像一棵倒立的树,结点的双亲是唯一的。 - **网状模型** ```mermaid graph TD R1 --> |L2| R3 R1 --> |L1| R4 R2 --> |L3| R3 R4--> |L5| R5 R3--> |L4| R5 ``` 层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一 - **关系模型** | 学号 | 姓名 | 年龄 | 性别 | 系名 | 年级 | | --------- | -------- | ------ | ------ | -------- | ------ | | 2013004 | 王小明 | 19 | 男 | 社会学 | 2013 | | 2013005 | 黄大鹏 | 20 | 女 | 商品学 | 2013 | | 2013006 | 张文博 | 18 | 男 | 法律 | 2013 | - 关系:一个关系对应通常说的一张表 - 元组:表中的一行 - 属性:表中的一列 - 码:码键。表中的某个属性组 - 域:域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。 - 分量:元组中的一个属性值 - 关系模式 $$ 关系名(属性1,属性2,···,属性n) $$ 关系模式要求关系必须是规范化的,关系的每一个分量必须是一个不可分的数据项 - 面向对象数据模型 - 对象关系数据模型 - 半结构化数据模型 ## 1.3 数据库系统的结构 ### 1.3.1 数据库系统模式的概念 ![image-20220609155243892](https://snz04pap001files.storage.live.com/y4mweaR8-fjyuEZP2MwcESgxUHpncys5Gor3wAf6Qrovy80rsfjypbDLqdn01wbLPa5LPXG4sacP192gW5y8Z3S588S_nsAZon9Kk7S08YJ59t4jhcQJToMc1tzjX8E7lMk0-vx4Jy5lY2wEMDAJZHD9w0OMch9WuJFGeHwEvU91_erYSIdTDuAi6nsSV6QZsf4?width=772&height=615&cropmode=none) 模式是相对稳定的,而实例是相对变动的 ### 1.3.2 三级模式结构 1. 模式 模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图 2. 外模式 外模式也称子模式或用户模式,塔式数据库用户能够看见和适用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图 3. 内模式 内模式也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。 ### 1.3.3 数据库的二级映像功能与数据独立性 1. 外模式/模式映像 当模式改变时,由数据库管理员对各个外模式、模式的映像作相应改变,可以使外模式保持不变,保证数据和程序的逻辑独立性。 2. 模式/内模式映像 当数据的存储结构改变时,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,保证了数据和程序的物理独立性。 ## 1.4 数据库系统的组成 数据库系统一般由数据库、数据库管理系统、应用程序和数据库管理员构成 数据库管理员(DBA)的职责 1. 决定数据库中的信息内容和结构 2. 决定数据库的存储结构和存取策略 3. 定义数据的安全性要求和完整性约束条件 4. 监控数据库的使用和运行 5. 数据库的改进和重组、重构 # 2 关系数据库 ## 2.1 关系数据库结构及形式化定义 1. 域:一组具有相同数据类型的值的集合 2. 笛卡尔积(课本p38-39) 3. 关系 - 候选码:若关系的某一个属性组的值能标识一个元组,而其自己不能,则称改属性组为候选码 - 若一个关系有多个候选码,则选定其中一个作为主码 - 候选码的诸属性称为**主属性**,不包含在任何候选码的属性称为**非主属性** - 三种类型:基本关系、查询表、视图表 - 基本关系的6条性质: 1. 列是同质的 2. 不同的列可出自同一个域 3. 列的顺序无所谓 4. 任意两个元组的候选码不能取相同的值 - 关系的每一个分量必须是一个不可分的数据项 ## 2.2 关系操作 5种基本操作:选择、投影、并、交、笛卡尔积 ## 2.3 关系的完整性 三类完整性约束:实体完整性、参照完整性、用户定义的完整性 ### 2.3.1 实体完整性 若属性$A$是几本关系$R$的主属性,则$A$不能取空值。 ### 2.3.2 参照完整性 若属性(或属性组)$F$是基本关系$R$的外码,它与基本关系$S$的主码$K_s$,相对应(基本关系$R$和$S$不一定是不同的关系),则对于$R$中每个元组在$F$上的值必须: - 或者取空值($F$的每个属性值均为空值); - 或者等于$S$中某个元组的主码值。 ## 2.4 关系代数 运算对象、运算符、运算结果是运算的三大要素 ### 2.4.1 传统集合运算 1. 并 $$ R\cup S = \{t|t\in{R}\lor{t}\in{S}\} $$ 2. 差 $$ R-S=\{t|t\in{R}\land{t}\notin{S}\} $$ 3. 交 $$ R\cap{S}=\{t|t\in{R}\land{t}\in{S}\} $$ 4. 笛卡尔积 $$ R \times S = \{t_r t_s | t_r \in R \land t_s \in S \} $$ ### 2.4.2 专门的关系运算 1. 选择 $$ \sigma_F(R)=\{ t|t\in R \land F(t) = '真' \} $$ 2. 投影 $$ \Pi_{A}(R) = \{t[A]|t\in R\} $$ 3. 连接 $$ R \infty S= \{t_r t_s| t_r\in R \land t_s \in S \land t_r[A] \theta t_s[B]\} $$ 4. 除运算 $$ R \div S = \{ t_r[X]|t_r\in R \land \Pi_y (S)\subseteq Y_x\} $$ # 3 关系数据库标准语言SQL ## 3.1 SQL概述 ### 3.1.1 SQL的特点 1. 综合统一 2. 高度非过程化 3. 面向集合的操作方式 4. 以同一种语言结构提供多种使用方式 5. 语言简洁、易学易用 ### 3.1.2 SQL的几本概念 关系数据库三级模式 ![image-20220609164132347](https://snz04pap001files.storage.live.com/y4mCo5qJ31izjpDuPtw_MVn7f-LEkvqwQtnK2moY0W1NMLgoPlKPk4oYRfFroDouBaSgamCip_EQgJNBTiUa7GXWpepoPxfo0ewD08nd78YsWGi_BZ5EIycSVlsYFE8b8DbyFty_trTEFRjUpWbSV2L6kQn5zgHciVI-zDLW52M5IF6-f2MjCcdDr-zQfVruJ5x?width=951&height=555&cropmode=none) ## 3.2 SQL查询语句 > 相关的例子可以查看[数据库实验报告](https://www.tutu147.top/index.php/archives/53/),这里总结语法 1. 定义模式 ```sql CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句 >|<授权定义子句>]; ``` 2. 删除模式 ```sql DROP SCHEMA <模式名> <CASCADE|RESTRICT>; ``` 3. 定义基本表 ```sql CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列 级完整性约束条件]]...[,表级完整性约束条件]); ``` 4. 修改基本表 ```sql ALTER TABLE<表名> [ADD[COLUMN]<新列名><数据类型>[完整性约束]] [ADD<表级完整性约束>] [DROP[COLUMN]<列名>[CASCADE|RESTRICT]] [DROP CONSTRAINT<完整性约束名> [RESTRICT|CASCADE]][ALTER COLUMN<列名>< 数据类型>]; ``` 5. 删除基本表 ```sql DROP TABLE<表名> [RESTRICT|CASCADE]; ``` 6. 数据查询 ```sql SELECT [TOP N][ALL|DISTINCT]<目标列表达式>[,<目标列表达式>].. FROM<表名或视图名> [,<表名或视图名>..]|(<SELECT语句>)[AS]<别名> [WHERE<条件表达式>] [GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; ``` - from子句组装来自不同数据源的数据; (先join在on) - where子句基于指定的条件对记录行进行筛选; - group by子句将数据划分为多个分组; - 使用聚集函数进行计算; - 使用having子句筛选分组; - 计算所有的表达式; - select 的字段; - 使用order by对结果集进行排序。 7. where字句常用的查询条件 | 查询条件 | 谓词 | | ---------- | --------------------------------------------- | | 比较 | =,>,<,>=,<=,!=,<>,!>,!<; NOT+上述比较运算符 | | 确定范围 | BETWEEN AND, NOT BETWEEN AND | | 确定集合 | IN, NOT IN | | 字符匹配 | LIKE, NOT LIKE | | 空值 | IS NULL, IS NOT NULL | | 多重条件 | AND, OR, NOT | 8. 聚集函数 | COUNT(*) | 统计元组个数 | | ---------------------------- | -------------------- | | COUNT( [DISTINCT\| ALL ] ) | 统计一列中值的个数 | | SUM( [DISTINCT\| ALL ] ) | 计算一列值的总和 | | AVG( [DISTINCT\| ALL ] ) | 计算一列值的平均值 | | MAX( [DISTINCT\| ALL ] ) | 求一列值中的最大值 | | MIN( [DISTINCT\| ALL ] ) | 求一列值中的最小值 | > WHERE 子句中是不能使用聚集函数作为条件表达式的,请使用HAVING > 9. 连接查询 等值连接 ```sql [<表名1.>]<列名1><比较运算>[<表名2.>]<列名2> [<表名1.>]<列名1>BETWEEN[<表名2.>]<列名2>AND[<表名2.>]<列名3> ``` 自身连接 ```sql SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST.Course,Course SECOND WHERE FIRST.Cpno=SECOND.Cno ``` 外连接 ```sql SELECT A,B,C,D FROM M LEFT OUTER JOIN N ON (M.X=N.X) ``` 10. 嵌套查询 不相关子查询 ```sql SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname='AB') ``` 相关子查询 ```sql SELECT Sno,Cno FROM SC x WHERE Grade >= ( SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno) ``` 11. 带有ANY(SOME)或ALL谓词的子查询 | \>ANY | 大于查询结果中某个值 | | ------- | ---------------------- | | >ALL | 大于查询结果中所有值 | | <ANY | 小于某个值 | | \>ANY | 大于查询结果中某个值 | | <ALL | 小于所有制 | | =ANY | 等于某个值 | 12. EXISTS与NOT EXISTS谓词 带EXISTS谓词的子查询不返回任何数据,只返回逻辑真假 如果子查询中逻辑为真,按子查询中条件查找出值 NOT EXISTS 子查询查询成功,返回false ,查询为空 返回true 否定之否定: ``查询选修了全部课程的学生名字:`` > 通过EXIST/NOT EXIST来实现带全程量词的查询 > ```sql SELECT DISTINCT Sno FROM SC SCX WHERE NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.Sno='201215122' AND NOT EXISTS (SELECT * FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno)) ``` 13. 集合查询 - 并操作`UNICON` - 交操作`INTERSECT` - 差操作`EXCEPT` ## 3.3 SQL数据更新 1. 插入 插入元组 ```sql INSERT INTO<表名>[(<属性列1>[,<属性列2>]...)] VALUES(<常量1>[,<常量2>]...) ``` - INTO子句中没有出现的属性列,取空值。 - INTO子句未指明任何属性列名,插入的元组必须在每个属性列上有值 插入子查询 ```sql INSET INTO <表名>[(<属性列1>[,<属性列2>...])] 子查询 ``` 2. 修改数据 ```sql UPDATE<表名> SET<列名>=<表达式>[,<列名>=<表达式>]... [WHERE<条件>] ``` 如果省略WHERE子句,则表示要修改表中的所有元组 3. 删除数据 ```sql DELETE FROM <表名> [WHERE<条件>] ``` ## 3.4 视图 1. 建立视图 ```sql CTEATE VIEW <视图名>[(<列名>[,<列名>]...)] AS <子查询> [WITH CHECK OPTION]//检查是更新操作是否满足为谓词条件 ``` 执行`CREATE VIEW`语句只把视图的定义存入数据字典,不执行`SELECT`语句 2. 删除视图 ```sql DROP VIEW <视图名>[CASCADE] ``` 视图查询与更新和基本表相同 3. 视图的作用: - 视图能简化用户的操作 - 视图使用户能以多种角度看待同一数据 - 视图对重构数据库提供了一定程度的逻辑独立性 - 视图能够对机密数据提供安全保护 - 适当利用视图可以更清晰地表达查询 # 4 数据库安全性控制 ## 4.1 数据库安全性概述 ### 4.1.1 数据库的不安全因素 1. 非授权用户对数据库的恶意存取和破坏 2. 数据库中重要或敏感的数据被泄露 3. 安全环境的脆弱性 ## 4.2 数据库安全性控制 ### 4.2.1 用户身份鉴别 方式: 1. 静态口令鉴别 2. 动态口令鉴别 3. 生物特征鉴别 4. 智能卡鉴别 ### 4.2.2 存取控制 - 数据库安全主要通过数据库系统的存取控制机制实现 - 存取控制只要包括:定义用户权限、合法权限检查 - 两种存取方式:自主存取控制、强制存取控制 ### 4.2.3 授权:授予与回收 1. 授予GRANT语句 ```sql GRANT <权限> [.<权限>]··· ON <对象类型> <对象名> [,<对象类型><对象名>]··· TO <> [,<用户>]··· [WITH GRANT OPTION] ``` 2. 回收REVOKE语句 ```sql REVOKE <权限> [,<权限>]··· ON <对象类型> <对象名> [,<对象类型><对象名>]··· FROM <用户> [,<用户>]···[CASCADE|RESTRICT] ``` ### 4.2.4 数据库角色 1. 角色创建 ```sql CREATE ROLE<角色名> ``` 2. 角色授权 ```sql GRANT<权限>[,<权限>] ON<对象类型>对象名 TO<角色>[,<角色>] ``` 3. 将一个角色授予其他的角色或用户 ```sql GRANT<角色1>[,<角色2>] TO<角色3>[,<用户1>] [WITH ADMIN OPTION] ``` 4. 角色权限的回收 ```sql GRANT<角色1>[,<角色2>] TO<角色3>[,<用户1>] [WITH ADMIN OPTION] ``` # 5 数据库完整性 为维护数据库的完整性,数据库管理系统必须能够实现如下功能 1. 提供定义完整性约束条件的机制 2. 提供完整性检查的方法 3. 进行违约处理 ## 5.1 实体完整性 实体完整性检查,自动检查包括: 1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改 2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改 ## 5.2 参照完整性 参照完整性的检查和违约处理 ![image-20220610160939466](https://snz04pap001files.storage.live.com/y4mpHMkZyzehE8RACQCaV-NRh6Sx3_3gE1fdn1ZxHGG8cxQp89uE-nqOmbHjf_nJRy_iHR0dOGP5KgX7jc4WqJDohS-aW6QEMuqGlRsHgyQIULsp6rFeyy-qauclJzJ6JtSCeoI7sYrWN6aFmKQSMmbjk3Dk0SHWPCwZTJTrLNABGd91Yo2iYIi-RMv3mlGQ23z?width=1216&height=338&cropmode=none) 出现不一致,系统可以采用以下策略加以处理: 1. 拒绝执行 2. 联级操作 3. 设置为空置 ## 5.3 用户定义的完整性 属性上约束条件的定义(不满足条件则拒绝执行) - 列值非空 - 列值唯一 - 检查列值是否满足一个条件表达式 ## 5.4 完整性约束命名子句 ```sql CONSTRAINT<完整性约束条件名><完整性约束条件> ``` # 6 关系数据库理论 ## 6.1 问题的提出 - 最重要的数据依赖: 函数依赖和多值依赖 - 关系模式可能存在的问题 1. 数据冗余 2. 更新异常 3. 插入异常 4. 删除异常 ## 6.2 规范化 1. 规范化:一个低一级番是的关系模式通过**模式分解**可以转换为若干个高一级的关系模式的集合,这个过程就叫规范化 2. 第一范式:每个分量必须是不可分的数据项 3. 2NF:每一个非主属性完全依赖于任何一个候选码 4. 3NF:每一个非主属性不传递依赖于码 5. BCNF:每一个决定因素都包含码 - 所有非主属性对每一个码都完全函数依赖 - 所有主属性对每一个不包含它的码也是完全函数依赖 - 没有任何属性完全函数依赖于非码的任何一组属性 6. 模式设计原则:一事一地 # 7 数据库设计 ## 7.1 数据库设计概述 ### 7.1.1 数据库设计的特点 数据库建设的基本规律: 1. 三分技术,七分管理,十二分基础数据 2. 结构设计和行为设计相结合 ### 7.1.2 数据设计的基本步骤 数据库的设计分为了6个阶段 1. 需求分析 2. 概念结构设计 3. 逻辑结构设计 4. 物理结构设计 5. 数据库实施 6. 数据库运行和维护 ![image-20220610162947074](https://snz04pap001files.storage.live.com/y4mjDYdCTB3BhhM8jmU_ok-oQshrp2M7_1tel_SxRGp8NC_gJK0yBnxkAOk6Q_WtyV2u-JBnNZNls1u5PXx2PsnCCVCoqAvrqubDUO0I8wFD-QtnBBzbrxIPw-HKr6cn7WojrEp7jt5ICZIYzKljCJ_tIrahzv_Zqwm5-pBQgBW13D8MoiBJ_aTH0qFloRXaVO7?width=675&height=1206&cropmode=none) ## 7.2 需求分析 数据字典:数据项、数据结构、数据流、数据存储、处理过程 ## 7.3 概念结构设计 - 概念模型的主要特点是: 1. 能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。 2. 易于理解,可以用它和不熟悉计算机的用户交换意见。用户的积极参与是数据库设计成功的关键。 3. 易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充。 4. 易于向关系、网状、层次等各种数据模型转换。 - 实体与属性的划分原则 实体不能再具有需要描述的性质、属性不能与其他实体具有联系 - E-R图之间的冲突 属性冲突、命名冲突、结构冲突 - E-R图转换为关系模式的一般原则 一个实体型转换为一个关系模式,关系的属性就是实体的属性,关系的码就是实体的码。 # 10 数据库恢复技术 ## 10.1 事务的基本概念 1. 事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全部做,是一个不可分割的工作单位 2. 事务的ACID特性:原子性、一致性、隔离性、持续性 3. 事务也是恢复和并发控制的基本单位 ## 10.2 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 ## 10.3 恢复的实现技术 1. 数据库恢复的基本原理:冗余 2. 建立冗余的常用技术:数据转出和登记日志文件 3. 转储:静态转储(系统无运行事务时的转储操作)、动态转储(转储期间允许对数据库进行存取或修改)、海量转储(每次转储全部数据库)、增量转储(每次只转储上一次转储后更新过的数据)。 4. 登记日志的规则 - 登记的次序严格按并发事务执行的时间次序。 - 必须先写日志文件后写数据库 ## 10.4 恢复策略 - 事务故障 1. 反向扫描日志文件 2. 对该事务的更新操作执行逆操作 3. 继续反向扫描日志文件 4. 如此处理下去,直至读到此事务的开始标志 - 系统故障 1. 正向扫描日志文件 2. 对撤销队列中的各个事务进行撤销(UNDO)操作 3. 对重做队列中的各个事务进行重做处理 - 介质故障 1. 装入最新的数据库后备副本 2. 装入相应的日志日志文件副本,重做已完成的事务 # 11 并发控制 1. 并发操作带来的数据不一致包括:丢失修改、不可重复读、读脏数据 2. 并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制 3. 封锁的基本类型:排他锁X锁、共享锁S锁 4. X锁只允许T读取和修改,其他任何事务不能再加任何类型的锁 S锁可以读但不能修改,其他事务只能再加S锁,不能加X锁 5. 三级封锁协议: 一级:事务T在修改数据R前必须加X锁,直到事务结束才释放 二级:在一级封锁协议的基础上增加事务T在读取数据R之前必须先加S锁,读完后即可释放S锁 三级:在一级封锁协议的基础上增加事务T在读取数据R之前必须对其增加S锁,直到事务结束才释放。 6. 活锁:出现永远等待的情形 死锁:事务永远不能结束。 最后修改:2022 年 06 月 11 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏