第二章 关系数据库
1.基本概念
- 域:一组具有相同数据类型的值(简单来说,就是属性的取值范围,比如性别的域就是{男,女}
- 笛卡尔积:域上的集合运算
-比如 D={张三,李四} E={高一,大二} 那么D和E的笛卡尔积就是
{(张三,高一)
(张三,大二)
(李四,高一)
(李四,大二)}
- 关系:直观来看,一个二维表就是一个关系
- 候选码:某一属性组的值能唯一地标识一个元组,而子集不能,则称该属性组为候选码。
比如,一个三十个人的班级中每个同学都有序号,从1-30。那么班级和序号这个属性组,就可以唯一对应一个同学,如果只知道班级,不知道序号,只知道序号,不知道班级,都无法精准找到这个同学。*
如果一个关系中有多个候选码,则选其中一个为主码。候选码的所有属性,叫为主属性,在极端情况下,关系模式的所有属性都是候选码,称为全码。
- 规范化:关系的每一个分量都必须是不可分的。
2. 关系操作
- 基本的关系操作
- 查询:选择,投影,并,差,笛卡尔积是5种基本操作。
- 修改,插入,删除,修改
- 关系数据语言的分类
- 关系代数(例如ISBL)
- 关系演算语言:元组关系演算语言(例如ALPHA),域关系演算语言(例如QBE)
- 具有关系代数和关系演算的双重特点的语言(例如SQL)
关系操作的对象和结果都是集合。
3.关系完整性
- 实体完整性:若属性A是关系R的主属性,则A不能取空值。所谓空值,就是不知道,不存在,无意义。
比如学号是学生关系中的主属性,如果学号为空,那就违反了实体完整性
- 参照完整性:设R关系中的主属性A被G关系参照,那么在G中A属性的取值要么是空值,要么是等于R中某个元组的A取值。
比如在一个学校的管理系统里面,有一个学生关系,有学生的专业名称这个属性。有一个专业关系,有专业名称这个主属性。学生关系就参照了专业关系,此时学生关系是参照关系,专业关系是被参照关系。
学生关系中的专业名称要么为空(表示这个学生还没有分专业),要么就是专业关系中的某一个专业名称。如果学生关系中的专业名称是一个专业关系中不存在的值,比如这个学校的专业里面没有中文系,但是居然有一个学生的专业名称那一栏填的是中文系,那就违反了参照完整性。
- 用户定义完整性:在用户定义一个关系时,会对一些属性做出要求,比如学生关系中,用户规定性别必须是男或者女,那如果学生关系中出现了有学生性别既不是男也不是女,那就是违反了用户定义完整性。
4.关系代数
- 传统的集合运算
- 并(和数学中的集合操作一样)
- 差(和数学中的集合操作一样)
- 交(和数学中的集合操作一样)
- 笛卡尔积(这个上面讲过了)
- 专门的关系运算
- 选择σ:在关系R中选择满足给定条件的诸元组。σname=‘zhang’ (学生)就是在学生关系中选择name是zhang的学生的信息。
- 投影:关系R上的投影是从R中选择出若干属性列组成新的关系。
Πname(学生)就是把学生关系中的name属性提取出来。
选择是对行的查询,投影是对列的查询。 - 连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
等值连接:它是从两个关系中选取A,B属性值相等的那些元组。
自然连接是一种特殊的等值连接
还有左外连接和右外连接。 - 除运算:设关系R除以关系S的结果为关系T,则T包含了所有在R但不在S中的属性及其值,且T的元组与S的所有元组的所有组合都在R中。
A – B-- C ------------- B --C – D
a1 b1 c1 ---------------b1 c2 d1
a2 b3 c2 -------------- b2 c1 d1
a3 b4 c6 ---------------b2 c3 d2
a1 b2 c3a2 b2 c3
a1 b2 c1
左边的是关系R,右边的是关系S。R中a1的象集是{(b1,c1),(b2,c3),(b2,c1)},a2的象集为{(b3,c2),(b2,c3},a3的象集是{(b4,c6)}。S中B,C的投影为{(b1,c1),(b2,c3),(b2,c1)}。
因此R÷S的结果是
A
a1