数据库2-第二章:关系数据库及关系演算

第五讲:关系数据结构及关系完整性

关系数据结构

笛卡尔积
  • 笛卡尔积:给定一组域D1,D2,…,Dn,允许其中某些域是相同的。
    1.其笛卡尔积是: 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})\mid d_{i}\in D_{i},i=1,2,...,n\} D1×D2×...×Dn={(d1,d2,...dn)diDi,i=1,2,...,n}
    2. 所有域的所有取值的任意组合,笛卡尔积可以看着是关系的“域”
    3.基数:若Di(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_{i=1}^n m_{i} M=i=1nmi
  • 笛卡尔积的表示方法
    • 笛卡尔积可表示为一张二维表
    • 表中的每行对应一个元组,表中的每列对应一个域
关系数据结构
域:

域是一组具有相同数据类型的值的集合。如:整数、实数等

关系:(笛卡尔的一个子集)

D 1 × D 2 × . . . × D n D_{1}\times D_{2}\times ...\times D_{n} D1×D2×...×Dn的子集叫做在域D1,D2…Dn上的关系,表示为R(D1,D2…Dn)。R:关系名。n:关系的目或度

  • 元组:关系中的每个元素,二维表中的一行(d1,d2,…,dn)叫作一个n元组或简称元组,通常用t表示
  • 元组中的一个元素为分量
  • 属性:表中的一列
    1. 关系中不同的列可以对应相同的域.
    2. 为了加以区分,必须对每列起一个名字,称为属性
    3. n目关系必有n个属性
  • 码:(1)候选码:关系中的某一属性组的值可唯一标示一个元组。则该属性组为候选码。(2)全码:最极端的情况,关系模的所有属性组是这个关系模式的候选码
  • 关系定义在单个属性上的为单元关系,定义在两个属性上的为二元关系
  • 基本关系的性质
    1.列是同质的
    2.不同的列可出自同一个域
    3.列的顺序无所谓,列的次序可任意交换
    4.任意两个元组的候选码不能相同
    5.行的顺序无所谓,次序可任意交换
    6.分量必须取原子值(基本原则)
    7.关系必须是笛卡尔集的某个子集才有实际意义。
关系模式
  • 关系模式是型,关系是值。
  • 关系模式是对关系的描述
    • 元组集合的结构:1.属性的构成2.属性来自的域3.属性和域之间的映象关系
    • 完整性约束条件
  • 关系模式可以形式化地表示为:
    R(U,D,DOM,F)。
    R为关系名,
    U为组成该关系的属性名集合,
    D为U中属性所来自的域,
    DOM为属性向域的映象集合,
    F为属性间数据的依赖关系的集合
    域名及属性向域的映像常常直接说明为属性的类型、长度

关系完整性约束

  • 实体完整性和参照完整性:关系模型必须满足的完整性约束条件称为关系的两个不变性,应由关系系统自动支持
  • 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束
实体完整性
  • 关系的主码中的属性即主属性不能取空(无意义,不存在为空值),主码要在关系模型中做唯一标示的
参照完整性
  • 参照完整性:在关系模型中实体积实体间的联系都是用关系来描述的,自然存在着关系与关系间的引用
    • 设F是基本关系R的一个或一组属性,但不是关系R的码。若F与基本关系S的主码Ks 相对应,则称F是R的外码。外码取值必须满足参照完整性。
    • 基本关系R称为参照关系,基本关系S称为被参照关系或目标关系
      • 外码F可以取空值(F的每个属性均为空值)
      • 外码F可以等于S中某个元组的主码值
用户定义的完整性
  • 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用承担这一功能

关系代数

传统集合操作

  • 关系代数语言
    • 用对关系的运算来表达查询要求
  • 关系演算语言:用谓词来表达查询要求
    • 元组关系演算语言
      • 谓词变元的基本对象是元组变量
      • 代表:APLHA,QUEL
    • 域关系演算语言
      • 谓词变元的基本对象是域变量
      • 代表:QBE
  • 具有关系代数和关系演算双重特点的语言
    • 代表:SQL
关系代数
  • 关系代数:抽象查询语言,对关系的运算来表达查询
  • 关系代数
    • 运算对象是关系,结果是关系
    • 运算符有两类:集合运算符和专门的关系运算符
      在这里插入图片描述
传统的集合运算
  • 传统的集合运算主要指并、交、差、广义笛卡尔积四种运算
  • 要求参与运算的两个关系必须是相容的
  • 相容:两个关系的列数()相同,对应的属性列出自同一个域。
  • 并交差都以行来运算
  • 并:去掉重复行
  • 差:R-S——>R中减去S中相同的元组
    在这里插入图片描述
  • 广义笛卡尔积:n目的关系R,和m目的关系S的广义笛卡尔积为n+m关系,记为R × \times ×S。其中前n个属性为R的属性集,前m个属性为S的属性集合且R × \times ×S中的每个元组为每一个R元组和所有S元组的组合。所有可能属性以行连接运算

在这里插入图片描述

专门的关系运算
选择

选择:水平上选符号条件F的元组,结果为原有关系的子集,在关系R中选择满足给定条件的元组,组成一个新的关系。 σ F ( R ) \sigma_{F}(R) σFR:在R中选,满足F条件的

查询图书关系中单价大于50元的图书信息
σ 单 价 > 50 ( 图 书 ) \sigma_{单价>50}(图书) σ>50

投影
  • 投影从关系R上选取若干属性列A,并删除重复行,组成新的关系。(从列的角度计算)。记做: Π A ( R ) \Pi_{A}(R) ΠA(R)
    投影中下标处多个属性的用逗号相隔。

图书馆管理系统
(1)查询图书关系中所有图书的书名及出版社。
解: 仅涉及目标属性书名与出版社,并无选择条件,是投影。则
Π 书 名 , 出 版 社 ( 图 书 ) \Pi_{书名,出版社}(图书) Π()
(2)查询书名为”大学英语“的作者及库存数量。
解:涉及选择条件为”大学英语“,且有明确的目标属性要求,故既要选择又要投影。
Π 作 者 , 库 存 量 ( σ 书 名 = ‘ 大 学 英 语 ’ ( 图 书 ) ) \Pi_{作者,库存量}(\sigma_{书名=‘大学英语’}(图书)) Π(σ=())

连接:

连接操作是由选择和笛卡尔积操作组合而成的。

  • 等值连接: R ⋈ A = B S R\underset{A=B}\Join S RA=BS
    从关系R和S的广义笛卡尔积中选取A、B属性组值相等的那些元组(行)
     ①求R × \times ×S。②选择R和S公共属性相同的元组。
  • 自然连接: R ⋈ S R\Join S RS
     是一种特殊的等值连接;在R × \times ×S中,选取公共属性上具有相同值得元组,并去掉相同的属性列,组成新关系。两个关系通过共有的属性,即表的某一列进行连接。
     R与S中的公共属性即属性集的交集(相同名称与类型);在结果中把重复的属性列去掉。
     ①求R × \times ×S。②选择R和S公共属性相同的元组。③在等值连接计算基础上去掉重复的属性列。
    在这里插入图片描述
除:

R ÷ S R\div S R÷S的结果是,一个关系某些元组,拥有另一个关系的某一字段的所有值。

  • 一般求全部B的A用除,A÷B
    R ÷ S R\div S R÷S,设R为r元关系,表示R(X,Y),S为s元关系,表示S(Y),其中X,Y可以是单个属性或属性集,当tr[x]=x时,x在R中的象集Yx定义为 Y x = { t r [ Y ] ∣ t r ∈ R ⋀ t r [ X ] = x } Y_{x}=\{t_{r}[Y]\mid t_r\in R\bigwedge t_{r}[X]=x\} Yx={tr[Y]trRtr[X]=x}
    除法定义为 R ÷ S = { t r [ X ] ∣ t r ∈ R ⋀ S ( Y ) ⊆ Y x } R\div S=\{t_{r}[X]\mid t_r\in R\bigwedge S(Y)\subseteq Y_{x}\} R÷S={tr[X]trRS(Y)Yx}
    R ÷ S R\div S R÷S的结果可以表示为P(X),P(X)是关系R中属性列上的投影构成,但要满足X属性值在Y上的象集包含S(Y)的条件。
    在这里插入图片描述
  • 象集的本质是一次选择行的运算和一次选择列的运算
  • 求x1在表A中的象集,就是先选出所有x属性中x=x1的那些行,然后选择出不包含x1的那些列
    R ÷ \div ÷S除法三步走:
    1. 找出表S中与R属性相同的那些列,抽出来
    2. 求表R中某个A属性各个不同的x值对应的象集
    3. 找到x的所有值,这个x要满足:表S是x的象集的子集,(写关系S在其某些属性B、C上的投影集。找罗列出的某个值对应的象集包含关系S的投影集)这就是R ÷ \div ÷S的结果

例题:
在这里插入图片描述
解答:
在这里插入图片描述
例题2
在这里插入图片描述
在这里插入图片描述
小结:
在这里插入图片描述

关系运算的练习与感悟
  • 找出其中的某一属性——利用投影
  • 连接是两种表连接,两表要有公共属性才能连
  • 一道题中的目标一般用投影,条件一般用选择
  • 否定形式的题直接用 ≠ \neq =是会有问题的
  • 问即…又…的题,不能用且( ⋀ \bigwedge )直接连在一起再运算,但或的可以用( ⋁ \bigvee )

例如
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述 例2:
在这里插入图片描述
在这里插入图片描述 选课表

学号课程号成绩
1801C180

计算机是一行一行扫描的,据表分析,则若写为 Π 学 号 ( σ 课 程 号 = ‘ C 2 ’ ⋂ 课 程 号 = ‘ C 3 ’ ( 选 课 ) ) \Pi_{学号}(\sigma_{课程号=‘C2’\bigcap课程号=‘C3’}(选课)) Π(σ=C2=C3())错误的写法,但若题目为或则可相应的改为并这样写

关系演算

要求元组关系演算会看会写,域理解

  • 以数理逻辑中的谓词演算为基础
  • 按谓词变元不同进行分类
    • 1.元组关系演算:以元组变量为谓词变元的基本对象。如ALPHA语言
    • 2.域关系演算 :以域变量为谓词变元的基本对象,如:QBE
      元组:某行
      域:某列
元组关系演算

一般形式:{t| Φ \Phi Φ(t)},其中t是元组变量, Φ \Phi Φ(t)为元组关系演算公式,t要满足该公式
1.原子公式
(1)R(t);表示t是R的一个元组
(2)t[i] θ \theta θu[j];其中 θ \theta θ比较运算符,t[i] θ \theta θu[j]表示t元组的第i个分量与u元组的第j个分量满足比较符 θ \theta θ条件
(3)t[i] θ \theta θc或c θ \theta θt[i];表示t元组的第i个分量与常量c满足比较符 θ \theta θ条件

在这里插入图片描述
上题中公式的含义:存在读者任意借阅…

  • 其中u[1]=v[1]表示借阅表和读者表,两表自然连接;
  • v[2] ≠ \neq =‘JSJ14001’表示借阅表的第二个分量不等于JSJ14001;
  • t[1]=u[1]将该元组的第一分量目标u[1]送给t输出
域关系演算

将原来元组变量换为域变量,按列来看

在这里插入图片描述
有三列,关系来自R,第一个分量=d,第三个分量<8
在这里插入图片描述
u2=‘JSJ14001’是条件,t1=u1是目标

练习题

实例练习—假设tsxs数据库有3个关系模式:

顾客(顾客编号,姓名,年龄,性别,收货地址)
图书(图书编号,书名,出版社,单价,库存量)
购买(顾客编号,图书编号,购买金额)

1.用关系代数表达式实现下列(1)—(5)小题:

(1)查询顾客姓名为“刘振”的收货地址。
Π 收 货 地 址 ( σ 姓 名 = ′ 刘 振 ′ ( 顾 客 ) ) \Pi_{收货地址}(\sigma_{姓名='刘振'}(顾客)) Π(σ=())

(2)查询30岁以下女性顾客的信息。
σ 年 龄 < 30 ∧ 性 别 = ′ 女 ′ ( 顾 客 ) \sigma_{年龄<30\wedge性别='女' }(顾客) σ<30=)

