1、库,原,据,数,理,关系数据库的基本概念,关系模型概述关系数据库系统是支持关系模型的数据库系统 关系模型由三部分组成:数据结构关系操作集合关系的完整性。,在关系模型中最重要的数据结构就是关系; 关系就是一张表,设计关系就是设计一张表; 元组是表中的一行; 属性是表中的一列,属性名是给属性起的名字; 关键字是表中的某个属性组,唯一确定一个元组; 关系模式是对关系的描述,一般表示为关系名(属性1,属性2,属性n); 外键是关系中不是该关系的关键字或只是关键字的一部分的某个属性或属性组合,但它同时是另一个关系的关键字; 主表是以外键作为主键的表; 从表指外键所在的表。 在为数据库设计关系时,必须为每
2、个关系指定一个关键字或主码,并且在该关系中,关键字的值不能为空,即关键字的值为空的元组在关系中是不允许存在的。在有些关系中关键字是由单个属性组成的,在另一些关系中关键字是由若干个属性的组合而构成的,即这种关系中的元组不能由任何一个属性惟一表示,必须由多个属性的组合才能惟一表示。关系模式是稳定的,而关系是随时间不断变化的,因为数据库中的数据在不断更新。,一单一的数据结构-关系,在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型即关系来表示。关系模型中数据的逻辑结构是一张二维表。,二关系操作,关系操作指存储操作和检索操作,且以检索操作为核心。关系模型给出了关系操作的能力和特点,但不对DB
3、MS的语言给出具体的语法要求。关系语言的特点是高度非过程化。用户不必请求DBA为他建立特殊的存取路径,存取路径由DBMS的优化机制来完成。此外,用户也不必求助于循环、递归来完成数据操作。,上一页,下一页,退 出,要 点,目 录,关系操作包括:选择、投影、连接、除、并、交、差等查询操作和增加操作、删除、修改操作,非关系的数据操作方式则为一次一记录方式。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合的方式。,三、关系的三类完整性约束,关系模型的三类完整性是实体完整性、参照完整性和用户定义的完整性。实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该
4、由关系自动支持。,关系数据结构及形式化定义,在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型即关系来表示。,1. 关系,定义:域(Domain)是值的集合。 (属性的取值范围) 例如: 域名 基数 姓名=张力,李红,王芳,刘吉 4 职称=高工,工程师,助工,技术员 4X=男,女 2,定义:给定一组域D1,D2,Dn,则D1D2Dn=(d1,d2,dn)|diDi , I=1,2, n 称为D1,D2,Dn 的笛卡尔积。其中每一个(d1,d2,dn)叫做一个n元组(表中的一行,称为一个元组),元组中的每一个di是Di域中的一个值,称为一个分量(元组中的属性)。 若Di(i=1,2,n
5、)为有限集,其基数为mi(i=1,2,n),则D1D2Dn的基数为:m=m1*m2* *mn 其中:m=笛卡尔积的基数,例:给定三个域:D1=王芳,刘吉,D2=高工,助工, D3=男,女,则D1D2D3笛卡尔积是D1,D2,D3各域的各元素间的一切可能的组合。如表:,姓名 职称 性别 王芳 高工 男 王芳 高工 女 王芳 助工 男 王芳 助工 女 刘吉 高工 男 刘吉 高工 女 刘吉 助工 男 刘吉 助工 女,D1D2D3的基数m=222=8,给定一组域D1,D2,Dn 则D1D2D3的子集称为D1D2Dn上的关系。 记作R(D1,D2,Dn), 其中,R为关系名,n为关系R的度或目。当n=1
6、时,称该关系为单元关系, 当n=2时,称该关系为二元关系,定义,根据实际情况,能从上表中找到两个元组。如表。构成名为 “职工”关系(表文件名)。可以记作:职工(姓名,职称,性别)表2,关系中的某一属性组,若它的值唯一地标识一个元组(记录),则称该属性组为候选键(码) 若一个关系有多个候选键,则选定其中一个为主键(码),主键的诸属性称为主属性。不包含在任何候选码中的属性称为非码属性。关系模式的所有属性组是这个关系模式的候选码,称为全码。,关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表、视图表 关系的性质()任意两个元组(即二行)不能完全相同。()关系中元组(行)的次序是不重要的,
7、可以 任意交换。()属性(列)的次序也是不重要的,可以任意交换。()同一列中的分量,必须来自同一个域,是同类型的数据。,(5)属性必须有不同的名称,但不同的属性可以出自相同的域,即它们的分量可以取值于同一个域。例如在表,职业与兼职是两个不同的域,但都取自同一个域集合。 (6)每一分量必须是原子的,即是不可再分的数据项。 满足上述性质的关系称为规范化关系。 表3,2关系的一阶谓词表示,定义:设有关系模式R,其原子谓词表示形式为P(t),其中P是谓词,t是个体变元,以元组为其表现形式。关系R与原子谓词P之间的关系如下:,集合的表示方法为:R=t | P(t) 表示所有使谓词为真的元组t 都属于关系
8、R。,4.1.3 关系模式,定义 关系的描述称为关系模式。它可以形式化地表示为:R(U,D,dom, F) 其中R为关系名,U为组成该关系的属性名集合,D为属性组U中所来自的域,dom为属性向域的映像集合。F为属性间数据的依赖关系集合。关系模式通常可以简记为R(U),通常简记为: 关系名(属性名,属性名,属性n)。,属性向域的映象常用属性的类型、长度来说明。如表的职工关系其域可定义为:DOMAIN 姓名 PIC () DOMAIN 职称 PIC () DOMAIN 性别 PIC () 以上三行分别定义了三个域。姓名、职称、性别为三个域名; PIC说明域的数据类型和长度。,某一时刻对应某个关系模
9、式的内容称为相应模式的状态,它是元组的集合,称为关系。关系模式和关系常常统称为关系。,对于关系数据库要分清型和值的概念。关系数据库的型即数据库描述,它包括若干域定义以及在这些域上定义的若干关系模式(是这些域的子集);数据库的值是这些关系模式在某一时刻对应的关系的集合。数据库的型亦称为数据库的内涵(二维表格的框架),数据库的值亦称为数据库的外延。 关系模式是稳定的,而关系是随时间不断变化的,因为数据库中的数据在不断更新。,关系数据库模式,多个关系的集合构成了关系数据库 例:学生选课数据库系统的模式:由三个关系模式构成。 S(S#,SN,SEX,SA,SD) C(C#,CN,PC#) S-C(S#
10、,C#,G),四种基本数据操纵功能:() 数据检索 () 数据插入() 数据删除 () 数据修改对关系模型的数据操纵可描述为:()操纵的对象()基本操纵方式五种:属性指定、元组选择、关系合并、元组插入、元组删除,1关系模式数据库系统的结构2关系数据语言的分类独立型 宿主型3关系数据语言与宿主语言的接口方式显式过程调用隐式过程调用按系统固有语法调用,关系数据库的用户接口和关系数据语言,关系代数,关系数据库的数据操作分为查询和更新两类。查询语句用于各种检索操作,更新操作用于插入、删除和修改等操作。 关系查询语言根据其理论基础的不同分成两大类: 1.关系代数语言: 查询操作是以集合操作为基础运算的D
11、ML语言。 2.关系演算语言: 查询操作是以谓词演算为基础运算的DML语言。,关系代数是以关系为运算对象的一组高级运算的集合。关系定义为元数相同的元组的集合。集合中的元素为元组,关系代数中的操作可分为两类:传统的集合操作: 并、差、交、笛卡尔积。扩充的关系操作: 投影,选择,联接和自然联接,除。,关系代数的基本运算,传统的集合运算主要指并、交、差、笛卡尔积四种运算。它们传统地用于两个集合之间的运算。当用于关系运算时,参加运算的关系必须是相容的和可并的,即它们应有相同的度(属性个数相等),且相应的属性值来自同一域。如下表中的关系R和S就是两个相容的关系。,4.3.1 传统的集合运算,记作,由属于
12、和属于S的元组合并而得,但须除去重复的元组。可用于元组的插入操作。,1关系与关系之并,2关系与关系之差,记作一,由属于 但不属于S 的元组组成。可用于删除操作。,记作,由属于 又属于S 的元组组成。,3关系与关系之交,两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1k2个元组。 记作:trts|trR tsS,4. 广义笛卡尔积,在存储操作中, 并运算可实现插入; 差运算可实现删除; 修改相当于“删除加插入” 。 例:见P63 例4-2
13、4-3,4.3. 2 专门的关系运算(选择、投影、连接、除),(1)选择运算 性质: 单目运算,即操作对象仅有一个关系。 文字表示: SELECT WHERE 公式表示: 记为:c(R)tt属于RC(t)=true,C表示逻辑条件表达式,这个表达式按以下规则组成: 关系模型中表示大于、小于、等于、不等于、大于或等于、小于或等于这些比较运算符中的一种。,作用:在关系的水平方向上选取符合给定条件的子集。其中的条件是以逻辑表达式给出的 ,该逻辑表达式的值为真的元组被选取。这是从行的角度进行的运算,即水平方向抽取元组。经过选择运算得到的结果可以形成新的关系,其关系模式不变,但其中元组的数目小于或等于原
14、来的关系中的元组的个数,它是原关系的一个子集.,例:找出关系GP中单价小于或等于1.80元的通用零件。 这实际上是从关系GP中找一个水平子集。 用公式表示可写成: 单价1.80(GP)tt属于GPC(t)=true,性质:单目运算,即操作对象仅有一个关系。 文字表示: (关系名) 作用:在关系的垂直方向取含有给定属性的子集。 注意:在属性表中可包括一至若干个属性。,(2)投影运算,从关系中挑选若干属性组成的新的关系称为投影。这是从列的角度进行运算。经过投影运算可以得到一个新关系,其关系所包含的属性个数往往比原关系少,或者属性的排列顺序不同。如果新关系中包含重复元组,则要删除重复元组,(2)投影
15、运算,例:列出关系中所有产品的名称与型号。 其公式应写为:产品名,产品型号(P),(2)投影运算,注意:投影后,如出现内容完全相同的元组,应将重复的元组取消。所以投影不仅会取消一些列,也可能会取消某些行。,例:找出所有选用了通用零件的产品号即取关系PGP在属性“产品号”上的投影: 产品号( ) 如左图,产品号P1 P2 P4,(2)投影运算,联接有三种类型: -连接(条件连接) 自然连接 半连接,(3)连接JOIN运算,性质:二目运算。联接是从关系R和S的笛卡尔积中选取属性值满足某一操作的元组。 连接可看成是有选择的笛卡尔乘积。 记为:RijS , 这里i和j 分别是关系R和S中第 i个、第j
16、个属性的序号。 它的含义是:RijS i (n+j)(RS) 如果是等号“=”,该联接操作称为“等值联接”。, -连接,例:给定两个关系R、S:RR.z=s.zS,两个关系R和S的自然联接用R S表示。具体计算过程如下:计算RS设R和S的公共属性是A1,Ak,挑选RS中满足下列条件的那些元组。 R.A1=S.A1,,R.Ak=S.Ak去掉S.A1,, S.Ak的这些列。,自然连接,如果与的等值属性表中含有 n(n1)个属性,则新关系的原关系与的度数之间应满足以下条件:dp=dr+ds-n,选择R和S公共属性值均相等的元组,并去掉RS中重复的公共属性列。 如果两个关系中没有公共属性,那么其自然联
17、接就转化为广义笛卡尔积操作。,例:求选用通用零件号为GP1的零件单价及使用GP1的产品名称和型号。,第一步可先将它们自然连接,得出新关系NEW=PGP P,,NEW,NEW1=零件号GP1(NEW) NEW2=零件名,单价,产品名,产品型号(NEW1) 然后用选择和投影求得所需要的信息,半连接,两个关系R和S的半连接运算定义为:,两个关系R和S的连接运算可以用半连接运算作为中间步骤来实现:,例:求P与PGP自然连接。 先对关系P与PGP进行半连接运算,一个连接运算可用半连接运算作为中间步骤来实现。 它的意义在于减少参与连接运算的数据量,半连接的结果如表PP,连接的结果如表PL 。,表PP,表P
18、L,P66 例 48例 49,性质:二目运算,但被除数关系必须包含除数关系的全部属性。 文字表示: DIVIDE BY 公式表示: / 作用:设T=R/S,由于R包含了S的全部属性,故可以表示为 T=R(X,Y)/S(Y),其中:X、均可为单个属性或属性组。在商关系T中,只包含属性表(或者说属性表Y已被除去)。但中只允许保留这样的元组:当它们与连接所组成的新元组全部能在原来的关系R 中找到.,(4) 除法运算,例:找出同时选用通用零件GP3与GP4 和同时选用GP1、GP2 、GP3的产品号。,PG/S1=T1 PG/S2=T2,PG,S1,S2,T1,T2,在关系代数运算中,把由基本操作经过
19、有限次复合的式子称为关系代数表达式。这种表达式的结果仍然是一个关系。可以使用关系代数表达式表示各种数据查询操作。,关系代数表达式及其应用实例,例题:设教学库中有三个关系: 学生关系S(SNO,SNAME,SAGE,SEX) 学习关系SC(SNO,CNO,GRADE) 课程关系C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达各个查询语句 1.检索学习课程号为C2的学生学号与成绩。,3.检索选修课程名为MATHS的学生学号与姓名。,上一页,下一页,退 出,要 点,目 录,4.检索选修课程号为C2或C4的学生学号。,5.检索至少选修课程号为C2和C4的学生学号。,6.检索不学C2课
20、的学生姓名与年龄。,7.检索学习全部课程的学生姓名。,8.检索所学课程包含S3所学课程的学生学号。,关系演算,用谓词演算作为关系数据查询语言的思想,最早见于Kuhns的论文,而把它真正用于关系数据语言,提出关系演算概念的则是EFCdd。他首先给出了关系演算语言ALPHA,把数理逻辑的谓词演算引入到关系运算中,就可以得到以关系演算为基础的运算。关系演算又可分为元组关系演算和域关系演算,前者以元组为变量,后者以属性为变量,分别称为元组演算和域演算。,元组关系演算,元组关系演算表达式的一般形式为: tP(t)。其中,t是元组变量,表示一个元数固定的元组;P是公式。 tP(t)表示满足公式P的所有元组
21、t的集合。 定义4-3:关系演算的原子公式(简称原子公式)定义如下:在元组表达式中,公式由原子公式组成。原子公式有三种形式:,上一页,下一页,退 出,要 点,目 录,(1) 原子谓词R(u)是原子公式。其中,R是关系名,u是元组变量。它表示这样一个命题:“u是关系R的一个元组”。 (2) uivj。其中,v和u是元组变量,是算术比较运算符,ui和vj分别是u的第i个分量和v的第j个分量。uivj表示这样一个命题:“元组u的第i个分量和v的第j个分量之间满足关系。” 例如:s1u2表示元组s的第1个分量值必须小于元组u的第2个分量值。 (3) uia 或 avj。这里a是常量。 sia表示命题:
22、“元组s的第i个分量值与常量a之间满足关系。” 例如:s4=3,表示元组s的第4个分量值为3。 (4) 原子公式仅有上面三种定义方式。,上一页,下一页,退 出,要 点,目 录,在定义关系演算操作时,要用到“自由”和“约束”变量概念。 在一个公式中,如果元组变量未用存在量词 或全称量词 符号定义,那么称为自由元组变量,否则称为约束变量。约束变量类似于程序设计语言过程内部定义的局部变量,自由变量类似于过程外部定义的外部变量或全局变量。,上一页,下一页,退 出,要 点,目 录,公式的递归定义如下:1.每个原子公式是一个公式。其中的元组变量是自由变量。2.如果P1和P2 是公式,那么 P1、P1P2、
23、P1P2、P1P2都是公式。分别表示如下命题:“P1不是真”,“P1或P2或两者是真”,“P1和P2都是真”,“若P1为真则P2为真”。公式中的元组变量性质如同在P1和P2中一样,依然是自由的或约束的。,上一页,下一页,退 出,要 点,目 录,3.如果P1是公式,那么(s)(P1)也是公式。它表示这样一个命题,“存在一个元组s使得公式P1为真”。元组变量s在P1中是自由的,在(s)(P1)中是约束的。P1中其它元组变量的自由约束性,在(s)(P1)中也没有变化。 4.如果P1是公式,那么(s)(P1)也是公式。它表示这样一个命题,“对于所有元组s都使得公式P1为真”。元组变量的自由约束性与前一
24、个命题相同。,上一页,下一页,退 出,要 点,目 录,5在公式中各种运算符的优先级从高到低依次为:;和;和;。在公式外可以加括号,以改变上述优先顺序。6公式只能由上述五种形式组成,除此之外构成的都不是公式。 在元组表达式 tP(t)中,t必须是P(t)中惟一的自由元组变量。,上一页,下一页,退 出,要 点,目 录,在元组关系演算的公式中,有下列三个等价的规则: 1.P1P2等价于(P1P2);P1P2等价于(P1P2) 2.(s)(P1(S)等价于(s)(P1(S)(s)(P1(S)等价于(s)(P1(S); 3.P1P2等价于P1P2。,关系模型一般提供五种基本操作: 元组插入、元组删除、元
25、组指定、属性指定和关系合并,对应于关系代数中的五种运算:并、差、选择、投影和笛卡尔积。这五种运算可用一阶谓词演算中的公式表示出来。 设r目关系R和目关系S的谓词分别为R(u)和S(v),用它们表示并、差、选择、投影和笛卡尔积。,关系代数表达式到元组表达式的转换,上一页,下一页,退 出,要 点,目 录,1.RS=tR(t)S(t) 2.RS=tR(t)S(t) 3.RS=t(r+s)(u(r)(v(s)(R(u)S(v) t1=u1t2=u2tr=urtr+1=v1t2=v2tr+s=vs) 4.设投影操作是i1,i2,ik(R),那么元组表达式可写成: t(u)(R(u)t1=ui1t2=ui
26、2 tk =uik) 5. F(R)=tR(t)F表示。2=b(R)可写成tR(t) t2=d,上一页,下一页,退 出,要 点,目 录,例题:设关系R和S都是二元关系, 将1,4(2=3( RS)转换成元组表达式。 RS=t(4)(u(2)(v(2)(R(u)S(v)t1= u1t2=u2t3=v1 t4 =v2)2=3(RS)=t(RS)(t)t2= t3 1,4(2=3(RS)=t(u)(2=3(RS)(u) t1=u(1)t2=u(4) =t(u)(v)R(u)S(v)t1=u(1)t2= v(2)u(2) =v1 ,上一页,下一页,退 出,要 点,目 录,设有关系模式S(SNO,SN,
27、SEX,SA,SD) (例1)列出计算机科学系CS的所有学生:Scs=t|S(t) t5=CS (例2)列出所有年龄大于或等于20的学生:S20=tS(t) t420 (例3)求学生姓名及所在的系:,SNAMEDEPT=t2|(u)(S(u)tl=u2t2=u5),上一页,下一页,退 出,要 点,目 录,(例)设有关系模式R(A,B,C)和S(B,E),用元组关系演算表示连接运算=(u(3)(v(2)(R(u)S(v)t(1)= u1t2=u2t3=u3t4=v1t5=v2u3v2),2.元组关系演算的安全约束,有限的存储容量 进行无穷次的验证是毫无实际意义的把不产生无限关系或无穷验证的运算表
28、达式称为安全表达式,所采取的措施或条件称为安全约束。安全约束通常定义为一个与公式有关的有限符号集。,上一页,下一页,退 出,要 点,目 录,4.5 查询优化 查询优化的目的是为了系统在执行时既省时间又能提高效率,在关系代数运算中,通常是先进行笛卡尔积或联接运算,再进行选择和投影,恰当地安排选择、投影和联接的顺序,就可实现查询优化。 优化的策略主要有以下几点: (1)在关系代数表达式中尽可能早地执行选择操作 (早选择). (2)把笛卡尔积和随后的选择操作合并成F联接运算 (F联接) (3)同时计算一连串的选择和投影操作 (同时算) (4)保留同一子表达式的结果 (5)适当对关系文件进行预处理 (6)计算表达式之前先估计一下怎么计算合算。 以上几点需要理解。根据表达式优化的算法步骤对给定表达式进行优化。,