本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

关系数据库

关系代数

  • 关系模型与其它模型相比,最有特色的是它的数据库语言
  • 这种语言灵活方便、表达能力和功能都很强
  • 目前关系数据库所使用的语言一般都具有定义、查找、更新和控制一体化的特点,而查询是最主要的部分
  • 所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示
  • 因此,关系运算是设计关系数据语言的基础
  • 按表达查询的方式不同,关系运算可分为关系代数和关系演算两大类

关系代数的分类及其运算符

  • 关系代数式对关系进行集合代数运算,是基于关系代数的操作语言,称为关系代数语言,简称关系代数
    □ 它是由IBM在一个实验性的系统上实现的,称为ISBL(Information System Base Language)语言
    □ ISBL的每个语句都类似于一个关系代数表达式
  • 关系代数的运算对象是关系,运算结果也是关系,关系代数用到的运算符主要包括四类:
    • 集合运算符:∪(并),-(差),∩(交),X(广义笛卡尔积);
    • 专门的关系运算符:σ(选择),∏(投影),∞(连接),*(自然连接),÷(除);
    • 算术比较运算符:>(大于),≥(大于等于),<(小于),≤(小于等于),=(等于),≠(不等于);
    • 逻辑运算符:∧(与),∨(或),┒(非)

关系代数的运算按运算符的不同主要分为两类:

  • 传统的集合运算:把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。包括并、差、交和笛卡尔积等运算
  • 专门的关系运算:不仅涉及行运算,也涉及列运算。这种运算是为数据库的应用而引进的特殊运算。包括选择、投影、连接和除法等运算

传统的集合运算

  • 传统的集合运算是二目运算,是在两个关系中进行的,但是并不是任意的两个关系都能进行这种集合运算,而是要在两个满足一定条件的关系中进行运算。那么,对关系有什么要求呢?看下面的定义👇
    • 设给定两个关系R、S,若满足:
      (1)具有相同的度n;
      (2)R中第i个属性和S中第i个属性必须来自同一个域
      则说关系R、S是相容的
    • 除笛卡尔积外,要求参加运算的关系必须满足上述的相容性定义

🔶并(Union)

  • 关系R和关系S的并,是由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系。记作:R∪S={t|t∈R∨t∈S}
  • 对于关系数据库,记录的插入和添加可通过并运算实现
  • 一个元素在并集中只出现一次
  • R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
    在这里插入图片描述

🔶差(Difference)

  • 关系R与关系S的差由属于R而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R-S={t|t∈R ∧ ┒t∈S}
  • 通过差运算,可以实现关系数据库记录的删除
    在这里插入图片描述

🔶交(Intersection)

  • 关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R∩S={t|t∈R t∈S}
  • 如果两个关系没有相同的元组,那么它们的交为空
  • 两个关系的并和差运算为基本运算(即不能用其它运算表达的运算),而交运算为非基本运算,交运算可以用差运算来表示 R∩S=R-(R-S)
    在这里插入图片描述

🔶广义笛卡尔积(Extended Cartesian Product)

  • 两个分别为n目m目关系R和S的广义笛卡尔积是一个 (n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组。记作:R×S={tr⌒ts| tr∈R ts∈S}
  • 关系的广义笛卡尔积可用于两关系的连接操作
  • 例如,下图关系R(a)和S(b)为相容关系,©为R与S的并,(d)为R与S的交,(e)为R与S的差,(f)为R与S的广义笛卡尔积
    在这里插入图片描述
    在这里插入图片描述

专门的关系运算

  • 由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算

  • 为叙述上的方便先引入几个概念
    (1)设关系模式为R(A1,A2,…,An),它的一个关系为R,t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量👇
    在这里插入图片描述
    (2)若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或域列,Ã则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合👇
    在这里插入图片描述
    (3)元组的连接tr⌒ts:R为n目关系,S为m目关系,tr∈R,ts∈S,tr⌒ts称为元组的连接(concatenation),它是一个n+m列的元组,前n个分量为R的一个n元组,后m个分量为S中的一个m元组
    例如👇
    在这里插入图片描述
    (4)给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的象集(Image Set)为Zx={t[Z] | t∈R,t[X]=x},它表示R中的属性组X上值为x的诸元组在Z上分量的集合👇
    在这里插入图片描述
    在这里插入图片描述

  • 选择(Selection)

    • 选择又称限制(Restriction)
    • 选择运算是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新关系,记作:σF(R )={t|t∈R∧F(t)为真}
      🔹 σ为选取运算符;
      🔹 F表示选取的条件,是一个由运算对象(属性名、常数、简单函数)、算术比较运算符(> ,≥,<,≤,=,≠)和逻辑运算符(∨ ,∧, ┐)连接起来的逻辑表达式,结果为逻辑值“真”或“假”;
    • 选择运算实际上是从关系R中选取使逻辑表达式为真的元组,是从行的角度进行的运算
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      以下例题均是以上图👆所示的五个关系为例进行运算
      例. 查询计算机系的全体学生
      👉σDEPT=’计算机’ (S) 或 σ5=’计算机’ (S)(其中5为DEPT的属性序号)
      查询结果如下图👇
      在这里插入图片描述
      例. 查询工资高于1000元的男教师
      👉σ(SAL>1000) ∧(SEX=’男’) (T)
      查询结果如下图👇
      在这里插入图片描述
  • 投影(Projection)

    • 投影运算也是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系在垂直方向进行的运算,从左到右按照指定的若干属性及顺序取出相应列,应删去重复元组。记作:ΠA(R )={t[A] | t∈R}
      🔹 A为R中的属性列,Π为投影运算符
    • 从其定义可看出,投影运算是从列的角度进行的运算,这正是选取运算与投影运算的区别所在。选取运算是从关系的水平方向上进行运算的,而投影运算则是从关系的垂直方向上进行的
    • 投影之后,新关系与原关系可能不相容

    例.查询教师的姓名,教师号及其职称。
    👉ΠTN,TNO,PROF(T) 或 Π2,1,5(T) (其中2,1,5分别为TN、TNO和PROF的属性序号)
    结果如下图👇
    在这里插入图片描述
    结果表明投影运算可以改变关系的属性次序

    例. 查询教师关系中有哪些系
    👉ΠDEPT(T)
    结果如下图👇
    在这里插入图片描述
    由上例可以看出,投影后取消了某些属性列后,就可能出现重复行,应该取消这些完全相同的行。所以投影之后,不但减少了属性,元组也可能减少,新关系与原关系不相容

    例. 查询讲授C5课程的教师号。
    👉ΠTNOCNO=’C5’(TC))
    结果如下图👇
    在这里插入图片描述

  • 连接(Join)

    • 连接运算是二目运算,是从两个关系的笛卡尔积中选取满足连接条件的元组,组成新的关系

    • 设关系R(A1,A2,…,An)及S(B1,B2,…,Bm),连接属性集X包含于{A1,A2,…,An},及Y包含于{B1,B2,…,Bm},X与Y中属性列数目相同,且相对应属性有共同的域。【若Z={A1,A2,…,An}/X(/X:去掉X之外的属性)及W={B1,B2,…,Bm}/Y,则R及S可表示为R(Z,X),S(W,Y)】关系R和S在连接属性X和Y上的连接,就是在R×S笛卡尔积中,选取X属性列上的分量与Y属性列上的分量满足给定θ比较条件的那些元组,也就是在R×S上选取在连接属性X,Y上满足θ条件的子集,组成新的关系,新关系的度为n+m。记作:(R∞S)XθY={tr⌒ts |tr∈R∧ts∈S∧tr[X] θ ts[Y]为真}
      🔹 ∞是连接运算符
      🔹 θ为算术比较运算符,也称θ连接
      🔹 XθY为连接条件
           θ为“=”时,称为等值连接;
           θ为“<”时,称为小于连接;
           θ为“>”时,称为大于连接

    • 连接运算为非基本运算,可以用选取运算和广义笛卡尔积运算来表示:R∞S=σxθy(R×S)

    • 在连接运算中,一种最常用的连接是自然连接,所谓自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在连接结果中把重复的属性列去掉。即如果R与S具有相同的属性组Y,则自然连接可记作:R∞S={tr⌒ts |tr∈R∧ts∈S∧tr[Y]=ts[Y]}

    • 自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件的元组,再进行投影,去掉重复的同名属性,组成新的关系

    例. 如图 (a)、(b)所示的两个关系R与S,©为R和S的大于连接(C>D),(d)为R和S的等值连接(C=D),(e)为R和S的等值连接(R.B=S.B),(f)为R和S的自然连接👇
    在这里插入图片描述
    结果如下图👇
    在这里插入图片描述
    在这里插入图片描述

    • 通过上面👆的例题,我们可以看出等值连接与自然连接的区别:
      (1)等值连接中不要求连接属性的属性名相同,而自然连接要求连接属性的属性名必须相同,即两关系只有在同名属性才能进行自然连接【如上例R中的C列和S中的D列可进行等值连接,但因为属性名不同,不能进行自然连接】
      (2)等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接【如上例R中的B列和S中的B列进行等值连接时,结果有两个重复的属性列B,而进行自然连接时,结果只有一个属性列B】

    例. 查询讲授数据库课程的教师姓名
    👉ΠTNCN=’数据库’(C ) ∞ ΠTNO,CNO(TC) ∞ΠTNO,TN(T)) 或 ΠTNTNOCN=’数据库’(C ) ∞TC) ∞ ΠTNO,TN(T))
    结果如下图👇
    在这里插入图片描述

  • 除法(Division)

    • 除法运算是二目运算
    • 前提:设有关系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={tr[X]|tr∈R∧Πy(S)⊆Yx}
      🔹 Yx为x在R中的象集,x= tr[X]
    • 除法是既从列的角度又从行的角度对关系R进行运算。首先,新关系P中只保留属性列X;其次,新关系P中只保留这样的X值x:S在Y上投影的集合是x的象集Yx的子集
    • 除法运算为非基本运算,可以表示为:R÷S=Πx(R )-Πxx(R )× ΠY(S)-R)

    例. 已知关系R和S,如下图(a),(b)所示,则R÷S如图©所示👇
    在这里插入图片描述
    与除法的定义相对应,本题中X={A,B,E},Y={C,D},Z={F}。其中,在关系R中,X可以取三个值{(a1,b2,e1),(a2,b4,e3),(a3,b5,e4)},它们的象集分别为:
         ①(a1,b2,e1)的象集为{(c3,d5),(c4,d6)}
         ②(a2,b4,e3)的象集为{(c1,d3)}
         ③(a3,b5,e4)的象集为{(c2,d8)}
    S在Y上的投影为{(c3,d5),(c4,d6)}
    显然只有(a1,b2,e1)的象集包含S在Y上的投影,所以R÷S={(a1,b2,e1)}

    • 除法运算同时从行和列的角度进行运算,适合于包含“全部”之类的短语的查询

关系数据库——关系数据结构及形式化定义
关系数据库——关系操作&&关系模型的完整性


在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