数据库技术——第2章 关系型数据库

第2章 关系型数据库

基本概念

  1. 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成

  2. 域:一组具有相同数据类型的值的集合,一个域中可取的值的个数称为这个域的基数

  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 , ⋯   , d n ) ∣ d i ∈ D i , i = 1 , 2 , ⋯   , n } D_1\times D_2\times\cdots\times D_n=\left\{(d_1,d_2,\cdots,d_n)|d_i\in D_i, i=1,2,\cdots,n \right\} D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}

关系、关系模式与关系数据库

  1. 关系:一些域笛卡尔积的子集称为在这些域上的关系,表示为 R ( D 1 , D 2 , ⋯   , D n ) R(D_1,D_2,\cdots,D_n) R(D1,D2,,Dn),其中R是这个关系的名称,n称为这个关系的

    • 关系中能唯一标识各元组的属性组,而其真子集不能,这个属性组就称为候选码

    • 当一个关系中有多个候选码,选择其中一个作为这个关系的主码

    • 候选码中的各属性称为主属性,不在任何候选码中的属性称为非主属性/非码属性

    • 当候选码中包含了这个关系的所有属性时,此候选码称为全码

    码、候选码、主码的区分

    首先,主码 ⊆ \subseteq 候选码 ⊆ \subseteq

    码是可以确定一个元组的所有信息的属性名或属性名组

    以关系 R ( A , B , C , D ) R(A, B, C, D) R(A,B,C,D)为例,假设知道(A, B)或©就可以唯一标识一个元组,则

    • (A, B)、(A, B, C)、(A, B, D)、(A, B, C, D)、(A, C)、(B, C)、(C, D)、(B, C, D)都是码

    • (A, B)、(C)都是候选码

    • 可以选择(A, B)或(C)作为关系R的主码

  2. 关系可以分为三种类型:基本关系(即基本表/基表)、查询表、视图表

  3. 显然,基本关系具有以下的性质

    • 列是同质的。即同一列中的数据都来自同一个域

    • 不同列的数据可以来自同一个域,但每列要给予不同的属性名

    • 列是无序的、行也是无序的

    • 任两个元组的候选码不能取相同值

    • 各分量必须为原子值,即每个分量的数据项不可再分

  4. 关系的描述称为关系模式,表示为 R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F),R为关系名、U为属性名集合、D为U中属性来源的域、DOM为属性到域的映射、F为属性间数据的依赖关系集合

  5. 在一个给定的应用领域中,所有关系的集合构成一个关系数据库

  6. 关系数据库的型:即关系数据库模式,是对关系数据库的描述,包括域的定义以及域上的关系模式

    关系数据库的值:即关系数据库,是关系数据库模式中定义的关系模式在某一时刻对应的关系的集合

关系的完整性

关系模型中的完整性约束包括实体完整性、参照完整性、用户定义的完整性。前两个必须满足,称为关系的两个不变性

实体完整性

即主属性不能取空值

参照完整性
外码

外码是关系与关系间的引用。

有两个基本关系R、S,设F为R的一个或一组属性,且F不是R的码,但F与S的主码对应,则称F是R的外码,R称为参照关系,S称为被参照关系/目标关系

需要注意的是,R、S可以是相同的关系

参照完整性规则

若属性(或属性组)F是基本关系R的外码,被参照关系为S,则R中的每个元组在F上的值需要满足

  • 或者取空值(若为属性组,组中的每个属性值都为空值)

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

用户定义的完整性

针对某一具体关系数据库规定约束条件,反映具体应用所涉及数据必须满足的语义要求。例如某属性必须取唯一值(即不能重复)、非主属性不能取空值等

关系操作与关系代数

基本概念
  1. 关系模型中的常用关系操作:查询、插入、删除、修改

  2. 查询操作具体可以分为:选择、投影、并、差、笛卡尔积、连接、除、交。其中前五种是基本操作,其他操作可以从中导出

  3. 关系操作操作的对象和结果都是集合,而非关系数据模型的操作是以记录为单位的

  4. 关系代数用对关系的运算来表达查询要求,关系演算用谓词来表达查询要求。按谓词变元的基本对象是元组变量还是域变量,可以将关系演算分为元组关系演算和域关系演算两类

  5. 结构化查询语言SQL介于关系代数和关系演算之间,集成了查询、数据定义语言、数据操纵语言、数据控制语言

关系代数

关系代数对关系进行运算,得到的结果也是运算。可以分为集合运算和专门的关系运算两类

以下叙述中的例子,均以下图为例

R、S关系实例

一些约定
  1. 对于一个关系 R ( A 1 , A 2 , ⋯   , A n ) R(A_1,A_2,\cdots,A_n) R(A1,A2,,An) t ∈ R t\in R tR表示t是R中的一个元组, t [ A i ] t[A_i] t[Ai]则表示元组t中对应于属性 A i A_i Ai的一个分量

  2. R关系n目、S关系m目,有 t r ∈ R , t s ∈ S t_r\in R,t_s\in S trR,tsS,则 t r t s ⌢ \overset{\frown}{t_rt_s} trts称为元组的连接/串接,它是一个n+m列的元组,前n列是R中的,后m列是S中的

传统集合运算

包括并、差、交、笛卡尔积,与集合中的概念类似,从的角度考虑关系。传统集合运算要求参与运算的两个关系具有相同的目,并且对应的属性取自同一个域

专门的关系运算

象集

