数据库原理期末考试复习

基础知识

关系代数

关系代数就是:一种抽象的查询语言用对关系的运算来表达查询

关系看上去像一张二维表,每个表由行和列组成

行代表一个元组,即数据记录。列代表属性,即字段

关系的域为一组原子值(不可再分割的值)

关系中的元组必须各不相同(元组的唯一性)

符号表示

元组 t 与 t[Ai] :

t 就是一行数据,t[Ai] 就是这一行中某一列的值。

假设表 R 结构是:

学号 姓名 年龄
101 张三 20
  • 这一行是一个元组 t。
  • t[学号] = 101t[姓名] = 张三t[年龄] = 20

属性组 A、t[A]、Ā :

表 R:

学号 姓名 年龄 班级
101 张三 20 A1
  • 如果我们说 A = {学号, 姓名},那:
    • t[A] = (101, 张三)
    • Ā = {年龄, 班级}

元组连接 tr ⨝ ts :

表 R(学生):

学号 姓名
101 张三

表 S(成绩):

课程 成绩
数学 95

tr ∈ Rts ∈ S 连接(拼接)起来:

→ 结果元组为:

学号 姓名 课程 成绩
101 张三 数学 95

象集 Zx:

表 R:

班级 姓名 成绩
A1 张三 90
A1 李四 85
B1 王五 88
  • X = {班级},Z = {姓名}
  • 那么 A1 班的象集 Zx 是:

Zx = {张三, 李四}

意思是:在班级是 A1 时,姓名有哪些?这就是象集。

五种基本运算

并,差,笛卡尔积,选择,投影

关系代数是用对关系的运算来表达查询,这个时候可以使用关系代数解释器来模拟关系代数。

其中否定操作要使用差的形式

运算符

并运算将两个关系的所有元组合并为一个新关系,前提是两个关系必须有相同的属性(列),且每个元组在结果中只出现一次(去重)。

R1(A, B)

A B
1 2
3 4

R2(A, B)

A B
5 6
3 4

R1 ∪ R2 的结果是:s

A B
1 2
3 4
5 6

相当于增加行

运算符-

差运算返回一个关系中有而另一个关系中没有的元组,前提是两个关系有相同的属性。

R1(A, B)

A B
1 2
3 4

R2(A, B)

A B
3 4
5 6

R1 - R2 的结果是:

A B
1 2

相当于删减行

笛卡尔积

运算符×

笛卡尔积运算将两个关系中的每一对元组组合成一个新的元组,其中一个关系的所有元组与另一个关系的每个元组组合形成一个新的元组。它的结果是一个新关系,包含了两个关系中所有属性的组合

两个集合相乘的结果

R1(A, B)

A B
1 2
3 4

R2(C, D)

C D
5 6
7 8

R1 × R2 的结果是:

A B C D
1 2 5 6
1 2 7 8
3 4 5 6
3 4 7 8

相当于增加列

选择

运算符σ

选择运算用于从关系中选择满足特定条件的元组。选择操作是一种过滤操作,它根据指定的条件返回满足条件的元组。

R(A, B)

A B
1 2
3 4
5 6
7 8

σ(A > 4)(R) 的结果是:

A B
5 6
7 8

相当于过滤

投影

运算符π

投影运算用于从关系中选择指定的列(属性)。它会返回包含指定列的所有元组,并且会去除重复的元组

R(A, B, C)

A B C
1 2 3
4 5 6
7 8 9

π(A, B)(R) 的结果是:

A B
1 2
4 5
7 8

相当于删减列

连接

运算符

连接是将两个关系中的元组按照某些共享的属性进行组合,生成新的元组。它是关系代数中非常重要的运算,因为它能够合并来自不同表的数据。连接运算通常是基于一个公共的列(或多个列)进行的。

自然连接(Natural Join):在自然连接中,连接操作自动寻找两个关系中相同名称的列,并将它们作为连接条件。自然连接将仅返回匹配的元组,并去除重复的列。相当于内连接

等值连接(Equi-Join):等值连接是指使用等号(=)作为连接条件,将两个关系中某个或某些列的值相等的元组合并。

