第二章:关系数据库
了解
关系数据结构及形式化定义、关系操作、关系的完整性、关系代数
掌握
关系模型的三个组成部分及各部分所包括的主要内容 关系数据结构及其形式化定义 关系的三类完整性约束 关系代数及其运算,包括并、交、差、选择、投影、连接、除、广义笛卡儿积
关系模型三个组成部分
关系数据结构 关系操作集合 关系完整性约束
3.1实体完整性规则:
若属性A是基本关系R的主属性,则属性A不能取空值参照完整性规则:若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值) 或者等于S中某个元组的主码值(一句话就是:外键要么为空,要么为关联表的主键值)
3.2用户定义的完整性:
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求 关系数据语言的特点和分类 关系代数语言 关系演算语言
具有关系代数和关系演算双重特点的语言 域、笛卡儿积、关系、元组、属性 域:域是一组具有相同数据类型的值的集合
笛卡儿积:D1D2…*Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}(一句话:跟我们学的组合基本一样,形成的结果就是笛卡尔积) 关系:在域D1,D2,…,Dn上笛卡儿积D1D2…*Dn的子集,表示为R(D1,D2,…,Dn) 元组:关系中的每个元素是关系中的元组 属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,对每列起一个名字,称为属性 候选码、主码、外码 候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)(一句话:可以理解成候选总统) 主码:若一个关系有多个候选码,选定其中一个为主码(primary key)(总统,也就是主键) 外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码(foreign key),简称外码(也就是外键)
候选码和主码的关系
若关系中的某一属性组的值能唯一标识一个元组,该属性组称为候选码
关系模式?关系?关系数据库?
关系是关系模式在某一时刻的状态或内容
关系模式:关系的描述称为关系模式(relation schema),
关系模式形式化表示为R(U,D,DOM,F)。R为关系名,U为组成该关系的属性名集合,D为属性组U中属性来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合关系:在域D1,D2,…,Dn上笛卡儿积D1D2…*Dn的子集,表示为R(D1,D2,…,Dn)
关系数据库:关系数据库也有型和值之分。
关系数据库的型:称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。 关系数据库的值:是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
关系模式和关系的区别
关系模式是型;关系是值,是关系模式的实例
等值连接与自然连接区别和联系
自然连接是一种特殊的等值连接,它要求两个关系中进行比较分量,即连接属性必须是相同的属性组,并且要在结果中去掉其中一个的重复属性 例如:R(a,b,c)U(a,b,d)自然连接就是 Z(a,b,c,d)b在U里已经有了,所以去掉重复的。
等值连接就是 R.a R.b R.c U.a U.b U.d
代数运算,用基本运算表示其他运算
基本运算(与我们所学的数学的集合基本一致)
- 【并】:RUS仍为n目关系,由属于R或属于S的元组组成
- 【差】:R-S仍为n目关系,由属于R而不属于S的所有元组组成
- 【笛卡儿积】(全排列组合):RS列:(n+m)列元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组,行:k1k2各元组【投影】:从R中选择出若干属性列组成新的关系
πA® = { t[A] | t∈R } 例:查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影 πSname,Sdept(Student)
- 【选择】:在关系R中选择满足给定条件的诸元组
σF® = {t|t∈R∧F(t)= ‘真’} F:选择条件,是一个 例:查询信息系(IS系)全体学生 σSdept = ‘IS’ (Student) 特别说明:π投影是竖着取, σ选择是横着取,也特别好记,选择的尾巴向右所以形象的看成横着取值
其他运算
- 【交】:RnS仍为n目关系,由既属于R又属于S的元组组成
- 【连接】:从两个关系的笛卡儿积中选取属性间满足一定条件的元组
- 【除】:给定关系R(X,Y) 和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,R÷S = {tr[X] | tr∈R ∧ πY(S) 真包含于 Yx }
课后习题
关于关系模型
一个关系至少要有一个候选码 行、列的次序可以任意交换 一个列的值只能来自一个域 不同的列应有不同的列名 一个码是【可有多个或者一个其值能够唯一表示该关系模式中任何元组的属性组成】 实体以及实体之间的联系都可以使用相同的结构类型来表示 非主属性不可能出现在任何候选码中 候选码都可以唯一地标识一个元组 关系操作中,操作的对象和结果都是【集合】 “性别”属性要求只能取“男”/“女”,这属于【用户定义的完整性】 两个关系R(A,B,C)和S(B,C,D)自然连接,得到结果包含【4】列 在左外连接中,保留的是左边关系中所有的元组 在关系模型中,关系操作包括【查询】【插入】【修改】【删除】 关系模型包括8种查询操作,【并】【笛卡儿积】【选择】【投影】【差】是基本操作 职工([职工号],姓名,年龄,部门号)和部门([部门号],部门名称)存在引用关系,其中【职工】是参照关系,【部门号】是外码
什么是关系完备性?关系演算在语言表达能力上是完备的吗? 关系完备性是指一个查询语言能够表示关系代数可以表示的所有查询。 关系演算具有完备的表达能力 现有如下关系:患者(患者编号,患者姓名,性别,出生日起,所在单位);医疗(患者编号,患者姓名,医生编号,医生姓名,诊断日期,诊断结果)其中,医疗关系中的外码是【医生编号和患者编号】 现有一个关系:借阅(书号,书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本,则该关系模式的外码是【书号+读者号+借期】 关系模型中实现实体间 N:M 联系是通过增加一个【关系】实现 关系代数运算是以【集合运算】为基础的运算 关系数据库管理系统应能实现的专门关系运算包括【选择、投影、连接】
五种基本关系代数运算是【∪ - × σ π】(并,差,笛卡尔积,投影,选择) 其他三种交,连接,除都可以通过基本五种关系代数运算实现
关系代数表达式的优化策略中,首先要做的是【尽早执行选择运算】 关系数据库中的投影操作是指从关系中【抽出特定字段】 从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是【选择】操作 关系代数中的连接操作是由【选择和笛卡尔积】操作组合而成 自然连接是构成新关系的有效方法。一般情况下,当对关系R和S是用自然连接时,要求R和S含有一个或者多个共有的【属性】 假设有关系R和S,在下列的关系运算中,【R×S】运算不要求:“R和S具有相同的元数,且它们的对应属性的数据类型也相同” 假设有关系R和S,关系代数表达式R-(R-S)表示的是【R∩S】 有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是【πS_ID,SCORE (σ age>22 (SC) ) 】【πS_ID,SCORE (σ age>22 (πS_ID,SCORE,AGE (SC) ) ) 下面四个关系表达式是等价的,是判别它们的执行效率【E3最快】 E1 =πA (σ B=C ∧ D=E′ (R×S) )E2 =πA (σ B=C (R× σD=E′ (S) )E3 =πA (R∞B=CσD=E′(S) )E4 =πA (σD=E′ (R∞B=C S) )
特别补充:如何确定谁是主码,可以画图,如果没有箭头指向都是主码。例如A->B B->C 那么只有A没有箭头被指,那么A就是主码(也就是入度为0)