在学习上一篇数据库系统概念后,我们知道数据模型是描述数据数据、数据联系、数据的语义以及一致性约束的概念工具的集合,现在我们系统的学习关系数据库。学习关系数据库前,带大家了解一些集合的概念。
如果集合A的任意一个元素都是集合B的元素,那么称集合A是集合B的子集,用A⊆B表示,读作A包含于B,或者B包含A
如集合B中至少有一个元素不属于A,那么集合A叫做集合B的真子集。也就是A包含于B,且A不等于B,就说集合A是集合B的真子集
一些常用的符号:
符号 含义
子集符号 ⊆、⊇
非子集符号 ⊈、⊉
真子集符号 ⫋、⫌、⊊、⊋、⊂、⊃
非真子集符号 ⊄、⊅
属于 ∈(元素与集合的关系)
不属于 ∉(元素与集合的关系)
并符号 ∨,满足其中一个条件
交符号 ∧,满足两个条件
σ选择运算符 满足σ的条件
θ比较运算符 它可以是>,≥,<,≤,=或< >
集合描述法 :A={x|P}(x为该集合的元素的一般形式,P为这个集合的元素的共同属性)
一、关系及关系模式
美国 E.F.Codd 1970年:“A Relational Model of Data for Large Shared Data Banks”,《Communication of the ACM》标志着关系模型的提出,也是标志着层次、网状数据库的消亡。
1.1 关系模型的基础概念
1.1.1 域(Domain)
域是一组具有相同数据类型的值的集合。例:整数,{‘男’,‘女’},简单理解的话就是属性的取值范围。
1.1.2 笛卡尔积
给定一组域D1,D2,…,Dn,允许其中某些域是相同的。
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
集合中的d1来自于D1,以此类推,所有域的所有取值的一个组合并且不能重复就是笛卡尔积。
元组(Tuple)
笛卡尔积中的每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple),或简称为元组(Tuple)。简单理解表中的一行即为一个元组,也就是行
分量(Component)
笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量,也就是某一行对应属性的值
基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其基数为Mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: 每个域基数的连乘的个数。
例如,给出3个域:
D1=导师集合SUPERVISOR={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}
注:{张清玫,刘逸}就是元组,刘逸就是分量
这3个域的笛卡尔积的运算如下:
D1×D2×D3={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
基数为2×2×3=12,但是在现实生活中是不存在这样关系的。
1.1.3 关系(Relation)
关系:
一个关系对应通常说的一张表
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)
R:关系名
n:一个关系中,有几个域做笛卡尔积的构成称作关系的目或度(Degree),也就是几个列
元组
关系中的每个元素是关系中的元组,通常用t表示。也就是行
属性
关系中不同列可以对应相同的域;为了加以区分,必须对每列起一个名字,称为属性(Attribute)。也就是列
码
候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
主码:若一个关系有多个候选码,则选定其中一个为主码(Primary key)
主属性:候选码的诸属性称为主属性(Prime attribute), 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)
例如,主码?(假设学生不会重名)
SUPERVISOR SPECIALITY POSTGRADUATE
张清玫 计算机专业 李勇
张清玫 计算机专业 刘晨
刘逸 信息专业 王敏
POSTGRADUATE 就是主码
1.2 关系模式
关系模式(Relation Schema)是型,关系是值
关系模式可以形式化地表示为:R(U,D,DOM,F),其中
R:关系名
U:组成该关系的属性名集合
D:U中属性所来自的域
DOM:属性向域的映象集合
F:属性间数据的依赖关系的集合
二、关系模型的三要素
2.1 关系数据结构
关系模型的数据结构是二维表,需要注意是关系中的描述和表中的描述是不一样的
关系 表
关系名 表名
关系模式 表头
关系 二维表
元组 记录或行
属性 列
属性值 列值
分量 一条记录中的一个列值
关系必须是规范化的
最基本的规范条件:每一个分量必须是不可分的数据项
基本关系的性质
列是同质的(Homogeneous),取值的属性是相同的
不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名
列的顺序无所谓,列的次序可以任意交换
任意两个元组的候选码不能相同
行的顺序无所谓,行的次序可以任意交换
2.2 关系数据操作
查询操作: 选择、投影、连接、除、并、差、交、笛卡尔积,其中选择、投影、并、差、笛卡尔积是5种基本操作
数据更新: 插入、删除、修改
2.2.1 关系操作的特点
用的是集合操作方式,操作的对象和结果都是集合,一次一集合的方式
2.2.2 关系操作的查询语言
查询操作是在关系数据中最常用的操作,分为专门的关系运算符和集合运算符,其中有如下操作语言:
关系代数语言: 用对关系的运算来表达查询要求,代表:ISBL
关系演算语言: 用谓词来表达查询要求
元组关系演算语言:谓词变元的基本对象是元组变量,代表:APLHA, QUEL
域关系演算语言 :谓词变元的基本对象是域变量,代表:QBE
具有关系代数和关系演算双重特点的语言:SQL(Structured Query Language)
2.3 关系完整性约束
2.3.1 实体完整性
若属性A是基本关系R的主属性,则属性A不能取空值。
例如选修(学号,课程号,成绩),“学号、课程号”为码,“学号”和“课程号”两个属性都不能取空值
2.3.2 参照完整性规则
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值。
要么学生中的ClaID为空,要么是班级信息表中ClaID属性值。
2.3.3 用户定义的完整性
反映某一具体应用所涉及的数据必须满足的语义要求。
例如课程(课程号,课程名,学分),“课程号”属性必须取唯一值,“学分”属性只能取值{1,2,3,4}
三、关系代数
关系代数运算符中包含多种数学运算
3.1 集合运算符
3.1.1 并(Union)
R和S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域
R∪S仍为n目关系,由属于R或属于S的元组组成
R∪S={t|t∈R∨t∈S}
∪并符号:集合基本符号,表示至少满足一个集合
∨并符号:逻辑基本符号,表示两个命题有一个发生则命题成立
也就是t∈R要么t∈S
3.1.2差(Difference)
R和S具有相同的目n,相应的属性取自同一个域
R - S仍为n目关系,由属于R而不属于S的所有元组组成
R -S = { t|t∈R∧t∉S }
∧交符号:逻辑基本符号,表示两个命题同时发生则命题成立
∉符号:集合基本符号,不属于的意思
也就是t∈R
3.1.3 交(Intersection)
R和S,具有相同的目n,相应的属性取自同一个域
R∩S仍为n目关系,由既属于R又属于S的元组组成
R∩S = { t|t∈R∧t ∈S }
R∩S = R –(R-S)
∩交符号:集合基本符号,表示满足2个集合
3.1.4 笛卡尔积
3.2 专门的关系运算符
3.2.1 引入一些记号
3.2.2 选择(Selection)
选择又称为限制(Restriction)
选择运算符的含义:在关系R中选择满足给定条件的诸元组σF( R )= {t|t∈R∧F(t)= ‘真’}
给大家解释一下这个公式:
σ运算符σF(): 在括号中写出运算的关系,在F处写出选择条件的表达式
={t|t∈R∧F(t)= ‘真’}: 它的结果是一个元组的集合,这个元组是属于关系R的,并且满足σ运算符σF()F处写出选择条件的表达式
F是选择条件,是一个逻辑表达式,取值为“真”或“假”
基本形式为:X1θY1
θ表示比较运算符,它可以是>,≥,<,≤,=或< >
选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
例如,查询σ学号 =2022003(Student)
3.2.3 投影
投影:从R中选择出若干属性列组成新的关系, πA( R ) = { t[A] | t ∈R }
πA:R中的属性列
投影操作主要是从列的角度进行运算:
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
列如,求Student关系上学生姓名和所在系两个属性上的投影, πSname,Sdept(Student)
3.2.4 连接
一般连接运算
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
R跟S连接就等于Tr和Ts连接的集合,Tr和Ts表示元组的连接,Tr来自关系R,Ts来自关系S,并且满足AθB的条件
A和B:分别为R和S上度数相等且可比的属性组
θ:比较运算符
连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组
等值连接(equijoin)
θ为“=”的连接运算称为等值连接从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
自然连接(Natural join)
自然连接是一种特殊的等值连接,两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉
自然连接的含义:R和S具有相同的属性组B
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算
例如关系R和关系S如下所示
3.2.5 除
给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
除操作是同时从行和列角度进行运算
设关系R、S分别为下图的(a)和(b),R÷S的结果如右下图:
关系R中,A可以取四个值{a1,a2,a3,a4}
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2的象集为 {(b3,c7),(b2,c3)}
a3的象集为 {(b4,c6)}
a4的象集为 {(b6,c6)}
S在(B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) }
只有a1的象集包含了S在(B,C)属性组上的投影,所以 R÷S ={a1}