3.用户定义的完整性
l 用户定义的完整性是指由用户定义的、针对某一具体应用需求制定的约束条件,多用于满足数据的一些语义要求。
【例子】在表2.5所示的关系SC中,经常定义这样的约束:成绩的取值必须在0~100之间;又如,某些属性值不能为空或取值必须唯一等。
l 用户定义完整性约束可以有效减少应用程序的负担,关系数据库管理系统都提供定义和检验这类完整性的机制和方法。
2.2 关系代数 l 2.2.1 基本集合运算
基本集合运算是指集合的并、交、差和笛卡儿积运算,这些运算都是二元运算。我们约定:本节中R和S都默认是n元关系,且对应属性取自同一个值域。以下介绍基于关系的基本集合运算。
1. 并∪
Ø n元关系R和S的并是一种新的n元关系,这个新的关系是由R的元组或S的元组组成,记为R∪S,即R∪S = {x | x∈ R∨x ∈ S}
2. 交∩
Ø n元关系R和S的交是一种新的n元关系,这个新的关系是由R和S的共同元组组成,也就是说,由既属于R的元组又属于S的元组组成,记为R∩S,
即R∩S = {x | x ∈ R ∧ x ∈S }
3. 差-
Ø n元关系R和S的差是一种新的n元关系,这个新的关系是由属于R的元组但不属于S的元组组成,记为R-S,即R-S = {x | x ∈ R∧x ∈S}
4. 笛卡儿积
Ø 设R和S分别是n元关系和m元关系,则R和S的笛卡儿积是一种(n + m)元关系,该关系是由R的每一个元组分别与S每一个元组进行“首尾并接”所得到的元组的集合,记为R×S,即R×S = {xr xs| xr ∈ R∧ xs ∈ S}
Ø xrxs是表示由元组xr和元组xs并接而得到的新元组。
【例子】如果xr =(1班,李好,78)且xs =(03987,陈永江,01,3班),
则xrxs =(1班,李好,78,03987,陈永江,01,3班)。
Ø 关系R和S的元组个数分别为kr和ks,则R×S的元组个数为kr×ks。
• 2.2.2 关系运算
关系一些特殊的运算,主要包括选择(σ)、投影(π)、连接(⋈ )、除(/)等。
Ø 先约定一种表示方法:设x为某一个关系R的一个元组,L为R的关系模式的一个子集(即属性子集),则令x(L)表示由元组x在属性子集L上的所有分量构成的新元组。
【例子】对于关系R(A,B,C,D),令x = (a , b ,c , d),则x({A,B,C}) = (a , b , c),x({C,D}) = (c , d),x({B}) = (b),等。
• 选择σ
从关系中筛选出满足既定条件的元组,这些元组组成了一个新的关系,这个操作过程称为选择。
Ø 选择的操作符用σ表示,选择条件则用逻辑公式来表示,用R表示逻辑公式。对关系R的选择运算就可以表示为σt(R),即
σt(R) = {x | x∈R∧t(x) = true}
“t(x) = true”表示元组x满足条件公式t。对于选择运算,关键是设置选择条件t。
在数据查询中,条件公式t通常是由<、>、≤、≥、=、between、∧、∨等连接符号构成的条件表达式或逻辑表达式。
【例子】表2.3所示的学生关系student。令选择条件t = (性别=‘男’∧专业号=‘z3’),则选择运算st(student)表示查找那些专业号为“z3”的男同学,结果如表2.7所示。
2. 投影π
l 投影是指从关系中选出若干个指定的属性来组成新的关系。令投影的操作符为π,L为指定的属性子集,则关系R在属性子集L上的投影就可以表示为πL(R),即 πL(R) = {x(L) | x ∈ R}
x(L)表示由元组x在属性集L上的取值构成的新元组。
l 投影还有一种表示方法就是在投影运算表达式πL(R)中用指定的属性在关系R中的序号来代替L中的属性名。
【例子】对于上述的投影π{姓名,性别} (student)也可以表示为π{2,3}(student)。
l 投影就是从关系表中按指定的属性抽取相应的列,这些列组成一个新的关系。
l 注意,投影运算是对列进行筛选,而选择运算则对行进行筛选。
【例子】对于表2.3所示的学生关系student,令L = {姓名,性别},则学生关系在L上的投影:
πL(student) = {x(L) | x∈ R}
= {x({姓名,性别}) | x∈ R}
= {(刘洋,男), (李思思,女), (陈永江,男), (王大河,男), (吕文星,男), (李鑫,女)}
结果如表2.8所示。