域、笛卡尔积、关系、元组、属性
-
域是一组具有相同数据类型的值的集合,比如整数,浮点数,无理数。或者{小明,小红,小丽,…}
- 笛卡尔积为域和域之间的运算,就是,遍历两个集合所有的可能组合。D1×D2={(x,y)}
主码、候选码、外码
-
候选码是一个属性组,这个属性组能够唯一地标识一个元组(比如说居民身份证在国内唯一的标识了某一个确定的人),而其子集不能。
- 一个关系如果有多个候选码,选定一个作为主码,候选码的各个属性成为主属性
- F是R的外码,如果F满足:
F是R的一个或者一组属性,且F不是R的主码;
Ks是关系S的主码,而F与Ks相对应
比如,学生关系中的所选择的专业号这一属性,这与专业关系中的专业的专业号可以形成一一对应,那么这时我们称专业号是学生关系中的外码。并且,称学生关系为参照关系,专业关系为被参照关系;
注:外码可以为空,该例中表示未给学生分配专业。
关系模式,关系,关系数据库
-
关系,在用户看来,就是一张扁平的二维表。专业术语叫它:只包含单一的数据结构——关系
-
关系模式就是关系的描述,R(U,D,DOM,F),包括:
-
U表示该关系的属性名集合,比如学生名,学号,…
-
D表示属性中数据来自的域,比如字符串,数字串,…
-
DOM为属性向域的映像集合,比如规定学生名中只能映射到{小明,小红,…}
-
F为属性间的依赖关系,比如小红的学号是2015053078,而不是2015053071
-
关系数据库就是在一个给定的应用领域中,所有关系的集合。比如校园网系统,关系数据库就是包括学生学号关系,专业课关系,选课关系,课程老师关系,学生老师关系,…等等关系的集合
关系模型的完整性规则
比如,学生关系,其中的专业号引用了专业关系中的专业号,这时,学生关系中的专业号属性可以为空,表示暂时没有给这个学生分配专业,但是这个专业号不能是专业关系中不存在的专业号。
-
用户定义的完整性
就是说,为了满足用户的需求,我们额外给关系加上的约束条件就是用户定义完整性
比如,学生的成绩在0-100之间
关系运算
选择
σF(t)(R)
表示在R关系中,使得F(t)=true的所有t的集合,比如
σname="林俊杰"(小明的盆友们)就是表示从小明的盆友们这个关系中选择出所有叫做林俊杰的个体出来。如果我们把关系理解成为一个表格的话,那么我们可以理解为这个式子的结果就是一行一行的数据,有几个人叫“林俊杰”,我们就有几行
投影
ΠA(R)={t[A]∣t∈R}
比如说,Πname,gender(小明的盆友们)就表示输出两列,一列是小明的所有盆友的名字,另一列是所有盆友的性别。
连接
R⋈AθBS={trts∣tr∈R∧ts∈S∧tr[A]θts[B]}
其中A,B是属性,大概的人意思就是对于关系R和S来说,只要有一部分的数据满足A这些属性与B这些属性有θ的关系,那么我们就把他们取出来,然后连接在一起。
比如R中的属性有name,student id,S中的属性有student id,course name,那么我们这时候使用连接技能:
R⋈student id=student idS就是表示,如果R的某些行和S中的某些行的student id相同的话,我们就把他们连接在一起,并且作为连接的输出。
像集
有一个关系R(X,Z)其中X和Z是属性,那么
Zx表示{t[Z]∣t∈R,t[X]=x},就是从中找到满足t[X]=x的那些行,然后求它们所对应的t[Z]值
除
终于说到的真正想说的运算了,有点小复杂。
R÷S={tr[X]∣tr∈R∧ΠY(S)⊆Yx,x=tr[X]} ={x∣tr∈R∧ΠY(S)⊆Yx}这里我们还是选择举个栗子来说明吧。
在这里,X属性在这里为A,Y属性在这里为B,C,所以x可能的取值为{a1,a2,a3,a4}; 所以Yx的所有可能取值为Yx=a1={(b1,c2),(b2,c3),(b2,c1)}或者Yx=a2{(b3,c7),(b2,c3)}或Yx=a3={(b4,c6)}或者Yx=a4={(b6,c6)}
而ΠY(S)=ΠY(B,C)={(b1,c2),(b2,c1),(b2,c3)},不难观察出使得ΠY(S)⊆Yx的x只有a1,所以结果就是a1啦!
