软考复习之数据库篇

本文详细介绍了ER模型的基本概念、绘制方法,以及其转换成关系模式的规则。涵盖了键(码)、函数依赖和不同范式(1NF、2NF、3NF),还涉及了关系代数和元组演算的基本运算,以及SQL语言的应用。通过实例和练习题,帮助读者理解数据模型和关系数据库的设计原则。
摘要由CSDN通过智能技术生成

目录

考点1:ER模型

ER模型的基本概念以及如何绘制ER图

ER模型转换成关系模式的规则

考点2:键(码)、函数依赖及范式

键(码)

 

函数依赖&范式

考点3:关系代数及元组演算

无损分解

关系代数基本运算

元组演算

考点4:SQL语言


 

 推荐阅读:

考点1:ER模型

ER模型的基本概念以及如何绘制ER图

ER模型

b84a06dd73ac44138eb71eed7e17aa0c.png
实体(Entity):客观存在并可相互区别的事物。它是一个具体的对象,可以是具体的人、事、物,也可以是抽象的概念或联系。上图中的学生、课程就是实体。
 
属性(Attribute):实体所具有的特性称为属性,通常一个实体可以由多个属性来描述。上图中学号、姓名、班级号就是学生实体的属性。
 
联系:实体内部的联系通常是指组成实体的各属性间的关系。上图中选课就是学生和课程实体要建立的联系。
  1. 一对一联系(1:1):对于实体集 A 中的每个实体最多只能与实体集 B 中一个实体相关联。那么 A 与 B 就是一对一关联,记作1:1。
  2. 一对多联系(1:N):对于实体集 A 中的每个实体与实体集 B 中任意个(零个或多个)实体相关联,并且实体集 B 中最多只能与实体集 A 中一个实体关联,那么 A 与 B 就是一对多关联,记作1:N。
  3. 多对多联系(N:M):如果实体集 A 中的每个实体都与实体集 B 中任意个(零个或多个)实体相关联,反之亦然,那么 A 与 B 就是一对多关联,记作N:M。

例题1

E-R模型向关系模型转换时,三个实体之间多对多的联系m:n:p应该转换为一个独立的关系模式,且该关系模式的关键字由____组成。

A.多对多联系的属性

B.三个实体的关键字

C.任意一个实体的关键字

D.任意两个实体的关键字

例题2

在某企业的营销管理系统设计阶段,属性“员工”在考勤管理子系统中被称为“员工”,而在档案管理子系统中被称为“职工”,这类冲突称为_____冲突。

A.语义        B.结构        C.属性        D.命名

例题3

E-R图转换为关系模型时,对于实体E1与E2间的多对多联系,应该将_____。

A.E1的码加上联系上的属性并入E2

B.E1的码加上联系上的属性独立构成一个关系模式

C.E2的码加上联系上的属性独立构成一个关系模式

D.E1与E2码加上联系上的属性独立构成一个关系模式

ER模型转换成关系模式的规则

7f7d540b649c4f76af4f6f56436ca9b0.png

考点2:键(码)、函数依赖及范式

重点掌握:

  1. 理解超键、候选键、主键、外键的含义,并掌握如何求解;
  2. 要求能按题目给出的关系描述,准确写出函数依赖;
  3. 理解1NF、2NF、3NF的含义,能判别关系模式属于哪一级范式,并能按要求拆分关系模式使之满足更高一级的范式;
  4. 模式分解部分的,分解的无损连接性,要学会如何无损分解一个关系。

键(码)

超键:在关系模式中,能性标识元组的属性集(超键可以含有多余属性)

候选键(候选码):在关系模式中,能唯一标识元组并且不包含多余属性的属性集

例如:学生(学号,姓名,性别,年龄,专业号)

(学号,姓名)是超键,而不是候选键,(学号)是候选键,同时也是主键。

 

主键:在一个关系的若干个候选键中随意指定一个作为关键字,则此关键字就是主键

外键:如果关系模式 R1 中的某属性集不是 R1 的候选键,而是关系模式R2的候选键,则这个属性集对模式 R1 而言是外键。

例如:请分别指出关系模式学生(学号,姓名,性别,年龄,专业号)专业(专业号,专业名)的主键和外键。

学号是主键,专业号是外键。

专业号是主键,它没有外键。

主属性:候选码中的所有属性都称为主属性

