数据库学习笔记——关系数据库
数据库学习笔记——关系数据库
关系
定义1 域是一组具有相同数据类型的值的集合。
定义2 给定一组域\(D_1,D_2,\cdots,D_n\),允许其中某些域是相同的,\(D_1,D_2,\cdots,D_n\)的笛卡尔积定义为 \[ D_1 \times D_2 \times\cdots\times D_n=\{(d_1,d_2,\cdots,d_n)|d_i \in D_i,i=1,2,\cdots,n\} \] 其中,每一个元素\((d_1,d_2,\cdots,d_n)\)叫做一个n元组(n-tuple),或简称元组(tuple)。元素中每一个值\(d_i\)叫做一个分量(component)。
一个域中允许的不同取值的个数称为这个域的基数(cardinal number)。
若\(D_i(i=1,2,\cdots,n)\)为有限集,其基数为\(m_i(i=1,2,\cdots,n)\),则\(D_1\times D_2 \times\cdots\times D_n\)的基数M为 \[ M=\mathop{\Pi}\limits_{i=1}^{n} m_i \]
定义3 \(D_1 \times D_2 \times\cdots\times D_n\)的子集叫做在域\(D_1,D_2,\cdots,D_n\)的关系,表示为\(R(D_1,D_2,\cdots,D_n)\)
这里R表示关系的名字,n表示关系的目或度(degree)。
若关系中某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)。
候选码的诸属性称为主属性(prime attribute)。不包含在候选码中的属性称为非主属性(non-prime attribute)或非码属性(no-key attribute)。
若一个关系有多个候选码,则选定一个为主码(primary key)。极端情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。
- 关系有三种类型:基本关系(基本表)、查询表和视图表
定义4 关系的描述称为关系模式(relation schema),它可以形式化地标识为R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名的集合,D为U中属性所在的域,DOM为属性向域的映像集合,F为属性间的依赖关系的集合
关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称为关系数据库。
关系的完整性
规则1 实体完整性规则 若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。
参照完整性
定义5(外键) 设F是基本关系R的一个或一组属性,但不是关系R的码,\(K_ s\)是基本关系S的主码。如果F和\(K_s\)相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referenced relation)或目标关系(target relation)。关系R和S不一定是同种关系。
规则2 参照完整性规则 若属性(或属性组)F是基本关系的外码,它与基本关系S的主码\(K_s\)相对应(基本关系R和S不一定是不同关系),则对于R中的每个元组在F上的值必须:
- 或者取空值(F的每个属性均为空值)
- 或者等于S某个个元组的主码值
关系代数
传统的集合运算
并(union)
\(R\cup S=\{t|t \in R \vee T \in S\}\)
其结果仍为n目关系,由属于R或属于S的所有元组构成
差(except)
\(R-S=\{t|t \in R \wedge t \not \in S\}\)
其结果仍为n目关系,由属于而不属于S的所有元组构成
交(intersection)
\(R\cap S=\{t|t \in R \wedge t \in S\}\)
其结果仍为n目关系,由既属于R又属于S的所有元组构成。关系的交可以用差来表示:\(R\cap S=R-(R-S)\)
笛卡尔积(cartesian product)
两个分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有\(k_1\)个元组,S有\(k_2\)个元组,则关系R和关系S的笛卡尔积有\(k_1 \times k_2\)个元组。记作: \[ R\times S=\{\stackrel{\frown}{t_r t_s}|t_r\in R \wedge t_s \in S\} \]
专门的关系运算
引入几个记号:
- 设关系模式\(R(A_1,A_2,\cdots,A_n)\),它的一个关系设为R。\(t \in R\)表示t是R的一个元组。\(t[A_i]\)则表示元组t中相对应的属性\(A_i\)的一个分量。
- 若\(A=\{A_{i1},A_{i2},\cdots,A_{in}\}\),其中\(A_{i1},A_{i2},\cdots,A_{in}\)是\(A_1,A_2,\cdots,A_n\)的一部分,则A称为属性列或属性组。\(t[A]=(t[A_{i1}],t[A_{i2}],\cdots,t[A_{in}])\)表示元组t在属性列A上的诸分量的集合,\(\overline{A}\)则表示\(\{A_1,A_2,\cdots,A_n\}\)中去掉\(\{A_{i1},A_{i2},\cdots,A_{in}\}\)后剩余的属性组。
- R为n目关系,S为m目关系。\(t_r \in R,t_s \in S,\stackrel{\frown}{t_r t_s}\)称为元组的连接(concatenation)或元组的串接。
- 给定关系\(R(X,Z)\),X和Z为属性组,当\(t[X]=x\)时,x在R中的象集(images set)定义为:
\[ Z_x=\{t[Z]|t \in R,t[X]=x\} \]
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
选择(selection)
选择又称为限制(restriction)。它是在关系R中选择满足给定条件的诸元组,记作 \[ \sigma_F(R)=\{t|t \in R \wedge F(t)='真'\} \] 其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
\[ \begin{aligned} &查询信息系全体学生\\ &\sigma_{Sdept='IS'}(Stduent)\\ &查询年龄小于20岁的学生\\ &\sigma_{Sage<20}(Student) \end{aligned} \]
投影(projection)
关系R上的投影是从R中选择出若干属性列组成新的关系。记作 \[ \Pi_A(R)=\{t[A]|t \in R\} \] 其中A为R中的属性列。
\[ \begin{aligned} &查询学生姓名和所在院系\\ &\Pi_{Sname+Sdept}(Student) \end{aligned} \]
连接(join)
连接也成为\(\theta\)连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作 \[ R \mathop{\bowtie}_{A\theta B}=\{\stackrel{\frown}{t_r t_s}|t_r \in R \wedge t_s \in S \wedge t_r[A] \theta t_s[B]\} \] 其中,A和B分别是R和S上列数相等且可比的属性组,\(\theta\)是比较运算符。连接运算从R和S的笛卡尔积\(R\times S\)中选取R关系在A属性组上的值与S关系咋B属性组上的值满足比较关系\(\theta\)的元组。
\(\theta\)为=时称为等值连接,自然连接是一种特殊的等值连接。自然连接要求两个关系中进行比较的分量必须是同名的属性组,并在结果中把重复的属性列去除。
连接过程中被舍弃的元组称为悬浮元组(dangling tuple)。
如果把悬浮元组也保留在结果关系中,而在其他属性上填空值(NULL),那么这种连接叫做外连接(outer join).
除运算(division)
设关系R除以关系S的结果为关系T,则T包含所有在R但是不在S中属性及其值,且T的元组与S的元组的所有组合都在R中。
用象集定义除法:
给定关系\(R(X,Y)\)和\(S(Y,Z)\),其中X,Y,Z为属性组。R中的Y与S中的Y有不同的属性名,但必须出自相同域集。
R与S的除法得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上的分量x的象集\(Y_x\)包含S在Y上投影的集合。记作 \[ R\div S=\{t_r[X]|t_r \in R \wedge \Pi_{\gamma}(S)\subseteq Y_s\} \] 其中\(Y_s\)是x在R中的象集,\(x=t_r[X]\)。
除操作是同时在行和列的角度进行运算。
\[ \begin{aligned} &查询选修了所有课程的学生的号码和姓名\\ &\Pi_{Sno+Cno}(SC)\div \Pi_{Cno}(Course) \bowtie \Pi_{Sname+Sno}(Student) \end{aligned} \]
关系验算,QBE
暂略