关系数据库
关系的三类完整性约束
1)实体完整性
通常由关系系统自动支持
2)参照完整性
早期系统不支持,目前大型系统能自动支持
3)用户定义的完整性
反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束
用户定义后由系统支持
关系
域是一组具有相同数据类型的值的集合。例:
整数
实数
介于某个取值范围的整数
长度指定长度的字符串集合
{‘男’,‘女’}
介于某个取值范围的日期
1) 笛卡尔积
给定一组域D1,D2,…,Dn,
这些域中可以有相同的。
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn=
{(d1,d2,…,dn)|diDi,i=1,2,…,n}
所有域的所有取值的一个组合
不能重复
2) 元组(Tuple)
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。
3) 分量(Component)
笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量。
4) 基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
例 给出三个域:
D1=SUPERVISOR ={ 张清玫,刘逸 }
D2=SPECIALITY={计算机专业,信息专业}
D3=POSTGRADUATE={李勇,刘晨,王敏}
则D1,D2,D3的笛卡尔积为:
D1×D2×D3 =
题中,基数:2×2×3=12,
即D1×D2×D3共有2×2×3=12个元组
5)笛卡尔积的表示方法
笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
在上例中,12个元组可列成一张二维表
关系(Relation)
1) 关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为
R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree)
2) 元组
关系中的每个元素是关系中的元组,通常用t表示。
3) 单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)。
当n=2时,称该关系为二元关系(Binary relation)。
4) 关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
5) 属性
关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。
n目关系必有n个属性。
6) 码
候选码(Candidate key)若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码在最简单的情况下,候选码只包含一个属性。
主码
若一个关系有多个候选码,则选定其中一个为主码(Primary key)。主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute)
超码(Super Key):关系中能惟一标识每个元组的属性或者属性组。一个关系可能有多个超码。
候选码(Candidate Key):若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何真子集都不能再标识 。一个关系可能有多个候选码。候选码也是超码,候选码不一定只有一个属性
主码(Primary Key):从候选码中选择一个作为该关系的主码。DBS将按主码标识和排序每个元组。一个关系在任一时刻至多只能有一个主码
备用码(Alternate Key):除了主码之外的所有候选码都是该关系的备用码。可能有,可能没有
外码(Foreign Key):关系R1中的属性或属性组若在另一个关系R2中作为主码使用,则该属性或属性组为R1的外码。注意:域必须相同!
主属性:包含在任何候选码中的属性
非主属性:除主属性之外的属性,即不包含在任何候选码中的属性
全码(All-key)
在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
什么是关系模式
关系模式(Relation Schema)是型
关系是值
关系模式是对关系的描述
元组集合的结构
属性构成
属性来自的域
属性与域之间的映象关系
元组语义以及完整性约束条件
属性间的数据依赖关系集合
关系模式可以形式化地表示为:
R(U,D,dom,F)
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
dom 属性向域的映象集合
F 属性间的数据依赖关系集合
例:
导师和研究生出自同一个域——人,
取不同的属性名,并在模式中定义属性向域
的映象,即说明它们分别出自哪个域:
dom(SUPERVISOR-PERSON)
= dom(POSTGRADUATE-PERSON)
=PERSON
关系模式通常可以简记为
R (U) 或 R (A1,A2,…,An)
R 关系名
A1,A2,…,An 属性名
注:域名及属性向域的映象常常直接说明为
属性的类型、长度
关系模式
对关系的描述
静态的、稳定的
关系
关系模式在某一时刻的状态或内容
动态的、随时间不断变化的
关系模式和关系往往统称为关系
通过上下文加以区别
关系数据库
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
1)实体完整性规则(Entity Integrity)
若属性A是基本关系R的主属性,则属性
A不能取空值
关系模型中以主码作为唯一性标识
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码基本关系R称为参照关系(Referencing Relation)
基本关系S称为被参照关系(ReferencedRelation)或目标关系(Target Relation)
说明
关系R和S不一定是不同的关系
目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
外码并不一定要与相应的主码同名
当外码与相应的主码属于不同关系时,往往 取相同的名字,以便于识别
3)参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值)
或者等于S中某个元组的主码值。
学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名)
学生关系中每个元组的“专业号”属性只取下面两类值:
(1)空值,表示尚未给该学生分配专业
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中
3)用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
关系代数
R和S
1)具有相同的目n
2)相应的属性取自同一个域
R∪S (并)
仍为n目关系,由属于R或属于S的元组组成
R - S (差)
仍为n目关系,由属于R而不属于S的所有元组组成
R∩S(交)
仍为n目关系,由既属于R又属于S的元组组成
广义笛卡尔积(Extended Cartesian Product)
R
n目关系,k1个元组
S
m目关系,k2个元组
R×S
列:(n+m)列的元组的集合
元组的前n列是关系R的一个元组
后m列是关系S的一个元组
行:k1×k2个元组
选择运算是从行的角度进行的运算
Student(sno,sname,ssex,sage,sdept)
Course(cno,cname,cpno,ccredit)
SC(sno,cno,grade)
投影操作主要是从列的角度进行运算
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
连接
1)连接也称为θ连接
2)连接运算的含义
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
A和B:分别为R和S上度数相等且可比的属性组
θ:比较运算符
连接运算从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系的元组。
等值连接(equijoin)
θ为“=”的连接运算称为等值连接
等值连接的含义
从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
非等值连接与等值连接运算类似。即=换成其他比较运算符
自然连接
是一种特殊的等值连接
两个关系中进行比较的分量必须是相同的属性组
在结果中把重复的属性列去掉
自然连接的含义
R和S具有相同的属性组B
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
外连接
两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。关系R中某些元组可能在S中不存在公共属性上值相等的元组,R中这些元组就在操作时被舍弃。
如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值,那么这种连接叫外连接。
如果只把左边关系R中要舍弃的元组保留就叫做左外连接
如果只把右边关系S中要舍弃的元组保留就叫做右外连接
象集Z
给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x(X的分量值)在R中的象集(Images Set)为:
Zx={t[Z]|t R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
除(Division)
给定关系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上投影的集合
Yx:x在R中的象集,x = tr[X]
除操作是同时从行和列角度进行运算
在关系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}
Student(sno,sname,ssex,sage,sdept)
Course(cno,cname,cpno,ccredit)
SC(sno,cno,grade)
题目:
查询选修了2号课程的学生的学号。
(假设学号、课号定义为varchar型)
查询liu老师所授课程的课程号、课程名
查询年龄大于23岁的男学生的学号和姓名
查询至少选修了一门其直接先行课为5号课程的学生姓名。
查询选修了全部课程的学号(和姓名)。