非主属性:不包含在任何候选码中的属性称为非主属性

例如:请指出关系模式成绩(学号,姓名,课程号,成绩)的主属性和非主属性,学生之间无同名情况。

(学号,课程号)和(姓名,课程号)都是候选键

学号,姓名,课程号都是主属性

成绩是非主属性

函数依赖&范式

第一范式(1NF):每一列都是不可分割的原子数据项

第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(码)第12章 面向对象技术(在1NF基础上消除非主属性对主码的部分函数依赖)

函数依赖:A ----> B,如果通过 A 属性(属性组)的值,可以确定唯一 B 属性的值,则称 B 依赖于 A。例如:学号 ----> 姓名 。 (学号,课程名称) ----> 分数

完全函数依赖:A ----> B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值

例如:(学号,课程名称)----> 分数

部分函数依赖:A ----> B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可

例如:(学号,课程名称) ----> 姓名

传递函数依赖:A ----> B,B ----> C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值,可以确定唯一C属性的值,则称C传递函数依赖于A

例如:学号 ----> 系名,系名 ----> 系主任

码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码。例如:下表中码为: (学号,课程名称)

主属性:码属性组中的所有属性

非主属性:除了码属性组的属性

第三范式(3NF):在 2NF 基础上,任何非主属性不依赖于其它非主属性(在 2NF 的基础上消除传递依赖)

遵循1NF表:如下表所示

d39258731a2e4ee6a6435bb521bd0e49.png

1NF存在的问题:

  • 存在非常严重的数据冗余(重复):姓名,系名,系主任
  • 数据添加存在问题:添加新开设的第和第主任时,数据不合法
  • 数据删除存在问题:将张无忌同学生删除后,会将第的数据一起删除

遵循2NF表:如下所示,解决1NF中的数据冗余问题

0084de3a0e49463ebdbdc45d9a70b71f.png

遵循3NF表:如下所示,解决1NF中的所有存在问题

b4866ded49af4eb6bcd3e3e6fb718b22.png

考点3:关系代数及元组演算

无损分解

有损:不能还原

无损:可以还原

无损联接分解:所谓无损联接分解是指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式,即这种分解称为无损联接分解。

假设有关系模式成绩(学号,姓名,课程号,课程名,分数)

函数依赖:学号---》姓名,课程号---》课程名,(学号,课程号)---》分数

若将其分解为:

  • 成绩(学号,课程号,分数)
  • 学生(学号,姓名)
  • 课程(课程号,课程名)

这样分解是无损分解。

 

6879b2481654436fad93f9c61fbfb24d.png

初始化表如下所示:
 ABCDE
ADa1b12b13a4b15
BCb21a2a3b24b25
BEb31a2b33b34a5
CDEb41b42a3a4a5
AEa1b52b53b54a5

 

初始填表规则:

R1 = AD,所以第1行中,A字段填充a1,D字段填充a4(数字根据列号填)

R2 = BC,所以第2行中,B字段填充a2,C字段填充a3

R3 = BE,所以第3行中,B字段填充a2,E字段填充a5

R4 = CDE,所以第4行中,C字段填充a3,D字段填充a4,E字段填充a5

R5 = AE,所以第5行中,A字段填充a1,E字段填充a5

9d276bc65d9d4c509938daa2207db5ec.png

根据依赖填充规则:

X->Y,则先找X字段相同的行,确定行之后就看Y字段,如果Y字段对象的行存在的a(x),那么就把值填充为a(x),如果不对应a(x),则直译结构下标最小的一个(b(x))

b6b78093a7314f7c8fb044c06484147d.png

适用范围:只能用于判断一个关系模式分解成两个关系模式的时候是否是无损分解

关系代数基本运算

关系代数的基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算。假设有两个关系表R和S,R表如下:
AB
a1
b2
c3

S表如下:

AB
b2
d4
e5

并:把两个具有相同属性(列名)的关系(表)合并成一个新的关系,去掉重复的元组(行)。

R ∪ S = {t | t ∈ R 或 t ∈ S}

R ∪ S
AB
a1
b2
c3
d4
e5

交:把两个具有相同属性(列名)的关系(表)中共有的元组(行)选出来,组成一个新的关系。

R ∩ S = {t | t ∈ R 且 t ∈ S}

R ∩ S
AB
b2

