《数据库系统》第二章 关系数据库

《数据库系统》第二章 关系数据库

本章重点

关系数据模型三要素
  • 数据结构——关系(二维表)
  • 数据操作
  • 完整性约束
关系
  • 关系代数(重点)
  • 关系演算(不考推理,但概念要理解)
  • SQL语句(结构化查询语言)

关系数据结构及形式化定义

关系

关系模型的数据结构非常简单,只包含单一的数据结构——关系。

  1. (domain):域是一组具有相同数据类型的值的集合。
  2. 笛卡尔积:给定一组域 D 1 , D 2 , … , D n D_1, D_2, \dots, D_n D1,D2,,Dn,允许其中某些域是相同的,则这组域的笛卡尔积为: D 1 × D 2 × ⋯ × D n = { ( d 1 , d 2 , … , d n ) ∣ d i ∈ D i , i = 1 , 2 , … , n } D_1×D_2×\dots×D_n=\left \{(d_1, d_2, \dots, d_n) | d_i \in D_i, i = 1, 2, \dots, n\right \} D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}。其中,每一个元素叫作一个n元组,或简称元组二维表中的一行),元素中的每一个值 d i d_i di叫作一个分量(某一个属性)。一个域允许的不同取值个数称为这个域的基数总共有多少个元素)。
  3. 关系:“关系”是“笛卡尔积”中的一部分数据。 D 1 × D 2 × ⋯ × D n D_1×D_2×\dots×D_n D1×D2××Dn的子集叫作在域 D 1 , D 2 , … , D n D_1, D_2, \dots, D_n D1,D2,,Dn上的关系,表示为: R ( D 1 , D 2 , … , D n ) R(D_1, D_2, \dots, D_n) R(D1,D2,,Dn)。n=1时为单元关系,n=2时为二元关系
码(重点)

候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。

e.g. 用学号和课程号可以唯一地标识一个选课项,缺少任意一个属性都无法标识该选课项,则学号和课程号为候选码。

主码:若一个关系有多个候选码,则选定其中一个为主码。

e.g. 既可以用学号唯一标识一个学生,也可以用身份证号唯一标识一个学生。这样,身份证号可以作为Student表的主码。