(3) 查询“use102”购买的图书名称和单价。
Π 书 名 , 单 价 ( σ 顾 客 编 号 = ′ u s e 10 2 ′ ( 购 买 ) ⋈ 图 书 ) \Pi_{书名,单价}(\sigma_{顾客编号='use102'}(购买)\Join 图书) Π(σ=use102())

(4)查询购买了图书“考研冲刺”的顾客姓名。
Π 姓 名 ( σ 书 名 = ′ 考 研 冲 刺 ′ ( 图 书 ) ⋈ 购 买 ⋈ 顾 客 ) \Pi_{姓名}(\sigma_{书名='考研冲刺'}(图书)\Join 购买\Join顾客) Π(σ=())

(5)查询购买了全部图书的顾客编号。
Π 顾 客 编 号 , 图 书 编 号 ( 购 买 ) ÷ Π 图 书 编 号 ( 图 书 ) \Pi_{顾客编号,图书编号}(购买)÷ \Pi_{图书编号}(图书) Π()÷Π()

2.用元组关系演算实现下列小题:

(6)查询50岁以上性别为“男”的顾客姓名。
{ t ∣ ( ∃ u ) ( 顾 客 ( u ) ∧ u [ 3 ] > 50 ∧ u [ 4 ] = ′ 男 ′ ∧ t [ 1 ] = u [ 2 ] ) } \{t|(\exists u)(顾客(u)\wedge u[3]>50 \wedge u[4]='男'\wedge t[1]=u[2])\} {t(u)((u)u[3]>50u[4]=t[1]=u[2])}

(7)查询“use102”购买的图书名称和单价。
{ t ∣ ( ∃ u ) ( ∃ v ) ( 图 书 ( u ) ∧ 购 买 ( v ) ∧ u [ 1 ] = v [ 2 ] ∧ v [ 1 ] = ′ u s e 10 2 ′ ∧ t [ 1 ] = u [ 2 ] ∧ t [ 2 ] = u [ 4 ] ) } \{t|(\exists u)(\exists v)(图书(u)\wedge 购买(v)\wedge u[1]=v[2]\wedge v[1]='use102'\wedge t[1]=u[2]\wedge t[2]=u[4])\} {t(u)(v)((u)(v)u[1]=v[2]v[1]=use102t[1]=u[2]t[2]=u[4])}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值