第二章 关系数据库
1)什么是关系数据库?
2)数据模型包含哪些要素?
本章内容
关系数据模型的三大要素:
1.
数据结构
2.
数据操作
3.
数据的完整性约束条件
§2.1 关系数据模型概述
关系数据库:是建立在关系数据模型基础上的数据库系 统。
关系模型:基于数学理论。信息代数、集合论等
关系数据库:用数学的方法来处理数据库中的数据
关系数据模型 (数据结构)
单一的数据结构
扁平的二维表
以关系的形式来描述现 实世界
实体(学生、课程)
实体间的联系(学生选 课表)
关系数据模型 (操作)
关系操作特点
集合操作
非过程化
用户不必关心路径
关系数据操作语言
关系代数
关系演算
SQL(结构化的查询语言)
关系数据模型 (续)
完整性约束
实体完整性
参照完整性
用户定义的完整性
§2.2 关系数据结构的定义
域
域是一组具有相同数据类型的值的集 合
关系模型要求域必须是原子数据的集
合
关系数据结构的定义
笛卡儿积
给定一组域D1,D2,…,Dn,这些域 中可以有相同的。 D1,D2,…,Dn 的笛卡儿积为:
D1×D2×…×Dn = {(d1,d2,…,dn) | di∈ Di, i=1,2,…,n}
其中,每一个元素(d1,d2,…,dn)叫作 一个n元组(n-tuple)或简称元组
关系数据结构的定义
关系
D1×D2×…×Dn的子集叫作在域 D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn,)
关系是笛卡儿积的子集,是一张二 维表,表的每行对应一个元组,列 对应一个域,给每个列取名属性名 以示区别
关系数据结构的定义
码
若关系中的某一组属性的值能唯一地标识一个元组,则称该 属性组为候选码。
候选码的超集为超码。
候选码之一可被选作主码(PrimaryKey,PK)。
候选码中的属性称为主属性
关系数据结构的定义
基本关系(基本表)
实际存在的表
实际存储数据的逻辑表示
查询表
查询结果对应的表
视图表
由基本表或其他视图表导出的表
虚表,无实际存储的物理表相对应
关系
有三
种类
型
关系数据结构的定义
基本表的性质
列是同质的,来自同一个域
不同的属性具有不同的属性名,但可以来自同一 个域
列的顺序无关
行的顺序无关
分量(每个元组中的每个属性)必须取原子值
任意两个元组不能完全相同*
关系数据结构的定义
关系模式
关系模式是采用关系数据模型对数据的描述
是型
关系
是相应关系模式的值(实例)
是相应实体集在某一时刻的快照
关系数据结构的定义
关系模式
R(U,D,dom,F)
R(U)
R(A1,A2,…,An)
关系
是关系模式在某一时刻的状态或内容。
关系模式是静态的,稳定的,而关系是动态 的,随时间变化的。
U: 属性名集合
D: U中属性域的集合 Dom: 属性到域的映像 集合
F: 属性间数据的依赖 关系
关系数据结构的定义
关系数据库
基于关系数据模型的数据库RDB
关系数据库管理系统RDBMS
关系数据库模式
关系数据库中所有关系模式的集合
关系数据库的值
关系数据库在某一时刻的快照
§2.3 关系的完整性
对关系的某种约束条件
关系模型的完整性约束
实体完整性
参照完整性
用户定义的完整性
关系的完整性 ——实体完整性
规则
主属性(组成主码的属性)不能取空值(Null)
NULL
不知道、未提供、短缺
不能简单地认为没有
例
student(sno,sname,ssex)
不能取NULL
关系的完整性 ——参照完整性
是关于联系的约束
关系与关系间的引用
引用
被引用
例:学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
引用
关系的完整性 ——参照完整性
外码(Foreign Key)
设F是基本关系R中的一个或一组属性(但不是R 的码),如果F与基本关系S的主码KS相对应,
则称F是基本关系R的外码。R为参照关系,S为 被参照关系
例:学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
引用 外码 参照关系(从表)
被参照关系(主表)
关系的完整性 ——参照完整性
参照完整性规则
若属性(或属性组)
F是基本关系R的
外码,它与基本关系 S的主码相对应,则对于R中每个元组在F上的值必须为: 或者取空值(NULL)
或者等于S中某个元组的主码值
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
关系的完整性 ——参照完整性
参照完整性的各种违例情况
从表
插入从表元组,且外键不为 Null
修改从表外键,且不为Null
主表
删除主表元组,其已被参照
修改主表主键,其已被参照
删除主表
关系的完整性 ——参照完整性
参照可能发生在同一个关系 中
非主属性引用主码属性
例:学生(学号,姓名,性别,班长)
引用
关系的完整性 ——
用户定义的完整性
特殊的约束条件
与特定的应用相关
§2.4 关系代数
属于关系操作的一种
关系代数是一种抽象的查询语言
通过对关系 的运算来表达查询操作
运算对象、结果均为关系
运算
集合运算、关系运算、比较运算、逻辑运算
关系代数 ——运算符
关系代数 ——集合运算
集合(Set)
无重复、顺序无关
包(Bag)
可重复、顺序无关
列表(List)
可重复、顺序相关
集合运算
并、交、差、广义笛卡儿积
二目运算
集合运算 ——并 Union ( ∪ )
R和S的并,R∪S,是在R或S或两者中的元素的集合
一个元素在并集中只出现一次
R和S必须同类型(属性集相同、次序相同,但属性名 可以不同)
R∪S
集合运算 ——并 Union ( ∪ )
集合运算 ——交 Intersect ( ∩ )
R和S的交,R∩S,是在R和S中都存在的元素的集合
一个元素在交集中只出现一次
R和S必须同类型(属性集相同、次序相同,但属性名 可以不同)
R∩S
集合运算 ——交 Intersect ( ∩ )
集合运算 ——差Minus ( - )
R和S的差,R-S,是在R中而不在S中的元素的集合 。 [ R∩S=R-(R-S) ]
R和S必须同类型(属性集相同、次序相同,但属性名 可以不同)
R - S
集合运算 ——差Minus ( - )
集合运算 ——笛卡儿积 ( × )
关系R、S的笛卡儿积是两个关系的元组对的集合所组成 的新关系
R×S:
属性 是R和S的组合( 有重复 )
元组 是R和S所有元组的可能组合
是R、S的无条件连接 ,使任意两个关系的信息能组合
在一起
集合运算 ——笛卡儿积 ( × )
关系代数 ——专门的关系运算
选择、投影、连接、除法
关系运算 ——选择( σ )
从关系R中选择符合条件的元组构成新的关系
σ
F(R),表示从R中选择满足条件(使逻辑表达式 F为真)的元组
行的运算
(Where)
关系运算 ——选择( σ )
例: σ
ssex = ‘男’ AND sdep = ‘IS’(Student)
关系运算 ——投影( π )
从关系R中选择若干属性组成新的关系
π
A1,A2,…,An(R),表示从R中选择属性集
A 1 ,A 2 ,…,A n 组成新的关系
列的运算
(Select)
投影运算的结果中 ,也要 去除可能的重复元组
关系运算 ——投影( π )
例: π ssex,sage (student)
关系运算 ——条件连接 ( θ )
从R×S的结果集中,选取在指定的属性集上满足θ条 件的元组,组成新的关系
θ是一个关于属性集的逻辑表达式
R θ S
关系运算 ——条件连接 ( θ )
关系运算 ——等值连接 ( θ )
R S
R.B=S.B
关系运算 ——自然连接( )
从R×S的结果集中,选取在某些 公共属性上具有相 同值 的元组,组成新的关系
R、S的公共属性
属性集的交集(名称及类型相同 )
公共属性在结果中只出现一次
例: student sc
关系运算 ——自然连接( )
R S
关系运算 ——外连接
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 Null
null b5 null 2
R 和 S 的外连接:
左外连接:只保留R关系的悬浮元组 右外连接:只保留S关系的悬浮元组
关系运算 ——除 (÷)
A B C
a1 b1 c2
a1 b2 c3
a1 b2 c1
a2 b3 c7
a2 b2 c3
a3 b4 c6
a4 b6 c6
关系代数 ——实例
关系代数 ——实例1
查询选修了2号课程的学生的学号
课程号、学号←SC表
关系代数 ——实例1
2号课程的选课情况
σ cno=‘2’ (SC)
关系代数 ——实例1
选修2号课程的学号
π sno ( σ cno=‘2’ (SC))
关系代数 ——实例2
列出选修‘数学’课的学生的学号、姓名以及成绩
学号、姓名←Student表
课程名称←Course表
成绩←SC表
Student← SC→Course
sno cno
关系代数 ——实例2
‘数学’课
σ
cname = ‘数学’(Course)
关系代数 ——实例2
关系代数 ——实例2
‘选修‘数学’课的记录
SC (σ cname = ‘数学’ (Course))
关系代数 ——实例2
选修‘数学’的学生记录
Student (SC (σ cname = ‘数学’ (Course)))
关系代数 ——实例2
选修‘数学’的学生的学号、姓名、成绩
π sno,sname,grade Student (SC (σ cname =
‘数学’(Course)))
关系代数 ——实例2
关系代数是用对关系的运算来表示查询
关系演算是用谓词来表达查询 分为 :
元组关系演算语言 : Quel, Aplha
域关系演算语言 : QBE
关系演算
以元组变量作为谓词演算的基本对象 .
语句格式 :
操作语句 工作空间(表达式): 操作条件
表达式说明要查询的结果,关系名或属性名
操作条件是一个逻辑表达式,表示要满足的条件
元组关系演算语言 ALPHA
查询信息系中年龄小于 20岁的学生的学号和年龄.
GET W (student.sno, student.sage):
student.sdept=‘IS’ AND student.sage<20
ALPHA 实例
查询选修了这样课程的学生学号 ,其直接先行课是6号课程
RANGE course CX
GET W(sc.sno): 存在CX (CX.cno=sc.cno AND CX.peno=‘6’ )
ALPHA 实例: 使用元组变量
元组变量的好处: 简化关系名, 可以使用量词 存在量词,全称量词: 表达能力扩展
查询选修了所有课程的学生名字
RANGE course cx sc scx
GET W(student.sname): 任意cx 存在
scx(scx.sno=student.sno AND scx.cno=cx.cno)
ALPHA 实例: 使用全称量词
查询 90分以上学生名字和课程名字
RANGE sc scx
GET W (student.sname, course.cname): 存在
scx(scx.grade>=90 AND scx.sno=student.sno AND course.cno=SCX.cno)
ALPHA 实例: 多个关系的查询
查询信息系学生的平均年龄
Get W (AVG(student.sage): student.sdept=‘IS’)
标准函数库供用户选用
聚集函数有 :count, sum, max,min,avg
ALPHA 实例: 聚集函数
以元组变量的分量作为谓词的变元。
求计算机系年龄大于 19岁的学生学号。
域演算语言 QBE : 与条件
student sno sname ssex sage sdept
P.95001 >19 CS
查询条件 操作命令
示例元素下划线
求计算机系或者年龄大于 19岁的学生学号。
域演算语言 QBE:或条件
student sno sname ssex sage sdept
P.95001 CS
student sno sname ssex sage sdept
P.95002 >19
查询选修 1号课程的学生姓名
域演算语言 QBE: 多个关系查询
Student sno sname ssex sage sdept 95001 P. XYZ
SC sno cno Grade
95001 1
查询信息系学生的平均年龄
域演算语言 QBE: 聚集函数
student sno sname ssex sage sdept p.AVG.ALL IS
课堂作业
用关系代数 ,alpha, QBE表示下述查询:
S(sno,sname,status,city) 供应商 P(pno,pname,color,weight) 零件 J(jno,jname,city) 工程项目
SPJ(sno,pno,jno,qty)
求供应工程
j1
红色零件的供应商代码(sno) 求没有使用天津供应商生产的红色零件的工程项目代码(jno)
求没有使用天津供应商生产的红色零件的工程项目代码(jno)
第一步:查找使用天津供应商生产的红色零件的工程项目代码 Π jno ( Ϭ city=‘天津’ (S) SPJ Ϭ color=‘red’ (P) )
第二步:没有使用
Π jno (J) - Π jno ( Ϭ city=‘天津’(S) SPJ Ϭ color=‘red’ (P) )
第 2题 关系代数
第 2题 Alpha 答案
第2题 QBE 答案: