数据库讲解(MySQL版)(超详细)【第二章】【上】

一.关系模型

1.1关系数据结构

1.1.1域

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

如:自然数集、整数集、{男、女}等。

同一域中的元素必须是相同的数据类型

1.1.2笛卡尔积

给定两个域D1和D2,其中D1和D2的所有元素做全相乘运算,相乘之后的元素个数为:"n * n"个。

用图片表示为:

1.1.3关系

一组域笛卡尔乘积的一个子集称为一个关系。

图片表示为:

其中,R表示关系的名字 ,n为关系的" "或者" ",R中包含的元组个数被称为R的基数

在实际应用中,我们往往写成一个二维表的形式:"一行对应一个元组"、"一列对应一个域"。

对于每一列,我们往往还会起一个名字,这个名字就是域的名字,不过在二维表中我们称作"属性"

例如:

1.1.4码

码有三类:"候选码 "、"主码"、"外码"。

候选码 :"在一个关系中,能唯一标识元组的属性或最小属性集称为关系的候选码"。

主码 :"若一个关系中有多个候选码,则选其中一个作为主码"。

包含在任何一个候选码中的属性被称为:"主属性 ",不包含在任何候选码中的属性被称为:"非主属性"。

外码 :"现在我们假设有两个关系R1、R2,R1和R2都有一个名为学号 的属性,而对于R1来说,学号不是R1的主码 ,但是对R2来说是R2的主码 ,此时学号就是R1的外码。"

1.1.5关系的性质

1.分量必须是不可再分的最小项,即原子值

2.列的顺序是无关的,列与列之间的顺序可以任意交换。

3.行的顺序是无关的,行与行之间的顺序可以任意交换。

4..关系中不能有两条一模一样的元组。

1.1.6关系完整性约束【重要】

实体完整性规则:

实体完整性约束的是主码

1.主码上的属性不能取空值(NULL、NONE都是非法的)。

2.主码上的属性值不能重复,例如对于"学号"这个主码属性来说,如果有两个学生的学号都是"1010",那么这就是非法的,即主码属性值是唯一的

参照完整性规则:

参照完整性约束的是外码

若属性F是关系R的外码,而属性F又是关系S的主码。

此时:

外码F的值必须是空值或者是关系S中某个已出现的属性F的值

用户定义完整性规则:

用户决定,例如职工的工龄应该小于年龄,人的身高不能超过3m等。

二.关系代数

2.1传统的集合运算

2.1.1并运算

顾名思义,将R于S合并为一个关系,去掉重复元组[重复属性做保留,前面加集合前缀,例如R.学号和S.学号]

记作:R ∪ S。

并运算可以实现对元组的插入操作

2.1.2差运算

顾名思义,在R中存在而不在S中存在的属性【在R中去掉S中的属性后剩余的属性】。

差运算可以实现对元组的删除操作

2.1.3交运算

顾名思义,找出R和S中共有的属性。

对于上述三种运算,我们有下图来直观的表示:

2.1.4广义笛卡尔积运算

用R中的每个元组与S中每个元组分别串接【其实就是相乘】而成的新关系。

广义笛卡尔积形成的新关系集合的为"R与S的度之和"【属性个数】。

基数为"R与S元组数的乘积"【元组个数】。

我们用下面的例子来直观的表示:

关系R与S进行笛卡尔积之后:

可以看到R与S的属性名相同,我们需要在前面加上前缀

2.2专门的关系运算【重要

2.2.1选择运算

我们先来看比较专业的定义 :"选择运算根据某些条件对关系做水平切割"。

再来看作者给出的一种通俗的定义 :"对所有元组进行条件筛选,条件是属性的值"。

记作:

我们再来看一个例子:

假设我们有一个学生表,如下。

现在我想从这么多学生中,筛选出是计算机学院的学生,我们该怎么用呢?

【很简单,这不就是从一大堆元组(在这里元组就是学生)中做筛选嘛,那做筛选我们就用选择运算,并且条件就是**'学院'=='计算机'**就好啦】

公式为:

结果为:

