关系数据结构及形式化定义
一张图看明白什么是域(相同数据属性的集合)、元组、度
候选码
在关系R中,如果某一属性可以唯一标识一个元组则称该属性为候选码。(例如学生信息表中,一个学号只能对应一个学生,所以学号是候选码)
主码(主键)
如果一个关系中有多个候选码,则选择其中一个作为主码。
外码(外键)
关系R中的一个属性,引用了另外一个关系中的主码。
关系完整性
实体完整性:在关系R中,主码的值不能为空。
参照完整性:关系R中的外码应该和它在原本关系中的主码相同。
用户定义完整性:即用户在使用数据库过程中自己定义的处理方法。
关系操作
传统二目计算
一图看明白交、并、差
并:去除重复后合并
交:选择相交的
差:减去相同的
笛卡尔积(相乘)
专门的关系运算
选择 (Selection)
符号:σ
表示:在关系R中选择符合条件的信息出来
投影 (Projection)
符号:π
表示:去除重复的投影出对应属性列的值
连接 (Join)
符号:⋈
表示:将两个表连接,其中连接又分为等值连接、非等值连接、外连接、左外连接、右外连接
非等值连接,就是根据条件进行连接,如下图的连接条件就是R.C<S.E,即R中每一个满足条件的行都与S中满足条件的行进行连接。
等值连接(内关联),选择R与S相同的属性(下图中R和S都有B属性),选择相同属性内容的行(R.B和S.B相同的有b1,b2,b3),相同内容的行进行连接(如R中b1与S的b1行连接)
左外连接,R与S进行左外连接,即R⋈S,因为R和S都有B属性,但是只保留R的B属性(算式左边)然后与S进行连接,如果不存在值的用NULL代替。例如在S.B中没有b4对应的E值,所以连接后写NULL。
右外连接,与左外连接刚好反过来。
外连接,就是把左外连接和右外连接的情况都包含。
除运算 (Division)
符号:÷
表示:可以简单理解为查询表R中指定属性S的记录
例如下图,R÷S,表示在R中查询能够满足S所有相同属性内容的元素。首先R和S的相同属性为B、C。且S有((b1,c2),(b2,c1),(b2,c3))这三种,在R中,能够同时满足这三种的只有a1
关系规范化
简单理解三种依赖关系
函数依赖:Y依赖于X,记为X→Y。
部分依赖:对于关系R{AB→C,A→C},且关系R的主码为AB,则此时可以说明C部分依赖于AB,因为单独A就可以推出C。
传递依赖:对于关系R{A→B,B→C},从关系中可以发现存在一条A→C的道路,这就是传递依赖(A通过B可以传递到C)
求解关系中的候选键(主属性)
1.入度为0的即为候选键(入度就是被箭头指向的次数)
例如:关系R的属性集为{A1,A2,A3,A4},关系为{A1→A2,A3→A2,A2→A3,A2→A4},可以看出,A1的入度为0、A2的入度为2、A3的入度为1、A4的入度为1,所以候选键为A1。
2.如果入度为0的属性集不能推出所有属性则需要引用中间节点
例如:关系R的属性集为{J,S,T},关系为{T→J,SJ→T},在这个关系中J和T的入度都是1,S的入度为0,但是单单用S不能推出其它属性,需要用到J节点组合为SJ才可以推所有属性集。
Armstrong公理
基本公理
自反律:如果(Y是X的子集),则X→Y
增广律:如果X→Y,则XZ→YZ
传递律:如果X→Y且Y→Z,则X→Z
根据基本公理进行的推理
合并规则:由X→Y,X→Z,有X→YZ
伪传递规则:由X→Y,WY→Z,有XW→Z
分解规则:由X→Y,,有X→Z
范式
第一范式
1NF:关系中每一分量不可再分,例如下表就是可再分的。
系 | 职称 |
计算机 | {教授,副教授} |
再分后表示为:
系 | 职称 |
计算机 | 教授 |
计算机 | 副教授 |
第二范式
2NF:在1NF基础上,消除非主属性对主属性的部分依赖。
再举一个部分依赖的例子:关系模式SC(学号,课程号,成绩,学分),其中: (学号,课程号)→成绩,课程号→学分)
分析:根据关系得出(学号,课程号)的入度为0,所以这两个的组合是候选键。
因为课程号→学分,课程号是主属性的一部分,所以学分部分依赖于主属性
第三范式
3NF:在2NF基础上,消除非主属性对主属性的传递依赖(一般情况下3NF可以理解为消除关系R中的传递依赖)。
BC范式
BCNF:在3NF基础上,消除主属性之间的部分依赖和传递依赖。
例子:关系R的属性集为{J,S,T},关系为{T→J,SJ→T},在这个关系中SJ,ST都是主属性所以关系R是BCNF范式。
附上关系图:
模式的分解
具体详细过程,请参考其它大佬的文章,本文简单说怎么判断一个关系分解后是否满足无损连接并保持函数依赖。
无损连接的分解
判别公式:(R1∩R2)→(R1-R2)|(R2-R1)
例:设关系模式R (U,F) ,其中U={A,B,C}, F={A→B,B→C,A→C},分解p={R1(AB),R2(BC}是否是无损连接的分解?
解:R1∩R2=B,R1-R2=A,R2-R1=C,带入公式得:B→A|C,即B可以推出A或者推出C就说明它保持函数依赖,因为F中存在B→C这个依赖,所以B→A|C是成立的。所以这样分解是无损连接的分解。
保持函数依赖的分解
判别公式:
例:给定关系模式R(U,F),U={A,B,C,D},函数依赖集F={AB→C,CD→B},若将R分解成p={R1(ABC),R2(CDB)},则分解p是否是保持函数依赖的分解?
解:R1中ABC在依赖集F拥有的依赖是AB→C,R2中CDB在依赖集F拥有的依赖是CD→B,R1和R2的依赖集相加刚好等于整个依赖集F,所以这样的分解是保持函数依赖的分解。
无损连接并保持函数依赖的分解
同时满足上面两个判别式的分解,就是无损连接并保持函数依赖的分解。