• 第二章 关系数据库


    第二章 关系数据库

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

    2.1.1 关系

    • 单一的数据结构——关系
      • 现实世界的实体以及实体间的各种联系均用关系来表示
    • 逻辑结构——二维表
      • 从用户角度,关系模型中数据的逻辑结构是一张二维表
    • 关系模型是建立在集合代数的基础上

    基本概念

    • 域(Domain)

      • 域是一组具有相同数据类型的值的集合

      • 例如,自然数、整数、实数、长度小于25字节的字符串集合、{0,1}、{男,女}、大于等于0且小于等于100的正整数等,都可以是域。

    • 笛卡尔积(cartesian product)

      • 笛卡尔积是域上的一种集合运算

      • 给定一组域 D 1 , D 2 , . . . . . . , D n {D_1,D_2,......,D_n} D1,D2,......,Dn,允许其中的某些域是相同的, D 1 , D 2 , . . . . . . , D n {D_1,D_2,......,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 ... \times D_n = \{(d_1,d_2,...,d_n) | d_i\in D_i ,i=1,2,...n\} D1×D2×...×Dn={(d1,d2,...,dn)diDi,i=1,2,...n}
        其中,每一个元素 ( d 1 , d 2 , . . . , d n ) {(d_1,d_2,...,d_n)} (d1,d2,...,dn)叫做一个n元组(n-tuple),或简称元组(tuple)。元素中的每一个值 d i d_i di叫做一个分量(component)

      • 一个域允许的不同取值个数称为这个域的基数(cardinal number)

        • D i ( i = 1 , 2 , . . . , n ) D_i(i=1,2,...,n) Di(i=1,2,...,n)为有限集,其基数为 m i ( i = 1 , 2 , . . . , n ) m_i(i=1,2,...,n) mi(i=1,2,...,n),则 D 1 × D 2 × . . . × D n D_1 \times D_2 \times ... \times D_n D1×D2×...×Dn的基数M为
          M = ∏ i = 1 n m i M = \prod^{n}_{i=1}m_i M=i=1nmi
      • 笛卡尔积的表示方法

        • 笛卡尔积可表示为一张二维表。表中的每一行对应一个元组,表中的每一列的值来自一个域
    • 关系(Relation)

      • 关系

        • D 1 × D 2 × . . . × D n D_1 \times D_2 \times ... \times D_n D1×D2×...×Dn的子集叫做在域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn上的关系,表示为 R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn)

          R表示关系的名字,n是关系的(degree)

      • 元组

        • 关系中的每个元素是关系中的元组,通常用t表示
      • 单元关系与二元关系

        • 当n=1时,称该关系为单元关系(unary relation),或一元关系
        • 当n=2时,称该关系为二元关系(binary relation)
      • 关系的表示

        • 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域,一个属性
      • 属性

        • 关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性名,n目关系必有n个属性
        • 候选码(Candidate key)

          • 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码

            简单的情况:候选码只包含一个属性

        • 全码(All-key)

          • 最极端的情况
            • 关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
        • 主码

          • 若一个关系有多个候选码,则选定其中一个为主码(Primary key)
        • 主属性

          • 候选码的诸属性称为主属性(Prime attibute)
        • 非主属性

          • 不包含在任何候选码中的属性(Non-Prime attibute)或非码属性(Non-key attibute)
      • 三类关系

        • 基本关系(基本表或基表)
          • 实际存在的表,是实际存储数据的逻辑表示
        • 查询表
          • 查询结果对应的表
        • 视图表
          • 由基本表或其他视图表导出的表,是虚表,不对呀实际存储的数据
      • 基本关系的性质

        • 列是同质的(Homegeneous)
        • 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名
        • 列的顺序无所谓,列的次序可以任意交换
        • 任意两个元组的候选码不能相同
        • 行的顺序无所谓,行的次序可以任意交换
        • 分量必须取原子值,这是规范条件中最基本的一条

    2.1.2 关系模式

    关系的描述称为关系模式(relation schema)

    可以形象的表示为R(U,D,DOM,F)

    其中,R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的 域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合

    关系模式是型,关系是值

    • 元组集合的结构
      • 属性构成,属性来自的域,属性与域之间的映像关系
    • 一个 关系通常赋予它的元组语义确定
    • 现实的世界中还存在着完整性约束
    • 关系模式与关系
      • 关系模式是静态的,稳定的
      • 关系是动态的,随时间不断变化的
      • 关系是关系模式在某一时刻的状态或内容

    2.1.3 关系数据库

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

    • 关系数据库的型与值
      • 关系数据库的型
        • 也称为关系数据库模式,是对关系数据库的描述
      • 关系数据库的值
        • 是这些关系模式在某一时刻对应的关系的集合,通常称为关系数据库
      • 关系数据库的模式
        • 若干域的定义,在这些域上定义的若干关系模式

    2.1.4 关系模型的存储结构

    • 有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;
    • 有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理。

    2.2 关系操作

    2.2.1 基本的关系操作

    1. 常用的关系操作
      • 查询(query)
        • 选择(select),投影(project),连接(join),除(divide),并(union),差(except),交(intersection),笛卡尔积
        • 其中选择,投影,并,差,笛卡尔积是5种基本操作
      • 数据更新
        • 插入,删除,修改
      • 查询的表达能力是其中最主要的部分
    2. 关系操作的特点
      • 集合操作方式
        • 操作的对象和结果都是集合,一次一集合的方式

    2.2.2 关系数据语言的分类

    1. 关系代数语言
      • 用对关系的运算来表达查询要求,代表ISBL
    2. 关系演算语言
      • 用谓词来表达查询要求
      • 元组关系演算语言
        • 谓词变元的基本对象是元组变量,代表APLHA,QUEL
      • 域关系演算语言
        • 谓词变元的基本对象是域变量,代表QBE
    3. 具有关系代数和关系演算双重特点的语言
      • 代表:SQL

    2.3 关系的完整性

    关系模型中有三类完整性约束

    • 实体完整性(entity integrity)
    • 参照完整性(referential integrity)
    • 用户定义的完整性(user-defined inte)

    其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

    2.3.1 实体完整性

    关系数据库中每个元组应该是可区分的,是唯一的。这样的约束条件用实体完整性来保证

    • 实体完整性规则

      若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(不存在,不知道,无意义)

      1. 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合。
      2. 现实世界中的实体是可区分的,即它们具有某种唯一性标识。例如每个学生都是独立的个体,是不一样的。
      3. 相应地,关系模型中以主码作为唯一性标识。
      4. 主码中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。

    2.3.2 参照完整性

    在关系模型种实体及实体间的联系都是用关系来描述的,存在着关系与关系间的引用

    设F是基本关系R的一个或一组属性,但不是关系R的码,K,是基本关系S的主码。如果F与K,相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referenced relation) 或目标关系(target relation)。关系R和S不一定是不同的关系。

    Snipaste_2023-07-15_08-32-25

    • 说明
      • 关系R和S不一定是不同的关系
      • 目标关系S的主码 K S K_S KS和参照关系的外码F必须定义在同一个(或一组)域上
      • 外码并不一定要与相应的主码同名,当外码与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便识别
    • 参照完整性规则
      • 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码 K S K_S KS,相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
        • 或者取空值(F的每个属性值均为空值);
        • 或者等于S中某个元组的主码值。

    2.3.3 用户定义的完整性

    ​ 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求

    ​ 关系模型应提供定义和校验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

    2.4 关系代数

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

    关系代数的运算对象是关系,运算结果也是关系

    关系代数按运算符的不同可分为传统的集合运算和专门的关系运算两类

    集合运算是从关系的水平方向即行的角度进行

    专门的关系运算不仅涉及行而且涉及列

    Snipaste_2023-07-16_08-53-14

    2.4.1 传统的集合运算

    传统的集合运算是二目运算,包括,并,差,交 ,笛卡尔积4中运算


    设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量, t ∈ R t \in R tR表示t是R的一个元组

    • 并(union)

      • 关系R与关系S的并记作
        R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R \cup S = \{t|t\in R\lor t\in S\} RS={ttRtS}

      • 其结果仍为n目关系,由属于R或属于S的元组组成

    • 差(except)

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

      • 其结果仍为n目关系,由属于R而不属于S的所有元组组成

    • 交(intersection)

      • 关系S与R的交记作
        R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S =\{t|t\in R \land t \in S\} RS={ttRtS}

      • 其结果仍为n目关系,由既属于R又属于S的元组组成。关系的交可以用差来表示
        R ∩ S = R − ( R − S ) R \cap S = R-(R-S) RS=R(RS)

    • 笛卡尔积(cartesian product)

      • 严格地讲应该是广义的笛卡尔积

        R : n 目关系, k 1 个元组, S : m 目关系, k 2 个元组 R:n目关系,k_1个元组,S:m目关系,k_2个元组 Rn目关系,k1个元组,S:m目关系,k2个元组

      • R与S的笛卡尔积 运算表示为 R × S R\times S R×S
        R × S = { t r t s ⌢ ∈ R ∧ t s ∈ S } R \times S = \{\overset{\LARGE{\frown}}{t_r t_s}\in R \land t_s \in S\} R×S={trtsRtsS}

      • 运算结果为

        • 行: k 1 × k 2 k_1 \times k_2 k1×k2个 元组
        • 列:(n+m)列元组的集合,其中元组的前n列是关系R的一个元组,后m列是关系S的一个 元组

      Snipaste_2023-07-16_09-24-26

    2.4.2 专门的关系运算

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

    相关记号说明:

    1. 关系模式为R ( A 1 , A 2 , . . . , A n ) (A_1,A_2,...,A_n) (A1,A2,...,An),它的一个关系设为R。 T ∈ R T\in R TR表示t是R的一个元组 t [ A i ] t[A_i] t[Ai]则表示元组t中相应于属性 A i A_i Ai的一个分量

    2. A = { A i 1 , A i 2 , . . . , A i k } A=\{A_{i1},A_{i2},...,A_{ik}\} A={Ai1,Ai2,...,Aik},其中 A i 1 , A i 2 , . . . , A i k A_{i1},A_{i2},...,A_{ik} Ai1,Ai2,...,Aik A 1 , A 2 , . . . , A n A_1,A_2,...,A_n A1,A2,...,An中的一部分,则A称为属性列或属性组。 t [ A ] = ( t [ A i 1 ] , t [ A i 2 ] , . . . , t [ A i k ] ) t[A] = (t[A_{i1}],t[A_{i2}],...,t[A_{ik}]) t[A]=(t[Ai1],t[Ai2],...,t[Aik])表示元组t在属性列A上诸分量的集合, A ‾ \overline{A} A则表示 A i 1 , A i 2 , . . . , A i k {A_{i1},A_{i2},...,A_{ik}} Ai1,Ai2,...,Aik中去掉 { A i 1 , A i 2 , . . . , A i k } \{A_{i1},A_{i2},...,A_{ik}\} {Ai1,Ai2,...,Aik}后剩余的属性组。

    3. R为n目关系,S为m目关系。 t r ∈ R , t x ∈ S , t r t x ⌢ t_r\in R,t_x \in S, \overset{\LARGE{\frown}}{t_r t_x} trR,txS,trtx称为元组的连接(concatenation)或元组的串接。它是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

    4. 给定一个关系R(X,Z),X和Z为属性组。当r[X]=x时,x在R中的象集(imagesset)定义为
      Z x = { t [ z ] ∣ t ∈ R , t [ X ] = x } Z_x=\{t[z] | t \in R,t[X]=x\} Zx={t[z]tR,t[X]=x}
      它表示R中属性组X上的值为x的诸元组在Z上分量的集合


    • 选择(selection)

      选择又称为限制(restriction)。它是在关系R中选择满足给定条件的诸元组,记作
      σ F ( R ) = { t ∣ ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma_F(R) = \{t|\in R \land F(t)='真'\} σF(R)={tRF(t)=}
      其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。逻辑表达式F的基本形式为:
      X 1 θ T 1 X_1\theta T_1 X1θT1
      其中θ表示比较运算符,它可以是>,≥,<,≤,=或<>。 X 1 , Y 1 X_1,Y_1 X1,Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。在基本的选择条件上可以进一步进行逻辑运算,即进行求非( ¬ \neg ¬)、与( ∧ \land )、或(V)运算。条件表达式中的运算符如表2.5所示。

      Snipaste_2023-07-16_16-00-12

    • 投影(projection)

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

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

        其中A为R中的属性列

        投影操作是从列的角度进行的运算

    • 连接(join)

      • 连接也称 为 θ \theta θ连接。它是从两个关系 的笛卡尔积中选取属性间满足一定条件的元组。记作:
        R ⋈ A θ B S = { t r t s ⌢ ∣ t r ∈ R ∧ t x ∈ S ∧ t r [ A ] θ t x [ B ] } R \underset{A\theta B }{\bowtie} S = \{\overset{\LARGE{\frown}}{t_r t_s}|t_r \in R \land t_x \in S\land t_r[A]\theta t_x[B]\} RAθBS={trtstrRtxStr[A]θtx[B]}
        其中,A和B分别为R和S上列数相等且可比的属性组,O是比较运算符。连接运算从R和S的笛卡儿积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系 θ {\theta} θ

      • 两类常用连接运算

        • 等值连接(equijoin)

          • θ {\theta} θ为"="的连接运算称为等值连接

          • 等值连接的含义

            • 从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组

            R ⋈ A = B S = { t r t s ⌢ ∣ t r ∈ R ∧ t x ∈ S ∧ t r [ A ] = t x [ B ] } R \underset{A=B}{\bowtie} S = \{\overset{\LARGE{\frown}}{t_r t_s}|t_r \in R \land t_x \in S\land t_r[A]= t_x[B]\} RA=BS={trtstrRtxStr[A]=tx[B]}

        • 自然连接(Natural join)

          • 自然连接是一种特殊的等值连接,两个关系中进行比较的分量必须是相同属性组,在结果中把重复的属性列去掉

          • 自然连接的含义

            • R和S具有相同的属性组B

            R ⋈ S = { t r t s ⌢ ∣ t r ∈ R ∧ t x ∈ S ∧ t r [ A ] = t x [ B ] } R \bowtie S = \{\overset{\LARGE{\frown}}{t_r t_s}|t_r \in R \land t_x \in S\land t_r[A]= t_x[B]\} RS={trtstrRtxStr[A]=tx[B]}

          • 自然连接还需要取消重复列,所以是同从行和列的角度进行运算。

      • 概念

        • 悬浮元组
          • 两个关系R和S在自然连接时,关系R和S中被舍弃的元组称为悬浮元组。
        • 外连接
          • 如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接(outer join),记作R ⟗S;
        • 左外连接
          • 如果只保留左边关系R中的悬浮元组就叫做左外连接(left outer join 或left join),记作R⟕S;
        • 右外连接
          • 如果只保留右边关系S中的悬浮元组就叫做右外连接(right outer join或right join),记作R ⟖S
    • 除运算(divsion)

      • 给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集

        R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影,元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
        R ÷ S = t r [ x ] ∣ t r ∈ R ∧ Π r ( S ) ⊆ Y x R\div S = {t_r[x]|t_r\in R \land \Pi_r(S) \subseteq Y_x} R÷S=tr[x]trRΠr(S)Yx
        其中 Y x Y_x Yx为x在R中的象集, x = t r [ x ] x=t_r[x] x=tr[x]

        除操作是同时从行和列角度进行运算

    2.5 关系演算

    关系演算是以数理逻辑中的谓词演算为基础的。按谓词变元的不同,关系演算可分为元组关系演算和域关系演算。

    2.5.1 元组关系演算语言ALPHA

    元组关系演算以元组变量作为谓词变元的基本对象。一种典型的元组关系演算语言是E.F.Codd提出的ALPHA语言。

    ALPHA语言主要有GET、PUT、HOLD、UPDATE、DELETE、DROP 6条语句,语句的基本格式为:
    操作语句工作空间名 ( 表达式 ) :操作条件 操作语句 工作空间名(表达式):操作条件 操作语句工作空间名(表达式):操作条件

    • 表达式
      • 用于指定语句的操作对象,它可以是关系名或(和)属性名,一条语句可以同时操作多个关系或多个属性。
    • 操作条件
      • 是一个逻辑表达式,用于将操作结果限定在满足条件的元组中,操作条件可以为空。
    • 还可以在基本格式的基础上加上排序要求以及播定返回元组的条数等。

    • 检索操作

      用GET语句实现

      Snipaste_2023-07-16_20-54-04

      Snipaste_2023-07-16_20-54-33

      • 元组变量主要有两方面的用途:
        • 简化关系名。如果关系的名字很长,使用起来就会感到不方便,这时可以设一个较短名字的元组变量来代替关系名。
        • 操作条件中使用量词时必须用元组变量。
  • 相关阅读:
    fatal:Could not read from remote repository解决方法
    js...
    error:Illegal instruction (core dumped),离线下载安装这个other版本numpy
    AtCoder Beginner Contest 275(C,E 补)
    面试经典sql(大数据):连续登陆问题
    深度探讨react-hooks实现原理
    【函数式编程实战】(六) Stream高并发实战
    Docker数据卷篇
    centos8手动编译安装swoole过程
    独立站定制开发,如何做Google广告引流
  • 原文地址:https://blog.csdn.net/weixin_60964305/article/details/132953232