外连接(Outer Join):外连接除了返回两个关系中匹配的元组外,还会保留在其中一个关系中没有匹配的元组,并用NULL填充缺失的值。外连接有三种类型:

  • 左外连接(Left Outer Join):返回左表中所有元组,以及右表中匹配的元组。右边的补充null
  • 右外连接(Right Outer Join):返回右表中所有元组,以及左表中匹配的元组。左边的补充null
  • 全外连接(Full Outer Join):返回两个表中的所有元组,不论它们是否匹配。都补充null

R1(A, B)

A B
1 2
3 4

R2(B, C)

B C
2 5
4 6

如果我们进行自然连接:R1 ⨝ R2,连接条件是属性B,结果会是:

A B C
1 2 5
3 4 6

运算符÷

除操作用于解决“对于所有”这种类型的查询问题,通常用于查找在某个关系中与所有其他元组匹配的元组。除运算的结果是返回那些“满足某个条件的所有值”的元组。

R1(Student, Course)

Student Course
Alice Math
Alice English
Bob Math
Bob History
Charlie Math

R2(Course)

Course
Math
English

R1 ÷ R2 的结果是:

Student
Alice

相当于找到某值

E-R图

E-R图向关系模型的转换
转换内容
E-R图由实体型、实体的属性和实体型之间的联系三个要素组成
关系模型的逻辑结构是一组关系模式的集合
将E-R图转换为关系模型:将实体型、实体的属性和实体型之间的联系转化为关系模式

元素 说明
实体(Entity) 用矩形表示,转换为一个关系(表)
属性(Attribute) 用椭圆表示,转换为字段(列)
联系(Relationship) 用菱形表示,转换为表或外键,依赖于联系的类型

E-R 图信息:

  • 实体:学生(Student):SID, Name
  • 实体:课程(Course):CID, Title
  • 关系:选修(Takes),多对多,属性:成绩(Grade)

转换关系模型:

1
2
3
Student(SID PRIMARY KEY, Name)
Course(CID PRIMARY KEY, Title)
Takes(SID FOREIGN KEY, CID FOREIGN KEY, Grade, PRIMARY KEY(SID, CID))

在E-R图中,i代表弱实体

sql语句

重点题目

关系代数

做关系代数的题目的时候

投影等于select 需要筛选出来的列,然后选择是去做where的条件的

一般都是先用总的连接起来的大表去除select的小表,然后再进行筛选

关系模式

概念 定义
关系(Relation) 一张二维表,表名表示关系名。
属性(Attribute) 表中的一列,表示一个字段或特征,对应关系模型中的“列”。
元组(Tuple) 表中的一行,表示一个实体或记录,对应关系模型中的“行”。
域(Domain) 每个属性值的取值范围。例如:性别字段的域是 {男, 女},年龄的域是整数 [0, 120]。
主码(Primary Key) 表中唯一标识元组的属性集合,要求唯一且非空。例如:学生表的学号、员工表的工号。

1.关于系、学生、班级、学会等信息的关系数据库设计

关系名 属性
学生 S(SNO, SN, SB, DN, CNO, SA) 学号、姓名、出生年月、系名、班号、宿舍区
班级 C(CNO, CS, DN, CNUM, CDATE) 班号、专业名、系名、人数、入校年份
系 D(DNO, DN, DA, DNUM) 系号、系名、办公室地点、人数
学会 P(PN, DATE1, PA, PNUM) 学会名、成立时间、地点、人数
学生-学会 SP(SNO, PN, DATE2) 学号、学会名、入会年份

有关语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。

极小依赖集:学生表,Sno->Sn,SN,DN

DN->SA CNO->DN

所以传递依赖为Sno->SA

班级表:

CNO->CS,CNUM,CDATE

CS->DN

(CS,CDATE)->CNO

(CS, CDATE) → CNO完全函数依赖

系表:

DNO->DN,DNUM DA DN->DNO

学会表:

PN->确定剩下的那三

学生-学会:

(SNO,PN)->DATE2

2.关系模式R(U,F)中:U= ABCDE, F={AD→BC,B→C }
求:
(1) F的最小函数依赖集
(2) R的候选码
(3)R达到第几范式,为什么?
(4)将其转换为3NF(写明分解后各关系模式的侯选码,外码)

