1.域
域是一组具有相同数据类型的值的集合, 也就是这列属性能取的值, 通常用 Di 来表示
域不是"某个实体实际取到的值", 而是"某个属性允许取值的集合", 描述了属性的取值范围.
就比如 D性别={男,女}, 即使一个部门都是男人, 也是 D性别={男,女}
而例如: D姓名 则是一个近乎无穷大的集合
若 Di 是有限集, 且其基数为 mi, 基数表示域所有可能的取值的个数.
基数会在不同语境有不同意思, 但总归指的是元素的个数, 比如:
- 域的基数 = 域中值的个数 (因为域表示的就是取值范围);
- 关系的基数 = 关系中元组的个数, 也就是行数 (因为关系就是由元组组成的);
2.笛卡尔积
D1×D2×⋅⋅⋅×Dn={(d1,d2⋅⋅⋅dn)∣di∈Di, i=1,2,⋅⋅⋅,n}
可以看到, 笛卡尔积是所有域的组合后的集合, 或者看做一张二维表.
其中每个元素 (d1,d2⋅⋅⋅dn) 是元组, 也可用 t 表示, 元组中的值 dj 是分量.
- 元组是元素组合的意思, 对应数据表的一行
- 分量指的是元组里的元素, 对应数据表中的一个单元格
- 分量应该是原子级的, 也就是不允许有表中表
若 Di(i=1,2,...,n) 是有限集, 且其基数为 mi(i=1,2,...,n)
那么 D1×D2×...Dn 的基数 M 为所有基数相乘:M=∏i=1nmi
∏i=1n 表示连乘, 类比 ∑i=1n 表示连加
笛卡尔积本身就对应一张二维表, 比如:
姓名:D1=史丹妮,周冬元,李晓辉,...
性别:D2=男,女
专业:D3=人工智能,数据科学,...
D1×D2×D3:
姓名史丹妮史丹妮史丹妮史丹妮周冬元周冬元周冬元周冬元李晓辉李晓辉李晓辉李晓辉...性别男男女女男男女女男男女女...专业人工智能数据科学人工智能数据科学人工智能数据科学人工智能数据科学人工智能数据科学人工智能数据科学...
3.关系
笛卡尔积 D1×D2×...×Dn 的子集 叫作在域 D1,D2,...,Dn 上的关系, 表示为 R(D1,D2,...,Dn)
- 关系是集合, 因此天然不允许重复元组
- 当 n=1 叫单目关系, n=2 叫二目关系.
- 关系是笛卡尔积的有限子集, 所以关系本身也是二维表.
笛卡尔积 = 所有理论上可能的元组
关系 = 从这些可能元组中实际存在的那些元组组成的集合
域是"可能的值", 笛卡尔积是"可能的组合", 关系是"实际存在的组合".
4.传统的集合运算
R:
职工号0102姓名张三李四性别男女科室号0101科室办公室办公室
S:
职工号0203姓名李四王五性别女男科室号0102科室办公室门岗
4.1 并
R∪S={t∣t∈R∨t∈S}
R∪S=职工号010203姓名张三李四王五性别男女男科室号010102科室办公室办公室门岗
4.2 交
R∩S={t∣t∈R∧t∈S}
R∩S=职工号02姓名李四性别女科室号01科室办公室
4.3 差
R−S={t∣t∈R∧t∈/S}
R−S=职工号01姓名张三性别男科室号01科室办公室
并、交、差要求两个关系具有相同的目数, 且对应属性的域相容.
相容指的是两个关系对应的列, 必须来自同一个"域", 也就是取值范围/数据类型相同, 能够放在一起比较和合并.
广义笛卡尔积
n 目的关系 R 和 m 目的关系 S 的广义笛卡尔积是一个 n+m 列的元组集合.
每个元组的前 n 列是关系 R 的元组, 后 m 列是关系 S 的元组.
若 R 有 k1 个元组, S 有 k2 个元组, 则关系 R 和关系 S 的广义笛卡尔积有 k1×k2 个元组, 记作:
R×S={(r1,...,rn,S1,...,Sm)∣(r1,...,rn)∈R∧(S1,...,Sm)∈S}
职工号010203姓名张三李四王五性别男女男
科室号0102科室名办公室门岗
以上两个表的广义笛卡尔积是:
职工号010102020303姓名张三张三李四李四王五王五性别男男女女男男科室号010201020102科室办公室门岗办公室门岗办公室门岗
5.专门的关系运算
专门的关系运算包括选择、投影、连接、除等.
5.1 选择
选择又称为限制, 它是在关系 R 中选择出满足给定条件的元组, 记作:
σF(R)={t∣t∈R∧F(t)=′真′}
其中 F(t) 表示选择条件, 它是一个逻辑表达式, 取逻辑值"真"或"假", 基本形式为:
X1θY1[ϕX2θY2...]
θ 是比较运算符, 它可以是 >,<,≥,≤,=,= ; X1、Y1 是字段名、常量或简单函数
ϕ 表示逻辑运算符, 它可以是 ∧(与),∨(或),¬(非)
[ ] 表示任选项, 即 [ ] 中的部分可要可不要
... 表示上述格式可以重复下去.
Sno101102103104105Sname李晨王博刘思思王国美范伟Ssex男女女女男Sage1819181919Sdept信息系数学系信息系物理系数学系
查询数学系的学生:
σSdept=′数学系′(Student) 或 σ5=′数学系′(Student)
Sno102105Sname王博范伟Ssex女男Sage1919Sdept数学系数学系
5.2 投影
关系 R 上的投影是指从 R 中选择出若干字段名以组成新的关系, 记作:
πA(R)={t[A]∣t∈R} , 也可以用 ΠA(R) 表示, 叫作关系 R 在属性 A 上的投影
括号里 (R) 也可以是复杂的条件, 但这就不是单纯的投影了, 而是先选择, 再投影, 甚至还可以先连接再选择或者先选择再连接, 最后再投影, 我们这里只提最纯粹的投影
查询学生的性别和年龄:
πSsex,Sage(Student) 或 π3,4(Student)
Ssex男女女男Sage18191819
切记在进行手动投影计算的时候要进行去重操作.
关系代数中的关系是集合, 因此投影后产生的重复元组会被系统自动去除, 所以投影后的行数可能减少.
5.3 连接
5.3.1 连接条件
按连接条件分, 连接也叫条件连接 或者 θ 连接, 它是指从两个关系的笛卡尔积中选取属性间满足一定条件的元组, 记作:
RAθB⋈S={trts∣tr∈R∧ts∈S∧tr[A]θts[B]}
trts 就是连接的元组, 也就是将两个元组并排放在一起
θ 就是运算符
R= Aa1a1a2a2Bb1b2b3b4C56812
S= Bb1b2b3b3b5E3610122
(1) 等值连接
等值连接就是将运算符 θ 换成 =, 记作:
RA=B⋈S={trts∣tr∈R∧ts∈S∧tr[A]=ts[B]}
等值连接的比较条件里可以是不同名的属性列, 也可以是同名的.
也就是求 R 中的属性 A 等于 S 中的属性 B 的连接
比如:
RR.B=S.B⋈S= Aa1a1a2a2R.Bb1b2b3b3C5688S.Bb1b2b3b3E361012
(2) 自然连接
自然连接是一种特殊的等值连接, 它要求两个关系中有同名属性列, 并自动按所有同名属性列进行等值比较, 最后在结果中把重复的同名属性列只保留一份.
如果存在多列同名属性列, 则进行要保证所有同名属性列的值都相等
R⋈S={trts∣tr∈R∧ts∈S∧(tr[A]=ts[A]∧tr[B]=ts[B])∧...}
计算下
R⋈S= Aa1a1a2a2Bb1b2b3b3C5688E361012
相同的属性 B 只有 b1,b2,b3 这三个相同的值
(3) 一般连接
就是非等值连接
比如求:RA>B⋈S={trts∣tr∈R∧ts∈S∧tr[A]>ts[B]}
RC>E⋈S= Aa1a1a1a1a2a2a2a2a2a2a2R.Bb1b1b2b2b3b3b3b4b4b4b4C556688812121212S.Bb1b5b1b5b1b2b5b1b2b3b5E323236236102
5.3.2 是否保留不匹配元组
按保留哪些元组来分, 可分为内连接和外连接, 外连接又分为左外连接和右外连接
- 内连接指的是只保留符合条件元组的连接
- 外连接指的是额外保留不匹配元组的连接, 不匹配的一侧用 NULL 填充
- 左外连接指的是额外保留左侧不匹配元组的连接
- 右外连接指的是额外保留右侧不匹配元组的连接
- 全外连接指的是额外保留两侧不匹配元组的连接
5.4 象集
关系 R(X,Y), X 和 Y 为属性组.
对 X 上的取值 x 来说, x 在 R 中的象集 (images set)为:
YX=x={t[Y]∣t∈R,t[X]=x}=πY(σX=x(R))
YX=x 通常简写为 Yx, 但我更喜欢写全
象集就是"选择 + 投影"的组合
YX=x 先选择出 X=x 的元组, 再求在 Y 上的投影
就是 X=x 时候的 Y 列
X123Y226
下面是 Y=2 时的象集 XY=2:
X12
5.5 除
给定关系 R(X,Y) 和 S(Y,Z), 其中 X、Y、Z 为属性组.
R 中的 Y 和 S 中的 Y 不要求字段名 (属性名)一样, 域一样就行.
T=R(X,Y)÷S(Y)={x∣x∈πX(R)∧πY(S)⊆Yx}
πY(S)⊆Yx 可以理解为 ∀y∈πY(S),(x,y)∈R
通俗一点说:除的本质是在 R 中找出所有满足条件的 x, 每个 x 对应的 y 包含所有 S 中的 y
那么如果R中找出一个 x 对应的 y 值不仅包含了 S 中的 y, 还多出来了怎么办?
无所谓啦, 包含全部 y 就可以
除运算在带有"选修了全部课程"“供应了所有零件”"拥有所有权限"这类语义的运算中有大作用.
除运算有些复杂
- 先挑出来满足条件的 Y 列
- 然后看对应 X 列的值有哪些
- 再挨个验证 X 值.
例:
R (学生,课程,教师):
学生张三张三张三李四李四王五王五王五赵六赵六课程数据库操作系统网络数据库操作系统数据库操作系统网络数据库网络教师王老师李老师张老师王老师李老师王老师李老师张老师王老师张老师
S (课程,教师,学期):
课程数据库操作系统网络教师王老师李老师张老师学期2023春2023秋2024春
R÷S={张三,王五}
6.实践
S{Sno,Sname,Ssex,Sage,Sdept}C{Cno,Cname}SC{Sno,Cno,Degree}
-
查询选修 C3 号课程的学生的学号和成绩.
πSno,Degree(σCno=′C3′(SC))
-
查询选修 C4 号课程号的学生学号和姓名.
πSno,Sname(σCno=′C4′(S⋈SC))
-
查询选修课程名为 数据结构 的学生学号和姓名.
πSno,Sname(σCname=′数据结构′(S⋈SC⋈C))
-
查询选修 C1 或 C4 号课程的学生学号.
πSno(σCno=′C1′∨Cno=′C4′(SC))