第二章 关系数据库

2.1 关系

关系是关系模型的一种数据结构。
逻辑结构上体现为一张表:
在这里插入图片描述

  • 关系的每一列称为属性,例如表中的user_id是用户身份标识号,属性可以描述这一列的值的意义。
  • 关系有时也称为

基本概念

记作D(domain)
在这里插入图片描述

笛卡尔积

笛卡尔积是一种域上的运算,记为:
D 1 × D 2 × . . . × D n = { ( d 1 , d 2 , . . . , d n ) ∣ d i ∈ D i , i = 1 , 2 , . . . , n } D_1×D_2×...×D_n = \{(d_1, d_2, ...,d_n)|d_i∈D_i, i=1,2,...,n\} D1×D2×...×Dn={(d1,d2,...,dn)diDi,i=1,2,...,n}

目前有三个域(教师、课程、学生)
在这里插入图片描述
用一个可能不太准确,但容易理解的方式描述笛卡尔积:笛卡尔积就是不同域中元素的组合
在这里插入图片描述
比如这里是【李怡】和【数学、英语】、【学生】的组合。

  • 笛卡尔积是没有语义的,就好像你不能确保【李怡】教3个科目,科目的学生恰好是那3个学生。

  • 笛卡尔积中的每一个组合(每一行)称为一个n元组,这取决于每一行有多少列(在上述的例子中是3元组),记为:
    ( d 1 , d 2 , . . . , d n ) (d_1, d_2,...,d_n) (d1,d2,...,dn)

  • 元组中的某一个值称为分量([ 李怡 | 英语 | 王杰 ] 中英语就是一个分量)。

  • 一个域中允许的不同取值叫做这个域的基数(教师的基数=2,学科的基数=2,学生域的基数=3)。
    笛卡尔积中的基数 = 每一个域的基数的乘积

关系

  • 关系就是笛卡尔积的子集,表示为:
    R ( D 1 , D 2 , . . . , D n ) R(D_1, D_2, ..., D_n) R(D1,D2,...,Dn)
    R表示Relation;n是关系的,就是关系有多少个属性。
    特别的,n=1时称为单元关系,n=2时称为二元关系
  • 候选码:某组属性可以确定一个唯一的元组。
    ①这组少一个属性都不行
    ②可以只有一个属性
  • 如果一个关系有多个候选码,则选择其中一个作为主码
    例如学生信息表中,有两个候选码:
    1.{学号}
    2.{身份证号}
    此时如果选择{学号}作为学生的唯一标识,那么{学号}称为主码(选择{身份证号}当然也是可以的)。
  • 主属性:候选码中的属性。
  • 非主属性:不属于候选码中的属性。
  • 极端情况下,关系中的所有属性就是这个关系的候选码,那么称这个候选码为全码
