关系数据库
关系数据库结构及形式化定义
关系
-
域:是一组具有相同关系数据类型的值的集合
-
笛卡尔积:域上的一种集合运算
- 元组:笛卡尔积中每一个元素\((d_1,d_2,d_3\cdots ,d_n)\)称之为一个\(n\)元组
- 分量:笛卡尔积元素\(d_1,d_2,d_3 \cdots,d_n\)中的一个值\(d_i\)称之为一个分量
- 基数:一个域允许的不同取值个数称之为基数
-
关系:\(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\):关系的目或度
- 候选码:若关系中的某一属性组能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
- 主码:若一个关系有多个候选码,则选定其中一个为主码
- 主属性:候选码的主属性称之为主属性
- 不包含在任何候选码中的属性称之为非主属性或者非码属性
注意:
- 笛卡尔积可表示为一张二维表,表中的每行对应一个元组,表中的每列的值来自用一个域
- 若\(D_i(i=1,2,3 \cdots,n)\)为有限集,其基数为\(m_i(i=1,2,3\cdots,n)\),则\(D_1 \times D_2 \times \cdots \times D_n\)的基数\(M\)为\(\prod_{i = 0}^{n}m_i\)
- 一般情况下,候选码只包含一个属性,但在极端的情况下,关系模式的所有属性都是这个关系的候选码,称之为全码。
- 关系可以有三种类型:基本类型(通常称之为基本表或者基表)、查询表和视图表。
基本关系的6条性质
- 列是同质的
- 不同的列可出自同一个域,其中的每一列称之为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓,列的次序可以任意交换
- 任意两个元组的候选码不能相同
- 行的顺序无所谓,行的次序可以人以交换
- 分量必须取原子值,及每一个分量都必须是不可分的数据项(这是规范条件中最基本的一条)(理解:不能表中有表)
关系模式
-
关系模式:对关系的描述、静态的、稳定的。
关系可以形式化第表示为:\(R(U,D,DOM,F)\),俗称为五元组。\(R\):关系名,\(U\):组成改关系的属性名集合,\(D\):\(U\)中属性所来自的域,\(DOM\):属性向域的映像集合,\(F\):属性间数据的依赖关系集合
-
关系:关系模式在某一时刻的状态或内容,动态的、随时间不断变化的。
基本关系的6条性质
关系数据库的型也称为关系数据库模式,是对关系数据库的描述;关系数据库的值是这些关系模式在某一时刻对应关系的集合,通常称之为关系数据库。
注意:关系模式、关系、关系数据库模式、关系数据库之间的联系
关系操作
基本关系操作
常用的关系操作:查询、插入、删除、修改
- 查询可以分为:选择、投影、连接、除、并、差、交、笛卡尔积等。其中选择、投影、并、差、笛卡尔积是5种基本操作,交、除、连接是3种复合操作。
- 数据更新:插入、删除、修改
- 关系操作的特点:集合操作方式,即操作的对象和结果都是集合,也称为一次一集合的方式。
关系数据语言
- 关系代数语言:用对关系的运算来表达查询要求。 代表:ISBL
- 关系演算语言:用谓词来表达查询要求
- 元组关系演算语言:谓词变元的基本对象是元组变量。 代表:APLHA, QUEL
- 域关系演算语言:谓词变元的基本对象是域变量。 代表:QBE
- 具有关系代数和关系演算双重特点的语言。 代表:SQL(Structured Query Language)
关系的完整性
-
实体完整性规则:若属性A(指一个或者一组属性)是基本关系R的主属性,则属性A不能去空值。所谓的空值是指“不知道”或者“不存在”或者“无意义”的值。
实体完整性规则说明如下:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应一个现实世界的一个实体集
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
- 关系模式中以主码作为唯一性标识
- 主码中的属性不能取空值
-
参照完整性
实体完整性和参照完整性:关系模型必须满足的完整性约束条件,称为关系的两个不变性。
外码:设\(F\)是基本关系\(R\)的一个或者一组属性,但是不是关系\(R\)的码;\(K_s\)是基本关系\(S\)的主码。如果\(F\)与\(K_s\)相对应,则称\(F\)是\(R\)的外码,并称基本关系\(R\)为参照关系(Referencing Relation)基本关系\(S\)称为被参照关系(Referenced Relation)或目标关系(Target Relation).
注意:
-
参照关系和被参照关系可以是一个关系。例如:学生中的班长学号参照学生好
-
参照关系参照被参照关系,参照关系中的外码是被参照关系中的主码
参照完整性规则:若属性(或者属性组)\(F\)是基本关系\(R\)的外码,它与基本关系\(S\)的主码\(K_s\)相对应,则对于\(R\)中的每一个元组在\(F\)上的值必须:
- 或者取空值(\(F\)的每个属性值均为空值)
- 或者等于\(S\)中某个元组的主码值。
注意:如果外码是主属性,不可以取空值,否则违反了实体完整性。
-
-
. 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束
关系代数
关系代数是一种抽象的查询语言,是用于对关系的运算来表达的。
传统的集合运算时二目运算:并、差、交、笛卡尔积
专门关系运算符:选择、投影、连接、删除
传统的集合运算
这关系\(R,S\)具有相同的目\(n\),且相应的属性取自同一个域,\(t\)时元组变量,\(t\in R\)表示\(t\)是\(R\)的一个元组。
-
并(union)
关系\(R\)与关系\(S\)的并记作:\(R\cup U=\{t|t\in R \vee t\in S\}\),其结果还是\(n\)目关系,由属于\(R\)或者属于\(S\)的元组组成
-
差(expect)
关系\(R\)与关系\(S\)的差记作:\(R - U=\{t|t\in R \wedge t\notin S\}\),其结果还是\(n\)目关系,由属于\(R\)而不属于\(S\)的所有元组组成。一般用于否定查询
-
交(intersection)
关系\(R\)与关系\(S\)的交记作:\(R\cap U=\{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)\)列的元组的集合。若\(R\)有\(K_1\)个元组,\(S\)有\(K_2\)个元组,,则关系\(S\)和关系\(R\)的笛卡尔积有\(K_1 \times k_2\)个元组,记作:\(R \times S = \{ t_r^\frown {t_s} |t_r \in R \wedge t_s \in S\}\)。
专门的关系运算
补充知识
- 设关系模式为\(R(A_1,A_2,A_3,\cdots,A_n)\),它的一个关系设为\(R\)。\(t \in R\)表示\(t\)是\(R\)的一个元组。\(t[A_i]\)则表示元组\(t\)中相应于属性\(A_i\)的一个分量。
- 若\(A=\{ A_{i1},A_{i2},A_{i3},\cdots ,A_{ik} \}\),其中\(A_{i1},A_{i2},A_{i3},\cdots ,A_{ik}\)是\(A_1,A_2,A_3,\cdots,A_n\)中的一部分,则\(A\)称为属性列或者属性组。\(t[A]=(t[A_{i1}],t[A_{i2}],t[A_{i3}],\cdots ,t[A_{ik}])\)表示元组\(t\)在属性列\(A\)上诸分量的集合。\(\overline{A}\)则表示\(\{A_1,A_2,A_3,\cdots,A_n\}\)中去掉\(\{ A_{i1},A_{i2},A_{i3},\cdots ,A_{ik} \}\)后剩余的属性组。
- 给定一个关系\(R(X,Z)\),\(X\)和\(Z\)为属性组。当\(t[X]=x\)时,\(x\)在\(R\)中的象集定义为:\(Z_x=\{t[Z]|t\in R,t[X] = x \}\)。它表示\(R\)中属性组\(X\)上值为\(x\)的诸元组在\(Z\)上分量的集合。
-
选择操作:又称之为限制操作,是从关系\(R\)中选取是逻辑表达式\(F\)为真的元组,是从行的角度进行的运算,记作:\(\sigma _F(R)=\{t|t\in R \wedge F(t)='真' \}\)。其中\(F\)是选择条件,是逻辑表达式。
-
投影:从关系\(R\)中选择出若干属性列组成新的关系,是从列的角度进行运算,但是投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。记作:\(\prod _A(R)=\{t[A]|t\in R \}\),其中\(A\)为\(R\)中的属性列。
-
连接:也称为\(θ\)连接。它是从两个关系的笛卡尔积中选取属性满足一定条件的元组,记作:\(R \Join_{AθB} S=\{ t_r^\frown {t_s}|t_r\in R\wedge t_s\in S \wedge t_r[A]θt_s[B] \}\)。连接操作\(=\)先笛卡尔积,再选择。
- 等值连接:\(θ\)为\(“=”\)的连接运算,它是从关系\(R,S\)的广义笛卡尔积中选取\(A,B\)属性值相等的元组
- 自然连接:是一种特殊的等值连接。两个关系中进行比较的分量必须是相同的属性组,自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
- 外连接:如果把悬浮元组(被舍弃的元组)也保存在结果中,而在其他属性上填空值(NULL),那么这种连接称之为外连接。
- 左外连接:如果只保留左边关系\(R\)中的悬浮元组称之为左外连接
- 右外连接:如果只保留右边关系\(S\)中的悬浮元组称之为右外连接
-
除运算:设关系\(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 \prod_Y(S)\subseteq Y_x \}\)。其中\(Y_x\)为\(x\)在\(R\)中的象集,\(x=t_r[X]\)。
例如:设关系\(R,S\)分别为图2.9中的\((a)\)和\((b)\),\(R\div S\)的结果为图2.9\((c)\)。在关系R中,A可以取四个值\({a_1,a_2,a_3,a_4}\),其中\(a_1\)的象集为 \({(b_1,c_2),(b_2,c_3),(b_2,c_1)}\);\(a_2\)的象集为 \({(b_3,c_7),(b_2,c_3)}\);\(a_3\)的象集为 \({(b_4,c_6)}\);\(a_4\)的象集为 \({(b_6,c_6)}\);
\(S\)在\((B,C)\)上的投影为\({(b_1,c_2),(b_2,c_1),(b_2,c_3) }\)只有\(a_1\)的象集包含了\(S\)在\((B,C)\)属性组上的投影,所以\(R÷S ={a_1}\)。