主属性候选码的诸属性称为主属性。(一定注意这里是候选码

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

全码:关系模式的所有属性是这个关系模式的候选码,称为全码。(理解:在一张表中,但凡缺少一种属性,都无法确定具体的某一行,则这些属性加起来称为全码

外部码:又称“外码”。如果一个关系中的一个属性(该属性不能是候选码)是另外一个关系中的主码,则这个属性为外码。外部码对应“参照完整性约束”。定义:设F是基本关系R的一个或一组属性,但不是关系R的码, K s K_s Ks是基本关系S的主码。如果F与 K s K_s Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。 R ( K r , F , …   ) , S ( K s , …   ) R(K_r, F, \dots), S(K_s, \dots) R(Kr,F,),S(Ks,)

关系的类型
  • 基本关系(通常又称为基本表或基表):基本表是实际存在的表,它是实际存储数据的逻辑表示
  • 查询表:是查询结果对应的表
  • 视图表:是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
基本关系的性质
  • 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
  • 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给与不同的属性名。
  • 列的顺序无所谓,即列的次序可以任意交换。
  • 任意两个元组的候选码不能取相同的值。
  • 行的顺序无所谓,即行的次序可以任意交换。
  • 分量必须取原子值,即每一个分量都必须是不可分的数据项。(最基本的一条)
关系与关系模式
  • 关系:数据(动态)
  • 关系模式:表结构(静态)
关系模式

关系的描述称为关系模式。可表示为: R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F)。其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。

关系数据库

所有关系的集合构成一个关系数据库

关系操作的特点是集合操作方式。

关系操作

e.g. 增删改查

5种基本操作

选择、投影、并、差、笛卡尔积。(其他关系操作非必须,可用于简化表达式)

关系的完整性

关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。

实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。所谓空值就是“不知道”或“不存在”或“无意义”的值。

参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码 K s K_s Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:

  • 或者取空值
  • 或者等于S中某个元组的主码值

e.g. 对于一个学生的专业而言,要么尚未分配专业,要么只能从专业列表中选取主码值作为学生的专业。

用户定义的完整性:用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。

关系代数(重点)

传统的集合运算

包括并、差、交、笛卡尔积四种运算。

(注: ∨ \vee 是“或”, ∧ \wedge 是“且”)

:关系R与关系S的并记作: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\left \{ t|t\in R \vee t \in S \right \} RS={ttRtS}

:关系R与关系S的差记作: R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\left \{ t | t \in R \wedge t \notin S \right \} RS={ttRt/S}

:关系R与关系S的交记作: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S = \left \{ t | t \in R \wedge t \in S \right \} RS={ttRtS}

笛卡尔积:两个分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有 k 1 k_1 k1个元组,S有 k 2 k_2 k2个元组,则关系R和关系S的笛卡尔积有 k 1 × k 2 k_1×k_2 k1×k2个元组。

e.g.

R:

ABC
a 1 a_1 a1 b 1 b_1 b1 c 1 c_1 c1
a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2
a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1

S:

ABC
a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2
a 1 a_1 a1 b 3 b_3 b3 c 2 c_2 c2
a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1

R×S:

R.AR.BR.CS.AS.BS.C
a 1 a_1 a1 b 1 b_1 b1 c 1 c_1 c1 a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2
a 1 a_1 a1 b 1 b_1 b1 c 1 c_1 c1 a 1 a_1 a1 b 3 b_3 b3 c 2 c_2 c2
a 1 a_1 a1 b 1 b_1 b1 c 1 c_1 c1 a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1
a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2 a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2
a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2 a 1 a_1 a1 b 3 b_3 b3 c 2 c_2 c2
a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2 a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1
a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1 a 1 a_1 a1 b 2 b_2 b2 c 2 c_2 c2
a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1 a 1 a_1 a1 b 3 b_3 b3 c 2 c_2 c2
a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1 a 2 a_2 a2 b 2 b_2 b2 c 1 c_1 c1
专门的关系运算

专门的关系运算包括选择、投影、连接、除运算等。

t [ A i ] t[A_i] t[Ai]表示元组t中相应于属性 A i A_i Ai的一个分量。

t r t s ⌢ \stackrel\frown{t_r t_s} trts称为元组的连接或元组的串接。它是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

e.g. t r ( a , b , c ) t_r(a, b, c) tr(a,b,c) t s ( d , e ) t_s(d, e) ts(d,e) t r t s ⌢ ( a , b , c , d , e ) \stackrel\frown{t_r t_s}(a, b, c, d, e) trts(a,b,c,d,e)

象集:给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集定义为: Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x=\left \{t[Z] | t \in R , t [X] = x \right \} Zx={t[Z]tR,t[X]=x}。它表示R中属性组X上值为x的诸元组在Z上分量的集合。(理解:当某一列取角标中的值时,对应Z的取值集合

e.g.

R:

x 1 x_1 x1 Z 1 Z_1 Z1
x 1 x_1 x1 Z 2 Z_2 Z2
x 1 x_1 x1 Z 3 Z_3 Z3
x 2 x_2 x2 Z 2 Z_2 Z2
x 2 x_2 x2 Z 3 Z_3 Z3
x 3 x_3 x3 Z 1 Z_1 Z1
x 3 x_3 x3 Z 3 Z_3 Z3

x 1 x_1 x1在R中的象集 Z x 1 = { Z 1 , Z 2 , Z 3 } Z_{x1} = \left \{ Z_1, Z_2, Z_3 \right \} Zx1={Z1,Z2,Z3}

x 2 x_2 x2在R中的象集 Z x 2 = { Z 2 , Z 3 } Z_{x2} = \left \{ Z_2, Z_3 \right \} Zx2={Z2,Z3}

x 3 x_3 x3在R中的象集 Z x 3 = { Z 1 , Z 3 } Z_{x3} = \left \{ Z_1, Z_3 \right \} Zx3={Z1,Z3}

选择:它是在关系R中选择满足给定条件的诸元组,记作

σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma _F(R) = \left \{ t | t \in R \wedge F(t) = '真' \right \} σF(R)={ttRF(t)=}

其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。

e.g. 查询信息系(IS系)全体学生。

σ S d e p t = ′ I S ′ ( S t u d e n t ) \sigma _{Sdept='IS'} (Student) σSdept=IS(Student)

注意:下标中为单引号。

e.g. 查询年龄小于20岁的学生。

σ S a g e < 20 ( S t u d e n t ) \sigma _{Sage<20}(Student) σSage<20(Student)

投影:关系R上的投影是从R中选择出若干属性列组成新的关系。记作

Π A ( R ) = { t [ A ] ∣ t ∈ R } \Pi_A(R)= \left \{ t [A] | t \in R \right \} ΠA(R)={t[A]tR}

其中A为R的属性列。

e.g. 查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影。

Π S n a m e , S d e p t ( S t u d e n t ) \Pi _{Sname, Sdept} (Student) ΠSname,Sdept(Student)

(理解:括号里的内容为查询表的名称,得到的结果是表)

连接:连接也称为 θ \theta θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作

R ⋈ A θ B S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R \bowtie_{A \theta B} S = \left \{ \stackrel\frown{t_r t_s} | t_r \in R \wedge t_s \in S \wedge t_r[A] \theta t_s[B] \right \} RAθBS={trtstrRtsStr[A]θts[B]}

理解:相当于筛选出符合条件的笛卡尔积元组。

【选择、投影、连接 小结】

  • 选择( σ \sigma σ)选的是行
  • 投影( Π \Pi Π)选的是列
  • 连接( ⋈ \bowtie )挑出来的是笛卡尔积

等值连接 θ \theta θ为“=”的连接运算称为等值连接。(第一个关系的属性值与第二个关系的属性值相等

自然连接 ⋈ \bowtie ,符号下方无表达式):是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组(公共属性),并且在结果中把重复的属性列去掉

e.g. R.A 和 S.A 可以视为同名的属性组。在写自然连接的表时,不区分 R.A 和 S.A 。在写等值连接的表时,表中可能同时存在R.A和S.A。

悬浮元组:在做自然连接时被舍弃的元组(元组是某些行)。(注:指在连接前的表中的元组)

R:

ABC
a1b15
a1b26
a2b38
a2b412

S:

BE
b13
b27
b310
b32
b52

除运算(难点):设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。

象集来定义除法:给定关系R(X, Y)和S(Y, Z),其中X, Y, Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集 Y x Y_x Yx包含S在Y上投影的集合。记作

R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } R÷S = \left \{ t_r [X] | t_r \in R \wedge \Pi_Y(S) \subseteq Y_x \right \} R÷S={tr[X]trRΠY(S)Yx}

其中 Y x Y_x Yx为x在R中的象集, x = t r [ X ] x=t_r[X] x=tr[X]

参考:https://blog.csdn.net/skyejy/article/details/80890842

e.g. 有关系R和S

关系R:

ABC
a1b1c2
a2b3c7
a3b4c6
a1b2c1
a4b6c6
a2b2c3
a1b2c3

关系S:

BCD
b1c2d1
b2c1d1
b2c3d2

借助象集的概念:

关系R和关系S拥有共同的属性B、C,R÷S得到的属性值就是关系R包含而关系S不包含的属性,即A属性。

在R关系中A的属性的值可以取{a1, a2, a3, a4}

a1值对应的象集为{(b1, c2), (b2, c1), (b2, c3)}

a2值对应的象集为{(b3, c7), (b2, c3)}

a3值对应的象集为{(b4, c6)}

a4值对应的象集为{(b6, c6)}

关系S在B、C上的投影为{(b1, c2), (b2, c1), (b2, c3)}

只有a1值对应的象集包含关系S的投影集,所以只有a1应该包含在A属性中,所以R÷S为:

A
a1

关系演算

  • 检索操作:GET
  • 范围变量:RANGE
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值