差:把一个关系(表)中有而另一个关系(表)中没有的元组(行)选出来,组成一个新的关系。

R − S = {t | t ∈ R 且 t ∉ S}

R − S
AB
a1
c3

笛卡尔积:把两个关系(表)中的每个元组(行)都拼接起来,组成一个新的关系。新关系的属性(列名)是两个关系的属性的并集,新关系的元组(行)的个数是两个关系的元组的个数的乘积。

R × S = {t | t = (tR, tS) 且 tR ∈ R 且 tS ∈ S}

R × S
ABAB
a1b2
a1d4
a1e5
b2b2
b2d4
b2e5
c3b2
c3d4
c3e5

选择:根据一个条件,从一个关系(表)中筛选出满足条件的元组(行),组成一个新的关系。条件可以是一个属性(列)的值与一个常数或另一个属性的值的比较。

eq?%5Csigma%20_%7BF%7D%28R%29 = {t | t ∈ R 且 F(t) = True}

其中 F(t) 是一个条件表达式,如 t[A] > 10 或 t[A] = t[B]。

eq?%5Csigma%20_%7BA%3Dc%7D%28R%29
AB
c3

投影:从一个关系(表)中选出一些属性(列),去掉重复的元组(行),组成一个新的关系。

eq?%5Cpi%20_%7BA%7D%28R%29 = {t[A, B] | t ∈ R}

,其中 t[A, B] 表示元组 t 的 A 和 B 属性的值。

eq?%5Cpi%20_%7BB%7D%28S%29
B
1
2
3

连接:根据一个条件,把两个关系(表)中满足条件的元组(行)拼接起来,组成一个新的关系。条件可以是两个关系的某些属性(列)的值的比较。

eq?R%20%5CJoin%20S%20%3D%20%5C%7B%5C%7Bt_%7BR%7D%2Ct_%7BS%7D%5C%7D 且 eq?t_%7BR%7D%20%5Cin%20Req?t_%7BS%7D%20%5Cin%20Seq?F%28t%29%20%3D%20True%5C%7D

,其中 F(t) 是一个条件表达式,如 tR[A] = tS[B]。

R表如下:

idnameage
1001小明18
1002小红16
1003小白20

S表如下:

idsex
1001
1004
1005
R ⋈ S
idnameagesex
1001小明18

除:把一个关系(表)中的一些属性(列)的值,除以另一个关系(表)中的一些属性(列)的值,得到一个新的关系。新关系的属性(列)是被除关系的属性减去除数关系的属性,新关系的元组(行)是被除关系的元组在除数关系的所有元组上都能匹配的元组的剩余属性的值。

R ÷ S = {t | t ∈ πA® 且 ∀s ∈ S,∃r ∈ R,r = (t, s)}

,其中 A 是 R 的属性减去 S 的属性。

元组演算

4b26b62a28aa4d548966c8e6d4f17533.png
 
7061cbea47e849ac9a3679f90fa831da.png
0628dbd08d8444e39bd583f7b34980b5.png
 
试题1
若对关系R(A,B,C,D)进行 eq?%5Cpi%20_%7B1.3%7D(R)运算,则该关系运算与__(1)__等价,表示__(2)__。
(1)
A. eq?%5Cpi%20_%7BA%3D1%2CC%3D3%7D(R)
B. eq?%5Cpi%20_%7B%28A%3D1%5Cwedge%20C%3D3%29%7D(R)
C.eq?%5Cpi%20_%7BA%2CC%7D(R)
D. eq?%5Cpi%20_%7BA%3D1%5Cvee%20C%3D3%7D(R)
(2)
A.属性A和C的值分别等于1和3的元组为结果集
B.属性A和C的值分别等于1和3的两列为结果集
C.对R关系进行A=1、C=3的投影运算
D.对R关系进行属性A和C的投影运算
 

考点4:SQL语言

58c80ca3c12a49c59fe2ce8b595b43b1.png

c0db65435abc41c997a3d6c67f13fff0.png

8d3989f8c59f41088dad3d0eacdcf7b7.png

3803cf6c608c41d68ea21c8fb4428bc7.png

361804ef5ef54bfc88cfb29f779ba117.png

e04f0eec6c7d41fdaadf4ffaa07e42a8.png

未完待续......

 

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所幸你是例外

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值