最小依赖集需要满足三点:

  • 每个依赖右边只有一个属性(右部原子化
  • 左部不能约简(左部最小
  • 没有冗余依赖(去冗余

Fmin = { AD → B, B → C }

就是先拆分,然后去掉一个重复的

找出那些属性集的闭包等于全体属性 {A, B, C, D, E}
候选码定义:闭包等于所有属性,且不能再删属性

候选码是 {A, D, E}

感觉这个就是最小依赖集加上那个不在的就是候选码

R 属于第几范式?为什么?:

先列出最小依赖集:Fmin = { AD → B, B → C }

然后看候选码,{A, D, E}

发现最小依赖集里面有个不在候选码的,所以只是符合1NF,1NF就是最小依赖集

分解为 3NF(说明每个子关系的候选码和外键):

也是根据候选码跟最小依赖集决定的

子关系 属性 候选码 外键说明
R1 A, D, B AD AD 是外键指向 R3
R2 B, C B B 是外键指向 R1/R3
R3 A, D, E ADE

就是分开的最小依赖集+候选码

关系 R(A, B, C, D, E) 的函数依赖分析:

是一种 比 3NF 更严格的数据库规范化形式,主要用于消除函数依赖引起的冗余,保证关系模式的设计更加规范。

任何一个决定因素(左部)都必须是超码(是或者包含候选码),否则就不满足 BCNF。

若 A 是候选码,BC → DE,什么条件下 R 是 BCNF?

BC 是(或包含)候选码时,BC → DE 才不违反 BCNF。

如果存在依赖:A-→B,BC-→D,DE->A,列出R的所有码:

闭包:

A⁺ = {A, B}

BC⁺ = {B, C, D}

DE⁺ = {D, E, A, B} (由 DE → A → B)

1
2
BCE⁺ = {B, C, E} → D → A → 全部
ACE⁺ = A → B,C,E,D → 全部

所以候选码有:ACE, BCE, DEC

如果存在依赖:A-→B,BC->D,DE→A,R属手3NF还是BCNF:

A {A B}

BC {B C D}

DE {A B D E}

所有依赖左部(A, BC, DE)都不包含候选码但其右部都为主属性

所有属性均出现在候选码中 ⇒ 都是主属性

数据库安全性

1.什么是数据库的安全性:

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。数据库的安全性指的是防止未经授权的访问与操作,确保数据不会被非法读取、修改、删除或破坏。

2.表结构如下:

学生(学号, 姓名, 年龄, 性别, 家庭住址, 班级号)
班级(班级号, 班级名, 班主任, 班长)

授予用户 U1 对两个表拥有全部权限,并允许其再授权

1
2
3
grant all privileger on 学生 to U1 with grant option;
GRANT ALL PRIVILEGES ON 班级 TO U1 WITH GRANT OPTION;

grant all privileger on 学生 to U1 with grant option

授予用户2

  • 学生表具有查询权限
  • 对字段 家庭住址 具有更新权限
1
2
3
4
5
grant select on 学生 to U2;
grant update(家庭住址) on 学生 to U2;
GRANT SELECT ON 学生 TO U2;
GRANT UPDATE (家庭住址) ON 学生 TO U2;

授予所有用户对班级表的查询权限

1
grant select on 班级 to public;

授予角色 R1 对学生表的查询和更新权限

1
grant select,update on 学生 to R1;

将角色 R1 授予用户 U1,并允许 U1 再授权该角色

1
grant R1 to U1 with admin option;

数据库完整性

1.什么是数据库的完整性

数据库的完整性是指数据的正确性和相容性,正确性、一致性和可靠性。它保证数据库中的数据符合逻辑规则、业务约束。

2.数据库的完整性和数据库的安全性有什么区别和联系?

答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage InGarbageOut)所造成的无效操作和错误结果:后者是保护数据库防止恶意的破坏和非法的

3.有下面的这些消息完成下面的问题:

  1. 职工(职工号,姓名,年龄,职务,工资,部门号)
    • 其中 职工号 为主码
  2. 部门(部门号,名称,经理名,电话)
    • 其中 部门号 为主码

请用 SQL 语言定义这两个关系模式,并在定义中完成以下完整性约束条件

  1. 定义每个关系模式的 主码
  2. 定义 参照完整性约束(即外键约束)
  3. 要求职工的 年龄不得超过60岁
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
crete table dept(
Deptno NUMBER(2) PRIMARY KEY,
Deptname varchar(10),
Deptmannger varchar(10),
DeptPhone char(12)
);
crete table Emp(
EMPno NUMBER(2) PRIMART KEY,
EMPname varchar(10),
EMPage NUMBER(2),
EMPjob varchar(10),
EMPSALE NUMBER(7,2),
DeptNO NUMBER(2),

constartint c1 check (EMPage<=60),
constartint FK_DEPTNO foreign key (deptno) references dept(Deptno)
);

数据库恢复

1.试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?

ACID:

原子性,一致性,隔离性,持久性

原子性:事务的方法要么全部执行,要么全部不执行回滚

一致性:事务操作前后,数据库保持一致性

隔离性:多个事务并发的时候,相互不干扰

持久性:事务一旦提交成功,对数据库的变更就是永久性的,即使系统崩溃也不会丢失。

故障恢复保证了原子性和持久性

2.事务的回滚和重做

已提交事务 → 需要重做(Redo)

未提交事务 → 需要回滚(Undo)

日志序号 内容 事务状态变化
1 T1 开始 T1 active
2 T1 写 A=10
3 T2 开始 T2 active
4 T2 写 B=9
5 T1 写 C=11
6 T1 提交 ✅ T1 committed
7 T2 写 C=13
8 T3 开始 T3 active
9 T3 写 A=8
10 T2 回滚 ❌ T2 aborted
11 T3 写 B=7
12 T4 开始 T4 active
13 T3 提交 ✅ T3 committed
14 T4 写 C=12

回滚就是不提交,提交了才算修改

概念

一、数据库系统的三级模式结构(3分)

  • 外模式(子模式): 用户视图,描述用户可以看到和操作的数据子集。
  • 概念模式: 整个数据库的逻辑结构,对所有用户共享。
  • 内模式: 数据在数据库内部的物理存储方式。

二、关系的三类完整性约束(3分)

  • 实体完整性: 主键不能为空。
  • 参照完整性: 外键取值必须为另一个关系中某主键的值,或为空。
  • 用户定义完整性: 用户根据实际需求定义的其他约束条件(如取值范围、格式等)。

三、存取控制的两种常用方法(4分)

  • 自主存取控制(DAC): 用户拥有并控制自己数据的访问权限。
  • 强制存取控制(MAC): 系统根据策略统一控制访问,用户无法更改。

四、游标的作用(3分)

  • 游标用于逐行处理查询结果,适用于需要逐条处理数据的场景,如分页、逐行更新等。

五、查询优化的两种分类(4分)

  1. 基于规则的优化(规则驱动): 应用一系列优化规则(如选择操作下推、连接重排序)重写 SQL。
  2. 基于代价的优化(代价驱动): 枚举多种执行计划并估算代价,选择最优计划。

六、冲突可串行化调度判断示例

调度:r2(A) w1(B) w2(A) r3(A) wi(B) w3(A) r2(B) w2(B)

  • 通过构建冲突图,若该图无环,则调度是冲突可串行化的

七、关系模式分解与范式问题

问题:关系模式 R(U,F),U={A,B,C,D,E,G},F={BG→C,BD→E,DG→C,ADG→BC,AG→B,B→D},进行 BCNF 分解

  1. 最小函数依赖集:
    • F’ = {BG→C, BD→E, DG→C, AG→B, B→D}(ADG→BC 冗余)
  2. 候选码:AG
  3. 不满足 BCNF 的依赖:BG→C,BD→E,DG→C,B→D
  4. 分解过程:
    • R1(B,G,C)
    • R2(A,B,D,E,G)
    • → R3(B,D,E) + R4(A,B,G)
    • → R5(B,D) + R6(B,E) + R4(A,B,G)
  5. 最终结果:
    • R1(B,G,C)
    • R5(B,D)
    • R6(B,E)
    • R4(A,B,G)

每个子关系都满足 BCNF。