关系表中的三种类型
  • 基本表(又称为基本关系基表
    实际存在的表:
    在这里插入图片描述
  • 查询表
    根据查询结果得到的表。
    查询年龄大于20岁的用户:
    在这里插入图片描述
  • 视图表
    是一个虚拟表,不会存在于磁盘空间中。
    其实就是一些查询语句的集合,被封装了起来,像函数一样。
    这里将查询年龄20岁以上的用户这个需求,封装成了一个视图
    在这里插入图片描述
    那么视图表:
    在这里插入图片描述
基本关系的性质

基本关系的每一个分量,都必须是不可分的。
也就是每一个数据项都要是基本的数据类型(整型、字符串、…),不能是一个表。

2.1.2关系模式

关系模式在第二章表示为R(U, D, DOM)
U:组成该关系的属性名集合
D:U中属性所来自的域
DOM:属性向域的映像的集合

吐槽一下课本,这DOM的描述说的是人话吗?

举个例子,某个关系如下:
在这里插入图片描述
那么:
U:{教工号、学号、课程号}
D:{教师、学生、课程}
DOM:{DOM(教工号) = 教师、DOM(学号)=学生、DOM(课程号)=课程}

所谓映射就像函数一样,给它一个输入,得到一个输出。
DOM就是输入属性得到该属性的

2.2 关系操作

增删改查,懂得都懂。

插入、删除、修改、查询。

  • 查询操作有:
    选择投影连接笛卡尔积等。
  • 操作的对象和结果都是集合。

2.3 关系的完整性

  • 实体完整性
    如果属性(组)A是关系R的主属性,那么A不为空。

其实主属性就是区分出关系中的某个元组(某一行)的条件,如果条件为空,也就是无条件,那么是无法区分关系中的任何元组的。

  • 参照完整性

学生(学号,姓名,专业)
课程(课程号,课程名,学分)
选修(课程号学号,学时)
学号是学生的主码,课程号是课程的主码,课程号学号是选修的主码。
参照指的是:一个基本关系的属性引用了别的关系的属性。

假设F是关系R的属性(一个或一组),但F不是关系R的主码,Ks关系S的主码。如果F与Ks对应(相同),则称F是R的外码,R为参照关系,S为被参照关系目标关系
在这里插入图片描述
R中的每个元组在F属性上的值要么为空,要么为关系S上某个元组的主码值。

学生(专业号学号,姓名)
专业(专业号,专业名称)
学生关系中,专业号要么为空(未分配专业),要么为专业中的某个主码值(某个专业)

  • 用户定义的完整性
    用户自定义的完整性有很多,比如:
    某个属性必须非空
    某个属性的值必须在0~100之间(成绩)
    等等。

2.4 关系代数

2.4.1传统的集合运算

交、并,大家都清楚。


  • 关系R与关系S的差记作R-S,就是除去R中属于S的部分。
    在这里插入图片描述
  • 笛卡尔积
    关系R和关系S的笛卡尔积记作:
    R × S = { t r    t s ⏠ ∣ t r ∈ R ∧ t s ∈ S } R×S = \{\overgroup{t_r \ \ t_s}|tr \in R\land ts\in S \} R×S={tr  ts trRtsS}

2.4.2 专门的关系运算

1.选择

σ F ( R ) = { t ∈ R ∧ F ( t ) = t r u e } σ_F(R) = \{ t∈R∧F(t)=true \} σF(R)={tRF(t)=true}
其中F为条件,选择运算的效果是:筛选出关系中满足条件F的元组。


在这里插入图片描述
选择条件:年龄大于20:
在这里插入图片描述

2.投影

从关系中选出某一列作为新的关系。
∏ A = { t [ A ] ∣ t ∈ R } \prod_A = \{ t \quad [A] | t∈R \} A={t[A]tR}
在这里插入图片描述

3.连接

连接也称为θ连接,它是从两个关系的笛卡尔积中选出满足条件的部分,记作:
R ⋈ A θ B S = { t r    t s ⏠ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R \underset{AθB}⋈ S = \{ \overgroup{t_r \ \ t_s} | t_r∈R ∧t_s∈S∧t_r[A]θt_s[B] \} RAθBS={tr  ts trRtsStr[A]θts[B]}
θ为等值连接,从关系R和S中选出属性A和B相等的元组,拼接成同一个元组。
自然连接会去掉连接后的元组中的属性A或属性B(因为它们两个都是相等的)。
在这里插入图片描述

3.1 外连接

等值连接其实是将两个关系中相同属性的部分筛选出来。
有两个表:
在这里插入图片描述

两张表都有有个共同的属性:专业代号,因此通过这个属性,我们能查询出每个学生对应的专业。
在这里插入图片描述

全外连接:

专业代号是冗余的。
在这里插入图片描述

左外连接与右外连接

关系R与S做按照属性F等值连接时,R中的某些元组可能不存在与S中F属性相同的值。(S中的某些元组也有可能在R中找不到对应)
那么在全外连接中会被舍弃,这些被舍弃的元组叫做悬浮元组

按照例子中就是指:
某个学生的专业编号由于某些原因错误了,在专业表中查找不到。
某个专业太冷门了,没有一个学生选择。

还记得R与S连接记为:
R ⋈ A θ B S R \underset{AθB}⋈ S RAθBS
左外连接就是保留R中的悬浮元组右外连接就是保留S中的悬浮元组

将R记为学生表,S记为专业表

  • 左外连接(保留学生表中的悬浮元组
    在这里插入图片描述

  • 右外连接(保留专业表中的悬浮元组
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值