-
第二章-关系数据库
2.1关系数据结构形式化定义:
-
2.1.1关系:
-
单一的数据结构 - 关系:
- 现实世界的实体以及实体间的各种联系均用关系来表示
-
逻辑结构 - 二维表:
- 从用户的角度,关系模型中的数据的逻辑结构是一张二维表
- 关系模型是建立在集合代数的基础上
-
域:域是一组具有相同数据类型的值的集合
- 例:整数、实数、介于默某个取值范围的整数、指定长度的字符串集合、{“男”,“女”},大于100、小于100这些都是
-
笛卡尔积:给定一组域D1,D2....Dn,这些域可以是相同的(也可以是不同),D1,D2....Dn的笛卡尔积如下:
- D1 X D2 X .... X Dn = {(d1,d2,....dn) | diEDi, i=1,2,...,n}
-
例:笛卡尔积就是所取的域(属性)的取值,进行一个大组合,某一个组合都要组合到
- 问题:笛卡尔积:得出的乘积很多是没有意义的,一个导师去教了两个专业,研究生也去了两个专业
-
元组:笛卡尔积中每一个元素(d1,d2,...,dn)称为一个元组
- 例:就是求出笛卡尔积后符号要求的每一行数据就是元组(张清玫,计算机专业,王敏)就是,在二维表中就是一行
-
分量:笛卡尔积元素(d1,d2,...,dn)中的每一个值di称作一个分量
- 例:张清玫,计算机专业,王敏,他们就都是每一个分量
-
基数:一个域允许的不同取值个数称为这个域的基数,若Di(i=1,2,...,n)为有限集,基数为mi(i=1,2,...,n),则D1XD2X...XDn的基数M
- 例:
-
笛卡尔积的表示方法:笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域
-
例:
-
-
-
关系:
-
关系:D1XD2X...XDn的子集称做在域D1,D2,...,Dn上的关系,表示为R(D1,D2,...,Dn)
-
例:学生学习(年龄,姓名,学号)
-
-
元组:关系中的每一个元素是关系中的元组,通常用t表示
-
当n=1时,称该关系为单元关系
-
单n=2时,称该关系为二元关系
-
R(D1,D2,...,Dn) 就是这里的n
-
-
关系的表示:关系也就是一个二维表,表的每一行对应一个元组,表单每列对应一个域,一个属性
-
例:
-
-
-
属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性
-
n个关系必有n给属性
-
-
码:
-
候选码:若关系中的某一属性组的值唯一地标识一个元组,则称该属性组为候选码
-
例:身份证、学号、id号,他们都可以唯一标识一个学生,那么它们就都是候选码
-
-
全码:关系模型的所有属性是这个关系模型的候选码
-
例:我要找一个人,就需要眼睛、鼻子、耳朵都要符合,那这些要求都是属性,要就是候选码
-
-
主码:一个关系又多个候选码,则选低一个为主码
-
主属性:是候选码的属性为主属性
-
非主属性:不是候选码的属性
-
-
三类关系:
-
基本关系:实际存在的表
-
例:实际存在数据库的表
-
-
查询表:查询结果对应的表
- 例:通过id表去用户表,通过id得到用户信息的表
-
视图表:由基本表或其它视图表导出的表,是虚表,不是实际存储的数据
-
-
基本关系的性质:
-
列是同质的(就是这一列是男女就只能是男女)
-
不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给于不同的属名
-
例:性别、名字,都是字符串它们的域就可以是字符串
-
-
列的顺序无所谓,列的次序可以任意交换
-
任意两个元组的候选码不能相同(如:两个人的身份证号是不可能相同的)
-
行的顺序无所谓,行的次序可以任意交换
-
分量必须去原子值,只是规范条件中最基本的一条(就是要保证二维码的完整,不能去合并或拆分单元格)
-
例:
-
-
-
-
单一的数据结构 - 关系:
-
2.1.2关系模式:
-
关系模式是对关系的描述,关系模式是型,关系是值
- 例:核心模式是一个模型,关系是不同的颜色,不同的颜色生成出不同的模型
- 元组集合的结构:属性构成、属性来1自的域、属性域域之间的映像关系
- 一个关系通常由赋值它的元组语义确定(31班是一个关系,32班是一个关系)
-
现实的世界中还存在着完整性约束
- 例:成绩 0 - 100 退休年龄 65
-
定义关系模式:关系模式可以形式化地表示为:R(U,D,DOM,F)
- R:关系名(如:学生信息)
- U:组成该关系的属性名集合(如:学号,姓名,年龄。前面有说到的R(D1,D2,D3...)就是里面的值)
- D:属性组U中属性所来自的域(如:表示取值范围,男或女,u和D的域)
- DOM:属性向域的映像集合(如:表示取值范围的对应映像,如张三就是男的,张三在域中就是男)
- F:属性间的数据依赖关系集合(如:给一个学号就可以知道该学号的是张三还是李四)
-
关系模式与关系:
- 关系模式是静态的、稳定的(如:定义一个,学生信息(学号,姓名,专业),定义完了是这样就是这样了就不会动了 - 静态的)
- 关系是动态的、随时间不断变化(如:一个班里有30个人,现在加进来一个就31个,那关系就是发生了变化,注意模式是不发生变化的)
- 关系是关系模式在某一时刻的状态或内容(如:一个班的30个同学8岁,到时候可能就是31个同学9岁),在实际工作中关系模式和关系往往统称为关系需要上下文加以区分
-
关系模式是对关系的描述,关系模式是型,关系是值
-
2.1.3关系数据库:
-
关系数据库:在一个给定应用领域中,所有关系的集合构成一个关系数据库
- 例:学生表,选课表,成绩表多个关系构成了一个关系数据库
-
关系数据库的型与值
- 关系数据库的型:关系数据库模式,对关系数据库的描述
- 关系数据库模型:若干域的定义,在这些域上定义若干个关系模型
- 关系数据库的值:关系模式在某一时刻对应的关系集合,简称为关系数据库
-
关系数据库:在一个给定应用领域中,所有关系的集合构成一个关系数据库
2.2关系数据结构:
-
2.2.1基本关系操作:
-
常用的关系操作
-
查询:选择、投影、连接、除、并、交、差等,其中:选择、投影、并、差、笛卡尔积是5种基本操作
- 选择:例:在二维表中找到满足要求的记录
- 投影:例:要找张三的成绩,但张三的列可能有学号、年龄等,这些我不需要,只要张三的成绩(就是选择列)
- 并:例:两个表并在一起
- 差:例:一个数据在一个表中,但不在另一个表中
- 数据更新:插入、删除、修改
- 查询的表达能力是取值最重要的部分
-
查询:选择、投影、连接、除、并、交、差等,其中:选择、投影、并、差、笛卡尔积是5种基本操作
-
关系操作的特点
- 集合操作方式:操作的对象和结果都是集合,一次一集合的方式
-
常用的关系操作
-
2.2.2关系数据库语言的分类:
-
关系代数语言
- 用对关系的运算来表达查询的要求
-
关系演算语言 :用谓词(例:结果的真和假)来表达查询要求
- 元组关系演算语言:谓词变元的基本对象是元组变量,代表:APLHA,QUEL
- 域关系演算语言:谓词变元的基本对象的域变量,达标:QBE
-
具有关系代数和关系演算双重特点的语言:
- 达标:SQL - 结构化查询语言
-
关系代数语言
2.3关系的完整性:
- 关系模型中有三类完整性约束:实体完整性、参照完整性、和用户定义完整性
- 实体完整性和参照完整性:必须满足的完整性约束条件,称为两不变性(数据库定义的)
- 用户定义完整性:语言领域需要遵循的约束条件,体现了具体领域的语义约束(是我们自己定义的)
-
2.3.1实体完整性:
-
实体完整性规则:是指若属性A是基本关系R的主属性,则属性A不能取空值
- 空值:是 不知道 或 不存在 或 无意义,不是不写(如:学号是主属性就不能为空)
-
实体完整性的说明: - 主码,主属性不能为空
- 实体完整性规则是针对基本关系而言。一个基本表通常对应现实世界的一个实体
- 现实世界实体是可区分的,具有某种唯一性标识
- 关系模型中以主码作为唯一性标识
- 主码不能取空值,如果取了空值说明存在不可标识和区分的实体,与第(2)点相矛盾
-
实体完整性规则:是指若属性A是基本关系R的主属性,则属性A不能取空值
-
2.3.2参照完整性:
- 在关系模型中实体及实体间的类型都是用关系来描述的,因此可能存在着关系与关系间的引用
-
外码:参照其它表的主码,在本身表中,就把它加外码
- 注意:外码不一定要与相应的主码同名(如:专业号,我可以是专业),当然同名比较好
-
参照完整性规则:
- 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
- 例:刚开学我要选一个班的班长,还没选好你就是取空值,选好了就必须有一个值(但必须是存在的值)
-
2.3.3用户定义的完整性:
- 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能
- 例:说白了就是我们自己去定义要求,我规则成绩最高100,学分只有整数,没有小数
2.4关系代数:
- 关系代数是一种抽象的查询语言,是对关系的运算来表达查询
- 关系代数的运算对象是关系(二维表),运算结果也是关系(二维表)
-
关系代数按运算符的不同可分为传统的集合运算和专门的关系运算
- 集合运算:从关系的水平方向即行的角度进行(行运算)
- 专门的关系:运算不仅涉及行而且涉及列(列和行都可运算)
- 运算符:
-
2.4.1传统的集合运算:
-
∪并:关系R和关系S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组
-
R与S的运算表示为:R∪S:R∪S={t | t∈R V t∈S}
- 理解:V:是或的意思 - 就是t元组在R中有或在S在有就成立
- 运算结果为:n目(有n个属性)关系,由属于R或属于S的元组组成
-
R与S的运算表示为:R∪S:R∪S={t | t∈R V t∈S}
-
-差:关系R和关系S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组
-
R与S的运算表示为:R-S:R-S={t | t∈R ^ tS}
-
理解:^是与 - 差和数学里面的差一样,就是互相减,剩下的就是差
-
运算结果为:n目(有n个属性)关系,由属性R不属于S的元组组成
-
-
R与S的运算表示为:R-S:R-S={t | t∈R ^ tS}
-
-
∩交:关系R和关系S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组
-
R与S的运算表示为:R∩S:R∩S={t | t∈R ^ t∈S}
-
运算结果为:n目(有n个属性)关系,由属性R又属于S的元组组成
-
-
×笛卡尔积:所有的元组都可以进行笛卡尔积
- R:n目关系(n个属性),k1给元组(行),S:m目关系(n个属性),k2个元组(行)
-
R与S的笛卡尔积运算表示R*S
-
运算结果为:行:k1*k2个元组,列:(n+m)列元组的集合,其中元组的前n列是更新R的一个元组,还m列是关系S的一个元组
-
-
-
∪并:关系R和关系S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组
-
2.4.2专门的关系运算
- 关系运算包括:选择、投影、连接、除运算
-
相关记号说明:(下面4段要连起来看,因为不好理解直接用图片)
-
关系模式为R(A1,A2,...,An),它表示一个关系R,t∈R表示t是R的一个元组。t[Ai]表示元组t中相应于属性Ai的一个分量
- 理解:t[Ai]表示元组t中相应于属性Ai的一个分量 - t[1] = 一行元组 - t[1.1] = 一行元组里面的第一个属性
- 若A={Ai1,Ai2,...,Aik},其中Ai1,Ai2,....,Aik是A1,A2,...,An的一部分,则A称为属性列或属性组
-
-
象集例子:
-
-
关系模式为R(A1,A2,...,An),它表示一个关系R,t∈R表示t是R的一个元组。t[Ai]表示元组t中相应于属性Ai的一个分量
-
选择(行):选择又称为限制。在关系R中选择满足给定条件的元组
-
记作:
-
其中:F为寻找条件,基本形式为:
-
-
-
- 其中是班级运算符,它可以是<>≤ ≥ =或<>。X1,Y1等是属名,或为常量,或为简单函数,属性名也可以用它的序来代替
-
-
选择的案例: - 字符的需要加一个单引号(中英文都要)
-
-
-
投影(列):从R中选择出若干属性列组成新的关系
-
-
其中:A:R中的属性列。投影存在主要是从列的精度运算。投影之还不仅取消了原关系中的某些列,而且还可以某些元组(避免重复行)
-
-
-
-
连接(Join)(根据运算符来进行结果运算):又称为连接,表示从两个关系的笛卡尔积中选择属性间满足一定条件的元组(条件就是:)
-
-
运数结果:从R和S的广义笛卡尔积RxS中选择(R关系)在A属性上的值与(S关系)在B属性组上值满足比较关系的元组
- 列:就是R表中属性A值,和S表属性B要满足比较关系
-
两类常用连接运算:
-
1.等值连接():为“=”的连接运算称为等值连接
-
等值连接含义:从关系R与S的广义笛卡尔积中选择A、B属性值相等的那些元组(说白就是取两个表相同的值)
-
-
-
2. 自然连接:一种特殊的等值连接,两个关系在进行比较的分量必须是相同属性组,在结果中把重复的属性列去掉
- 例:就是A表和B表的必须要求属性名是一样的从进行比较,A属性名=K B属性名=K 就进行比较
-
含义:R和S具有相同的属性组B
-
-
自然连接还需要取消重复列,所以是同时进行和列的角度进行运算
-
案例:
-
-
四个概念:悬浮元组、外连接、左外连接、右外连接
-
悬浮元组:两个关系R和S在自然连接时,关系R和S在本舍弃的元组称为悬浮元组
-
外连接:把悬浮元组舍弃的元组也保存在结果关系中,而在其它属性上填上空值(null)
-
左连接:只保存左边关系R的悬浮元组到结果关系中
-
右连接:只保存右边关系S的悬浮元组到结果关系中
-
问题?不符合条件的连接为什么还要放到结果集中?例:学生选课,符合条件的都到了选课表中,不符合的也拿过来不就知道谁没选课了
-
-
-
-
-
1.等值连接():为“=”的连接运算称为等值连接
-
-
除运算:给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
-
R与S的除运算得到一个新的关系P(X),P是R在满足下列条件的元组在X属性列上的投影:
-
元组在X上分量值x的象集Y包含S在Y在投影的集合,记作:
-
-
Yx:x在R中的象集,x=tr[X]
-
例:就是A表中的象集,要包含B表中的值
- 注意:除操作是同时从行和列角度进行运算
-
-
-