对于一个关系 R ( X , Z ) R(X,Z) R(X,Z),其中的X、Z为属性组,当 t [ X ] = x t[X]=x t[X]=x时,x在R中的象集 Z x Z_x Zx的定义为 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上分量的集合

以关系R为例,设 X = { A , B } X=\left\{A, B\right\} X={A,B} Z = { C , D } Z=\left\{ C,D\right\} Z={C,D}

x = ( a 1 , b 2 ) x=(a1,b2) x=(a1,b2)在R中的象集 Z x = { ( c 2 , 3 ) , ( c 1 , 5 ) } Z_{x}=\left\{(c2,3), (c1,5)\right\} Zx={(c2,3),(c1,5)}

选择

又称为限制,表示方法为 σ F ( R ) \sigma_F(R) σF(R)

其中F的基本形式为 X 1 θ Y 1 X_1\theta Y_1 X1θY1 X 1 , Y 1 X_1,Y_1 X1,Y1为属性名、常量或简单函数,属性名可以用列的序号代替; θ \theta θ是比较运算符( > , ≥ , < , ≤ , = , < > \gt,\ge,\lt,\le,=,<> >,,<,,=,<>),F可以是好几个基本形式进行非与或 ¬ , ∧ , ∨ \neg,\land,\vee ¬,,运算结合

选择的定义为 σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = t r u e } \sigma_F(R)=\left\{t|t\in R\land F(t)=true\right\} σF(R)={ttRF(t)=true}

显然,选择操作就是在关系中选取满足条件F的行

例如, σ A = a 1 ∧ D ≥ 5 ( R ) = \sigma_{A=a1\land D\ge5}(R)= σA=a1D5(R)=

选择操作结果

投影

表示方法为 Π A ( R ) \Pi_A(R) ΠA(R)

其中A为R中的属性名,若有多个,用逗号分隔

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

显然,投影操作就是在关系中选择一些列。随着一些列被取消,会出现重复行,在投影后,这些重复行每种只会出现一次,也就是说投影有“去重”的功能

例如, Π A , B ( R ) = \Pi_{A,B}(R)= ΠA,B(R)=

投影操作结果

可见 ( a 1 , b 2 ) (a1,b2) (a1,b2)只剩下一个了

连接

又称为 θ \theta θ连接,表示方法为 R ⋈ A θ B S R\underset{A\theta B}{\Join} S RAθBS

其中 θ \theta θ为比较运算符,A、B分别是R和S上的属性组(要求其中的属性个数相同,且互相可比)

连接的定义为 R ⋈ A θ B S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R\underset{A\theta B}{\Join} S=\left\{\overset{\frown}{t_rt_s}|t_r\in R\land t_s\in S\land t_r[A]\theta t_s[B]\right\} RAθBS={trtstrRtsStr[A]θts[B]}

简而言之,连接运算就是从R与S的笛卡尔积中,选取指定属性A、B满足关系 θ \theta θ的元组

下面是一些特殊的连接

  • θ \theta θ选取为等于关系时,这种连接称为等值连接,记作 R ⋈ A = B S R\underset{A=B}{\Join} S RA=BS

  • 当对R和S中相同的属性组做等值连接,之后对于重复的属性组只留下一次,这种连接称为自然连接

  • 进行自然连接时,由于有些属性并没有公共值,某一个关系中的一些元组可能会被舍弃,这些舍弃的元组称为悬浮元组

    若将悬浮元祖放入结果中,没有对应值的地方填“空”(NULL)即可

    保留所有悬浮元组的连接称为外连接,表示为 R ⟗ S R⟗S RS;保留左边关系R中悬浮元组的连接称为左外连接,表示为 R ⟕ S R⟕S RS;保留左边关系R中悬浮元组的连接称为右外连接,表示为 R ⟖ S R⟖S RS,以上三种都是在自然连接的基础上讨论的

普通连接: R ⋈ D > E S = R\underset{D\gt E}{\Join}S= RD>ES=

连接结果1

等值连接: R ⋈ D = E S = R\underset{D= E}{\Join}S= RD=ES=

连接结果2

自然连接: R ⋈ S R\Join S RS=
连接结果3

外连接: R ⟗ S = R⟗S= RS=

连接结果4

左外连接: R ⟕ S = R⟕S= RS=

连接结果5

右外连接: R ⟖ S = R⟖S= RS=

连接结果6

除运算

直观地来看,除运算是为了表达“至少”的包含关系,表达为 R ÷ S R\div S R÷S

设关系 R ( X , Y ) , S ( Y , Z ) R(X,Y),S(Y,Z) R(X,Y),S(Y,Z),其中X、Y、Z均为属性组(可以为空),R和S中的属性组Y的域应该相同,除的定义为 R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } R\div S=\left\{t_r[X]|t_r\in R\land \Pi_Y(S)\subseteq Y_x\right\} R÷S={tr[X]trRΠY(S)Yx}

换言之, R ÷ S R\div S R÷S的结果是满足下面条件的关系

  • 各列属性与R中的X相同,即在R中但不在S中的各属性

  • 结果中各元组在R中的象集 Y X Y_X YX包含了S在属性组Y上的投影

以下图中的关系R、S为例

修改后的关系S

R ÷ S = R\div S= R÷S=

修改后的关系R

R ( X , Y ) R(X,Y) R(X,Y)的属性组X为(A, B),属性组Y为(C, D); S ( Y , Z ) S(Y,Z) S(Y,Z)的属性组Y为(C, D),属性组Z为空。则除运算的结果可以理解为R中的一些X,要求这些X在R上的象集至少有S在Y上投影的各项

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值