数据库原理概论Ⅰ-关系数据库
数据库原理是一门不难,但是各种形式化的语言比较难以理解的课,我这次以《数据库系统概论》 王珊著 这本教材为基础,尽量以通俗的语言介绍数据库相关的概念,许多概念难以理解给出对应的英文单词,能更好的帮助我们理解。
总而言之,数据库原理理论并不难,是一门实战性很强的课程。作为一个学生能力有限,难免有不准确的地方,本文只是自己的理解的总结。
同时,数据库中有很多英文翻译过来的概念,将译文和中文对应起来,更有助于我们的理解。
一、关系模型
所谓模型就是组织数据的一种方式,而关系模型,我们就可以简单理解为一张类似于Excel的二维的表格。
正如前面所说,我们理解数据库的原理,要想从抽象的概念理解起,正如下面这张图:
学生登记表:
学号 | 姓名 | 年龄 | 性别 | 系名 | 年级 |
---|---|---|---|---|---|
2013004 | 王小明 | 19 | 女 | 社会学 | 2013 |
2013006 | 黄大鹏 | 20 | 男 | 商品学 | 2013 |
2013008 | 张文斌 | 18 | 女 | 法律 | 2013 |
… | … | … | … | … | … |
1. 关系(Relation): 关系就是对应的表,例如这个关系就是这张“学生登记表”
2. 元组(tuple): 表中的一行数据即为一个元组,例如:(2013004, 王小明, 19, 女…)
3. 属性(attribute): 指的是表头元素,例如(学号,姓名,年龄,性别,系名,年级)
4. 码(key): 可以唯一确定一个元素的属性,比如通过学号就能唯一确定一个学生,进而确定其全部的信息,所以学号可以是该关系的码
5. 域(domain): 指的是数据类型的范围,比如人的年龄的范围在1-150岁之间,也就是说年龄的域是1-150
二、三级模式结构和二级映像
数据库的三级模式结构是指数据库系统由外模式、模式、内模式三级构成。
数据库分不同的层次是为了隔离底层的细节,让使用数据库的不同的人看到不同的细节。
1.外模式(external schema)
外模式处在最外层,是数据库的用户(应用程序员和最终用户)能够看见的局部的数据。
一个数据库可以有多个external schema,每个用户只能看见和访问对应的外模式中的数据,对于其余的不可见。
2.模式(schema)
模式又称概念模式,是数据库全体数据的逻辑结构和特征描述,处在中间层,既与底层物理存储的细节无关,又与上层使用什么开发工具无关。
一个数据库只有一个schema,主要从逻辑上去考虑数据库的需求。
3.内模式(internal schema)
内模式又称存储模式(storage schema),是用来描述数据物理结构和存储方式,属于数据库内部的组织方式,例如索引是用B+树索引还是hash索引。
一个数据库只有一个internal schema
两级模式是为了在系统内部划分这三个模式的联系和区别,在中间提供了两层映像。
三层模式可以理解为三个地方,两级模式相当于桥梁,把三层模式联系起来,同时也划分除了三层模式的界限
1.外模式/模式映像
模式和外模式是一对多的关系,所以对于每一个外模式,都对应一个外模式/模式映像。
当模式改变时,通过改变映像,可以使外模式不变。因为应用程序是依据外模式编写的,所以应用程序也不必修改,保证了数据和程序的逻辑独立性。
2.模式/内模式映像
模式和内模式是一对一的关系,所以模式/内模式映像是唯一的。
定义了数据全局逻辑结构与存储结构之间的对应关系.当数据库的存储结构改变时,通过改变映像,可以使模式不变,进一步可以使应用程序不变。保证了数据与程序的物理独立性。
三、关系数据结构
1.笛卡尔积(cartesian product)
笛卡尔积是域(domain)上的一种集合运算,
通俗解释:笛卡尔积就是不同的域上所有元组(tuple)的组合,从图像看上,就是将每组一维数据变成了一张二维表格。
例:
有三个域:
D1 = 导师集合SUPERVISOR = {张青梅, 刘毅}
D2 = 专业集合SPECIALITY = {计算机专业, 信息专业}
D3 = 研究生集合POSTGRADUARE = {李勇, 刘晨, 王敏}
D1 是2元组,D2 是2元组, D3是3元组 ,所以D1*D2*D3=12个元组,即笛卡尔积的基数为2 * 2 * 3 = 12.
笛卡尔积可以表示为下面的这个表
SUPERVISOR | SPECIALITY | POSTGRADUARE |
---|---|---|
张青梅 | 计算机专业 | 李勇 |
张青梅 | 计算机专业 | 刘晨 |
张青梅 | 计算机专业 | 王敏 |
张青梅 | 信息专业 | 李勇 |
张青梅 | 信息专业 | 刘晨 |
张青梅 | 信息专业 | 王敏 |
刘毅 | 计算机专业 | 李勇 |
刘毅 | 计算机专业 | 刘晨 |
刘毅 | 计算机专业 | 王敏 |
刘毅 | 信息专业 | 李勇 |
刘毅 | 信息专业 | 刘晨 |
刘毅 | 信息专业 | 王敏 |
2.关系(relation)
D1 * D2 * … *Dn 的子集叫做域 D1 * D2 * … *Dn 上的关系,记做R(D1 ,D2 , … ,Dn ), R是关系的名字,n是关系的目或者度(degree)
所谓的关系,就是来自每个域的数据的一个集合,就相当于一行行的数组构成的表,表名为R
3.码(key)
候选码(candidate key):能唯一确定一个元组的属性组叫做候选码,例如通过身份证号能唯一确定一个人,那么身份证号就可以称为人的一个候选码
主码(primary key):多个候选码的时候,选择其中一个座位主码
四、关系代数
关系代数是一种抽象的语言,是用来对关系的运算来表达查询
包括传统的集合运算:并、差、交、笛卡尔积
专门的运算:选择、投影、连接、除
只要记住,关系代数核心是一种查询的表达式
1.传统关系的集合运算
传统的关系运算与我们平常数学中学到的集合运算相同,以下各举一个例子
关系R:
A | B | C |
---|---|---|
a1 | b1 | c1 |
a2 | b2 | c2 |
a3 | b3 | c3 |
关系S:
A | B | C |
---|---|---|
a1 | b2 | c2 |
a1 | b3 | c2 |
a2 | b2 | c1 |
R∪S
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
R∩S
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
R-S
A | B | C |
---|---|---|
a1 | b1 | c1 |
R×S
R.A | R.B | R.C | S.A | S.B | S.C |
---|---|---|---|---|---|
a1 | b1 | c1 | a1 | b2 | c2 |
a1 | b1 | c1 | a1 | b3 | c2 |
a1 | b1 | c1 | a2 | b2 | c1 |
a1 | b2 | c2 | aa | b2 | c1 |
a1 | b2 | c2 | a1 | b3 | c2 |
a1 | b2 | c2 | a2 | b2 | c1 |
a2 | b2 | c1 | a1 | b2 | c2 |
a2 | b2 | c1 | a1 | b3 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 |
2.专门的关系运算
专门的关系运算包括选择、投影、连接、除
以下面的3个关系为例。
Student
学号Sno | 姓名Sname | 性别Ssex | 年龄Sage | 所在系Sdept |
---|---|---|---|---|
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 张立 | 男 | 19 | IS |
Course
课程号Cno | 课程名Cname | 先行课Cpno | 学分Ccredit |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 2 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
SC
学号Sno | 课程号Cno | 成绩Grade |
---|---|---|
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215122 | 2 | 90 |
201215122 | 3 | 80 |
2.1 选择(selection)
选择是从行的角度,筛选出符合条件的元组
例:查询信息系(IS)全体学生 :δSdept=‘IS’(Student)
Sno | Sname | Ssex | Sage | Sdept |
---|---|---|---|---|
201215125 | 张立 | 男 | 19 | IS |
查询年龄小于20岁的学生 : δSage<20(Student)
Sno | Sname | Ssex | Sage | Sdept |
---|---|---|---|---|
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 张立 | 男 | 19 | IS |
2.2 投影(projection)
投影是从关系中选出一些属性列组成新的关系,从列的角度考虑
例:查询学生的姓名和所在系: ∏Sname,Sdept(Student)
Snam | Sdept |
---|---|
李勇 | CS |
刘晨 | CS |
王敏 | MA |
张立 | IS |
查询学生关系中都有哪些系: ∏Sdept(Student)
Sdept |
---|
CS |
MA |
IS |
注意有重复的数据要删除,因此只有三个元组
2.3连接
连接是将两个关系以某种关系合并成一个关系
连接包括两种最为常用的:等值连接(equioin) 和 自然连接(natural join)
以下面两个关系为例
R
A | B | C |
---|---|---|
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | C |
---|---|
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
等值连接是将两个关系中,某个分量相等的,变为一个关系
例 等值连接 R⋈SR.b=S.b
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b1 | 3 |
a1 | b2 | 6 | b2 | 7 |
a2 | b3 | 8 | b3 | 10 |
a2 | b3 | 8 | b3 | 2 |
注意:等值连接相同的属性要进行区分
非等值连接 R⋈SC<E
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b2 | 7 |
a1 | b1 | 5 | b3 | 10 |
a1 | b2 | 6 | b2 | 7 |
a1 | b2 | 6 | b3 | 10 |
a2 | b3 | 8 | b3 | 10 |
自然连接是一种特殊的等值连接,要求两个关系中必须有相同名称的属性组,在连接后的关系中只保留一个
例: 自然连接R⋈S
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
注意自然连接和等值连接的区别
外链接(outer join) 是在自然连接的基础上,加上那些被舍弃的元组,把舍弃的元组加入新的关系,在没有数据的地方上填充NULL
根据保留数据的不同,分为外链接、左外连接、右外连接,分别的意思就是都保留、只保留左边、只保留右边
例如:R⋈S
外连接
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
a2 | b4 | 12 | NULL |
NULL | b5 | NULL | 2 |
左外连接
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
NULL | b5 | NULL | 2 |
右外连接
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
NULL | b5 | NULL | 2 |
2.4 除运算(division)
R/S 表示所有在R中,不在S中的属性的值
除是从行和列的角度记性筛选
例如
关系R
A | B | C |
---|---|---|
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
关系S
B | C | D |
---|---|---|
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
计算R÷S步骤
1.首先R和S公共的属性是B和C
2.再看S在BC上的投影共有3种,即(b1 , c2),( b2, c1), (b2, c3)
3.R比S多的属性是A,A属性有四种不同的取值,从a1 - a4
4.其中a1对应的BC有3种{(b1 , c2),( b2, c1), (b2, c3)}(也叫作a1的象集),同理可得其他对应的象集
5.只有a1对应的BC属性包括S在BC上的投影,所以R÷S = {a1}