如果需要使用多个属性做多条件筛选 ,我们可以在不同属性之间使用"^"来隔开。

例如:

2.2.2投影运算

专业定义 :"对关系做垂直切割,消去某些列,并按要求重新排列,再删除重复元组"。

通俗定义 :"对属性进行条件筛选"。

注意,作者在这里多次提到了条件筛选,这也算是作者独创的一个词汇了,同学们可以好好立即一下这个条件指的是什么。

记作:

举个例子:

我们仍然使用学生表做例子。假设有一位领导看了一眼学生表,发现每一个学生对应的属性好多啊,有:"学号"、"姓名"、"性别"、"籍贯"、"出生年份"、"学院"等等。

但是领导只对"学号 "和"姓名 "感兴趣,其它的不感兴趣,并且觉得这么多属性有点眼花缭乱的,怎么办呢?

那我们是不是只要对于每个元组只展示"学号 "和"姓名"两个属性就可以啦~

这不就用到我们的投影运算了嘛,我们对元组的属性进行筛选,只展示部分属性即可!

同样对于学生表,我们有如下的操作:

结果为:

怎么样,是不是只展示两个属性了!

2.2.3连接运算

连接运算将两个关系连接成一个新关系。

专业定义 :"对于关系R和S作笛卡尔积后,选取R中的属性A和S中的属性B的值进行比较后,选出满足关系Σ的元组,组成一个新关系"。

通俗定义 :"先进行笛卡尔乘积,再进行选择运算筛选出符合某些条件的元组"

记作:

其中,当Σ为"="时,叫作"等值连接"。

例如我们有下面两个关系:

我们使用下面的式子进行筛选:

结果为:

不过在实际应用中,使用连接运算频率相当低,原因很简单,先进行笛卡尔积再进行筛选,时间复杂度是(m * n)【m和n分别为关系R和S中的元组数】级别的。

2.2.4自然连接【重要】

自然连接在连接运算中是经常使用的运算,非常重要。

通俗定义 :"先笛卡尔积,后筛选出元组,而仅保留筛选条件属性值相同的元组,之后去重"。

记作:

计算过程:

1.R × S

2.设R与S的自然属性是B,找出R中属性B的值与S中属性B的值相同的元组,仅保留这些元组。。

3.去掉S中B列(或去掉R中B列)

例如:

对于下面两个关系进行自然连接,作为筛选条件的属性是两个关系的公共属性:"CNO"。

结果:

我们可以得出三个结论:

"自然连接要求的分量必须是公共属性,如果两个关系没有公共属性,将无法使用自然连接"。

"等值连接不做投影运算,自然连接做投影运算【去掉重复属性】"。

"自然连接一定是等值连接,等值连接不一定是自然连接"。

2.2.5除运算【困难

除运算绝对算是数据库运算中最为复杂的运算,由于官方给出的除运算定义相当冗杂,且难以理解,故作者给出个人的理解。

定义:"除运算的操作空间不是某一个元组或者某个属性值的操作,而是对于某一个或多个属性全集的操作"。

再通俗点来说:"即对于某一个属性的所有取值可能进行筛选,即一个元组对应一个属性的取值可能,如果有N个取值可能,那我们需要有N个元组来一一对应"。

举个例子:

对于关系R和关系S,它们两个的公共属性是"B",在对这两个关系做除运算时,筛选条件一定是"B"而不是"A"【除运算操作的是公共属性集合】。

我们来分析一下,A中哪一个属性值对应了B中的所有属性值呢?

A1 -> B1

A1 -> B2

很可惜,缺少了"A1 -> B3 "这一种可能,所以A1不是

A2 -> B1

A2 -> B2

A2 -> B3

恭喜,A2对应了B中的所有取值可能,因此A2是

A3 -> B3

很可惜,缺少了"A3 -> B1 "和"A3 -> B2 "这两种可能,所以A3也不是

因此关系R除关系S的最终答案就是:{A2}

相关推荐
夜泉_ly2 小时前
MySQL -安装与初识
数据库·mysql
qq_529835353 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231117 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql