少女祈祷中...

第二章 关系数据库

一、关系、关系模式和关系数据库

  • 域:域是一组具有相同数据类型的值的集合(整数、实数、介于某个取值范围的整数)

例如:D1=SUPERVISOR={张三、李四};D2=SPECIALITY={计算机专业,信息专业};D3=POSTGRADUATE={王五、赵六}

  • 笛卡尔积:给定一组域D1、D2、…Dn,D1×D2×Dn={(d1,d2,…dn)|di∈Di,i=1,2,…,n},也就是所有域的所有取值的一个组合,不能重复
  • 元组:笛卡尔积中的每一个元素叫做一个n元组,例如(张三,计算机专业,李勇)
  • 分量:笛卡尔积元素中的每一个值di叫做一个分量,例如张清枚、计算机专业、李勇、刘晨等
  • 基数:若Di为有限集,基数为m(元素的个数),则D1×D2×…Dn的基数为每个m的求积
  • 笛卡尔积的表示方法:一张二维表,每行=一个元组,每列=一个域(给出三个域,每个域的基数为2,则基数总数为8)
  • 关系:D1×D2…的子集叫做在D1,D2,…上的关系,记作R(D1,D2,…Dn)
  • 元组:关系中的每个元素是关系中的元组,通常用t表示
  • 关系的表示:二维表,每行对应一个元组,每列为一个列
  • 属性:关系中不同列可以对应相同的域。为了加以区分而每列取名字为属性

  • 候选码:关系中的某一属性组能够唯一的标识一个元组,而其子集不能,则称该属性组为候选码(比如学号+课程号可以匹配成绩表中的唯一一个候选键)

  • 主码:若一个关系有多个候选码,则选定其中一个为主码

  • 主属性:候选码的主属性

  • 非主属性/非码属性:不包含在任何候选码中属性

关系的类别

  • 基本关系(基本表或基表):实际存在的表

  • 查询表:查询结果对应的表

  • 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

基本关系的性质

  • 列是同质的:每一列分量来自同一个域

  • 不同列可出自同一个域

  • 行、列的顺序无所谓

  • 任意两个元组的候选码不能相同

  • 分量必须取原子值

关系模式

关系模式是型,关系是值

关系模式是对关系的描述(元组集合的结构和完整性约束条件)

形式的表示为:R(U,D,DOM,F)

  • R:关系名

  • U:组成该关系的属性名集合

  • D:U中属性所来自的域

  • DOM:属性向域的映像集合

  • F:属性间数据的依赖关系的集合

简记为:R(U)或R(A1,A2,…An)

  • A:属性名

关系是关系模式在某一时刻的状态或内容,是动态的,随时间不断变化的

关系数据库:给定的应用程序中,所有关系的集合构成一个关系数据库

  • 型:关系数据库的模式,对关系数据库的描述

  • 值:关系模式在某一时刻对应的关系的集合

二、关系的完整性

关系模型中的三类完整性约束:

  • 实体完整性和参照完整性:关系的两个不变性

  • 用户定义的完整性:应用领域需要遵顼的约束条件

实体完整性

  • 若属性A是基本关系R的主属性,则属性A不能取空值(不知道、不存在、无意义的值)

实体完整性规则的说明:

  • 实体完整性规则是针对基本关系而言的

  • 现实世界中的实体是可区分的,它们具有某种唯一性标识

  • 关系模型中以主码作为唯一性标识

  • 主码中的属性不能取空值(如果为空说明由某个不可标识的实体,与第2点矛盾)

关系间的引用

例如:学生与专业之间的一对多关系,学生关系引用了专业关系的主码“专业号”

  • 学生(学号,姓名,性别,专业号,年龄)

  • 专业(专业号,专业名)

学生、课程、学生与课程之间的多对多联系,选修关系引用了学生关系的主码“学号”和课程关系的主码“选秀号”

外码

设F是基本关系R的一个或一组属性, 但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码。(外码简单讲就是表的一个非码属性是另一个表的主键)

R为参照关系,S为被参照关系。

  • 关系R和S不一定是不同的关系(例如,学生关系班长中的学号对应学生关系本身)

  • 目标关系S的主码Ks和参照关系的外码F必须定义子啊同一个域上

  • 外码并不一定要与相应的主码同名

例如:学生关系的“专业号”和专业关系的主码“专业号”相对应

参照完整性

若F是基本关系R的外码,对应S的主码Ks,则对于R中每个元组在F上的值必须为:

  • 或者取空值

  • 或者等于S中某个元组的主码值

也就是说,如果R是一个外码,那么它的值要么为空要么是S中某个主码

例如:专业号要么取空,要么是专业关系中的某个专业号

用户定义的完整性

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求

例:- 课程(课程号,课程名,学分)

  • “课程号”属性必须取唯一值

  • 非主属性“课程名”也不能取空值

  • “学分”属性只能取值{1,2,3,4}

三、关系操作和关系代数

常用的关系操作:

  • 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积(查)

  • 数据更新:插入、删除、修改(增删改)

操作的对象和结果都是集合

关系代数

一种抽象的查询语言,它用对关系的运算来表达查询

关系代数的运算符有两类:集合运算符和专门的关系运算符

关系代数运算符:

使用的记号

设关系模式为R,以下为关系运算:

  • t∈R标识t是R的一个元组

  • t[Ai]表示元组t中相应于属性Ai的一个分量

  • 属性组:A={Ai1,Ai2,…Ain}

  • t[A]表示元组t在属性列A上诸分量的集合

  • 元组的连接:上括号,表示将两个元组前后拼接在一起

  • 象集:相当于是属性组上值为x的诸元组在Z上分量的集合

集合运算

  • 笛卡尔积

选择

sigmaF(R)=ttRF(t)=truesigma_F(R)={t|t∈R∧F(t)=true}

F:选择条件,是一个逻辑表达式,取值为真或假

作用是选取使F为真的元组,是从行的角度进行的运算

投影

πA(R)=t[A]tRπ_A(R)={t[A]|t∈R}

A:R中的属性列

从R中选出若若干属性列组成新的关系,投影后不仅取消了原关系中的某些列,也有可能取消了某些元组

连接

也成为θ连接

从两个关系的笛卡尔积中选取属性间满足一定条件的元组.(也就是说,我可以从A中选出一个属性,从B中选出一个属性,然后这两个属性如果满足一定条件,就分别把这两个属性所在的元组拼接起来)

  • 等值连接:θ为"="的连接运算称为等值连接,从关系R与S的广义笛卡尔积中选取A、B属性值相等的元组

  • 自然连接:特殊的等值连接,两个关系中比较的分量必须是相同的属性组,结果中需要把重复的列去掉

连接一般是从行的角度运算

悬浮元组:关系R和S在做自然选择时,R中这些元组被舍弃了(因为它的属性没有一个和S中的属性匹配),丢弃的元组就是悬浮元组

外连接:悬浮元组也保存在结果关系中,其他属性值填空值(NULL)

除运算

例子:

首先找到R和S重复的属性,即B和C。然后我们取看R中剩下的这一列,即为A。然后我们对列A中每一个同种分量进行判断。这里我们可以先看a1.因为a1一共有3个,然后这三行的(B,C)取值分别为(b1,c2)(b2,c3)(b2,c1),而由于这三者正好能够涵盖S中(B,C)中的全部取值,所以a1就是一个R/S的结果。

综合案例: