您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 《数据库管理系统》教案-第二章
第二章关系数据模型2.1关系定义2.2关系运算和关系演算2.3函数依赖2.4关系规范化2.1关系定义1.基本术语(terms)关系模型并不难理解,但它是理论,大多数理论都带有它自己的专门术语,关系模型在这方面也不例外。基本术语如图2.1-关系术语所示,有:域(domain)pooloflegalvalues元组(tuple)roworrecord关系(relation)table属性(attribute)columnorfield度(degree)numberofcolumns势(cardinality)numberofrecords主键(primarykey)uniqueidentifier域:一个域就是一个数据类型(简称为类型),(domain)它可能是一种系统定义的类型,如INTERGER(int)或CHAR(char)。更常见的是用户自己定义的类型,如学生-成绩数据库中的“学号”或“课程编号”等。值集:即值的集合(valueset)类型:什么是一个类型呢?它是一个值的集合和(datatype)定义在这个值集上的一组操作的总称。伴随着给定的类型,就会出现操作符的问题:即何种操作符能合法地应用于给定类型的值上;也就是说,该类型的值只能被定义在相应类型上的操作符操作。例如,对于INTEGER,系统提供:操作符“=”、“”,等等,用来比较整数大小。操作符“+”、“*”,等等,执行整数上的算术操作。对于INTEGER,系统不提供:操作符“&”(连接)、SUBSTR(取子串)等操作符用在整数上进行字符串操作。换句话说,对于“INTEGER”类型系统不支持字符串操作。提示:不同的关系数据库管理系统对每一种系统允许的类型所提供的操作的操作符会有所不同。例如:Access中提供“+”和“&”操作符来支持对字符串的连接操作,如,“abc”+“efg”结果是“abcefg”“abc”&“efg”结果也是“abcefg”2.关系的数学定义笛卡尔积:给定一组域D1,D2,……,Dn,则D1×D2×……×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}称为D1,D2,……,Dn的笛卡尔积。其中每个(d1,d2,…,dn)叫做一个n元组,元组中的每个di是Di域中的一个值,称为一个分量。例如,设有域D1={“张金”,“王银”,“李玉”},D2={“男”,“女”}则对应的笛卡尔积:D1×D2={(“张金”,“男”),(“张金”,“女”),(“王银”,“男”),(“王银”,“女”),(“李玉”,“男”),(“李玉”,“女”)}关系:简单地说,如果把关系看作一张表,那么一个元组就是这张表的一行,一个属性就是一列;元组的数目称为势,属性的数目称作度;域是值的集合,关系中属性的值取自域。这里有一个关系的精确定义:给定一个集合,它包含n个类型或域Ti(i=1,2,⋯n),这些域没有必要各不相同。R如果包含如下定义的表头(heading)和主体(body),那它就是一个关系。a)表头是具有n个形式为Ai:Di的属性的集合,其中:Ai(必须各不相同)是R的属性名;Ti是相应类型的名字(i=1,2,⋯,n)。b)主体是一个包含m个元组t的集合,其中,t依次是形式为Ai:vi的分量的集合,vi是类型Di的值,即元组t在属性Ai上的值(i=1,2,⋯,n)教材中关于“关系”的定义:设有属性A1,A2,……,An,它们分别在域D1,D2,……,Dn中取值,则笛卡尔积D1×D2×……×Dn中的任何一个子集称为一个关系,记为R(A1,A2,……,An),R∈D1×D2×……×Dn其中R为关系名,Ai为属性名(必须不同)。“关系”举例:学生-性别(姓名,性别)={(“张金”,“男”),(“王银”,“男”),(“李玉”,“女”)}姓名性别张金男王银男李玉女3.关系的性质任何一个关系都具备以下特性:关系中的每一个属性值都必须是不能再分割的数据值。每一列中的数值是同类型的数据,来自同一个域不同的列应给予不同的属性名。同一个关系中不允许有相同的元组。行、列的次序可以任意交换,不影响关系的实际意义。2.2关系运算和关系演算任何一个DBMS都要提供能从“关系”的纵横两个方向(即:属性和元组)上进行检索、插入、更新和删除操作。操作的主要组成部分是关系代数,它是一个操作符的集合,以关系作为操作对象,返回的结果是一个关系。(即所谓的“关系进,关系出”)Codd定义了一个含8个操作符的集合,即通常所说的基本(original)关系代数。它们是:1.传统的集合操作符并(union)交(intersection)差(difference)笛卡尔积(Cartesianproduct)(所做的修改只是操作对象变为了特定的关系,而不再是任意的集合)2.专门的关系操作符选择(restrict,也称为select)投影(project)连接(join)除(divide)1.传统的集合操作符设R1和R2为参加运算的两个关系,如下图所示。它们具有相同的度,且相对应的属性值取自同一个域,则可定义以下的三种传统集合运算。R1R2ABCa1b1c1a1b2c2a2b2c1ABCa1b2c2a1b3c2a2b2c11)并(R1∪R2或R1UNIONR2)是相同类型的一个关系,关系的主体由出现在R1中或R2中或同时出现在两者之中的所有元组组成。R1∪R2R1R2ABCa1b1c1a1b2c2a2b2c1ABCa1b2c2a1b3c2a2b2c1ABCa1b1c1a1b2c2a2b2c1a1b3c22)交(R1∩R2或R1INTERSECTR2)是相同类型的一个关系,关系的主体由同时出现在两者之中的所有元组组成。R1∩R2R1R2ABCa1b1c1a1b2c2a2b2c1ABCa1b2c2a1b3c2a2b2c1ABCa1b2c2a2b2c13)差(R1-R2或R1MINUSR2)是相同类型的一个关系,关系的主体包含属于R1但不属于R2的所有元组。R1-R2R1R2ABCa1b1c1a1b2c2a2b2c1ABCa1b2c2a1b3c2a2b2c1ABCa1b1c14)笛卡尔积(R1×R2或R1TIMESR2)设有关系R1(A1,A2,……,Am)和R2(B1,B2,……,Bn)其中R1和R2没有共同的属性名称,{A1:a1,A2:a2,⋯,Am:am}是R1中的一个元组{B1:b1,B2:b2,⋯,Bn:bn}是R2中的一个元组两元组的并是一个元组:{A1:a1,A2:a2,⋯,Am:am,B1:b1,B2:b2,⋯,Bn:bn}则R1与R2的笛卡尔积R1×R2是一个关系,它的表头是R1和R2表头的并,主体包括所有R1中的元组和R2中的元组进行并操作而得到的元组。注意结果的势是R1的势和R2的势的乘积,结果的度是R1的度和R2的度的和。例如,R1×R2R1R2学号021100102110020211003课程编号C1C2C3学号课程编号0211001C10211001C20211001C30211002C1…………0211003C32.专门的关系操作符1)选择σ假设关系A含有属性X和Y(也可能有别的),θ是一个比较操作符,诸如“=”、“”,等等,XθY为定义好的条件(F),若给X和Y赋予具体的值,则能计算出真值(true或false)。关系A在属性X和Y上的选择是一个关系σF(A),关系的表头和A的一样,主体包括所有满足条件XθY为真的元组。例如,关系A如左下表,条件F为[性别]=“男”,则σF(A):姓名性别张金男王银男李玉女姓名性别张金男王银男2)投影Π投影运算是对属性的操作,是从一个给定关系的所有属性中选择某些指定的属性T。假定关系A有属性X,Y,⋯,Z(可能还有其他的)。关系A在T上的投影ΠT(A)是一个满足如下条件的关系:•表头由A的表头除去不包含在属性集合T中的属性而得到;•主体包含所有形式为{X:x,Y:y,⋯,Z:z}的元组,这样的元组是由对应关系A的属性T的值组成。注意:投影之后不仅取消了某些属性,而且因属性减少可能会出现重复的元组,这些元组也将自动取消。例如关系A如左下表,选择的属性集合T为[性别]A则ΠT(A):实际中经常出现这种情况:指定被投影掉的属性比指定投影的属性更方便。例如第13页图1-9(b)所示的关系P,可以说“从关系P中投影掉属性[颜色]”,而不是“关系P在属性[零件号]、[零件名]、[重量]、[存放点]上的投影”。(就像下面:P{ALLBUTWEIGHT})姓名性别张金男王银男李玉女性别男女3)连接连接是从两个关系R和S的笛卡尔积中选取满足条件的元组形成新的关系,记为RFS。例如:RSRZTSXYZx135x161x240x321x453YT7401650758XRYZSYTx13574x13501x45301如果条件F是一个相等条件,则称为等值连接,例如RZ=TS。如果是同名属性的等值连接又称为自然连接。例如RY=YS,简记为RS,结果如下:通常JION总是指自然连接。XYZSYTx16165x45358XYZTx1615x45384)除/除法运算表示为R/S。应满足以下条件:关系S的属性全部包含在关系R中;关系R的一些属性不包含在关系S中。运算所得结果是一个关系(T),则T中的属性由R中除S中的属性之外的属性组成,而T中的元组由R与S中在所有相同属性上有相等值的元组组成。ABCa1b1c2a1b2c4a2b3c1a3b1c2a3b2c4a4b1c2例如:RSR/SBCb1c2b2c4Aa1a3关系运算举例:下面提供了用在查询中的有关关系代数表示的一些例子。对照第13页图1-9中的数据检验这些例子。1.求提供零件P2的供应商名称((SPJOINS)WHERE零件号=零件号(‘P2’)){厂名}解释:首先构造关系SP和S在供应厂号上的自然连接,从概念上来说,它扩展了每个SP元组相应的供应商信息(即供应厂号、状态码和厂址的值)。随后这个连接以零件P2为条件进行了选择。最后选择在供应厂号上做了投影。结果中只有供应厂号这一个属性。结果如下图所示:供应厂号零件号存储量厂名状态码厂址S1P1300YL20咸阳S1P2200YL20咸阳S1P3400YL20咸阳S2P1300XQ10西安S2P2400XQ10西安S3P2200XT30西安关系SP和S在供应厂号上的自然连接:厂名YLXQXT结果:关系运算举例:2.求提供至少一个红色零件的供应商名称(((PWHERE颜色=颜色(“红”))JOINSP){供应厂号}JOINS){厂名}结果唯一的属性还是厂名。下面给出对同一个查询的不同的表述:(((PWHERE颜色=颜色(“红”))JOINSP){零件号}JOINS){厂名}这个例子说明了一个重要的事实:对同一个查询经常有不同的表述。关系演算前面,我们说关系模型的操作部分是基于关系代数的,同样我们也可以说它是基于关系演算的。换句话说,关系代数和关系演算是可以相互替代的。它们之间的基本区别是:关系代数提供了像连接、并和投影等明确的集合操作符,并且这些集合操作符告诉系统如何从给定关系构造所要求的关系;而关系演算仅提供了一种描述(notation)来说明所要求的关系(这一关系是根据给定关系导出的)的定义。例如第13页图1-9所示的关系SP和S。查询提供零件P2的供应厂的厂名和厂址。此查询的一个代数操作形式可以描述如下:首先,根据供应厂号连接供货厂表(关系S)和供货表(关系SP)中的元组;其次,在上述连接结果中选择零件号为P2的元组;最后,将上述选择结果在供应厂号和厂址列上投影。相比而言,一个演算形式可以简单地描述为:查取供应厂号和厂址当且仅当在关系SP中存在这样的一个元组:它具有同样的供应厂号,且它的零件号取值P2。在后一种形式中,用户仅仅描述了所要求结果的定义而把具体的连接、选择等操作留给了系统。提示:关系演算是描述性(descriptive)形式的,而关系代数是说明性(prescriptive)形式的。关系演算描述了问题是什么,而关系代数说明
本文标题:《数据库管理系统》教案-第二章
链接地址:https://www.777doc.com/doc-2838751 .html