数据库技术第五章数据库设计过程E/R图到关系模式的转换关系模式的规范化需求分析概念模式设计逻辑模式设计数据库实施E/R图UMLRDBMS模式存储模式数据库运行和维护什么是概念数据建模•对系统中数据的描述•描述类间的各种关系概念数据建模过程概念数据建模方法•UML•ER概念数据建模---UML•类被表示为由3个部分组成的矩形•上面部分给出了类的名称,类名用粗体,背景颜色较深。•中间部分给出了该类对象的属性。•下面部分给出了对象的约束条件以及可以应用到这些对象的操作。其中第二和第三个部分之间,用一条线间隔开来。UML例子UML关系表达关系是一个或多个类的对象之间的语义连接一个关系可以是因为实体之间的自然联系而造成的结果,例如,一个教师属于某一个院系;也可能是由于发生了某一个事件,例如一个学生选了某门课。关系的度(或元数)•参与一个关系的类的数目一元关系二元关系关系的重数•一个类的对象与另一个类的对象存在的数目上的关系•0..1:表示最小值是0,最大值是1。•*(或0..*):表示范围从0到无穷大。•0..n:最小为0,最大为n。•单个1:代表1..1,表示关系中参与的对象数目恰好是1关系的重数举例关联•关联是一种关系•关联的2个类间产生属性概念模式设计—ER图实体联系模型(Entity-RelationshipModel,简称E-R模型)P.P.Chen于1976年在“TheEntity-RelationshipModel:TowardaUnifiedViewofData”,ACMTransactionsonDatabaseSystems,Vol1,Num1(1976).论文中提出的。模型直接从现实世界中抽象出实体类型及实体联系.用实体联系图即E-R表示数据模型。其核心就是设计E-R图(Entity-RelationshipDiagram)。E-R模型的基本概念实体(entity):客观存在,可以相互区别的事物称为实体。实体集(entityset):性质相同的同类实体的集合,称实体集。属性(attribute):实体有很多特性,每一个特性称为属性。每一个属性有一个值域,其类型可以是整数型、实数型、字符串型等。实体标识符(identifier):能惟一标识实体的属性或属性集,称为实体标识符。有时也称为关键码(key),或简称为键。联系(relationship)是实体之间的相互关系。数据模型:能表示实体类型及实体间联系的模型称为“数据模型”。实体表达E-R图的基本组成部分E/R图有四个主要部分:(1)实体集,用矩形表示。(2)属性,用椭圆形表示。(3)联系,用菱形表示。(4)直线,表示联系的类型及实体与实体之间的联系;数据联系联系(relationship)是实体之间的相互关系。二元联系有以下三种类型:①一对一联系:实体集E1中每个实体至多和实体集E2中的一个实体有联系,反之亦然,那么实体集E1和E2的联系称为“一对一联系”,记为“1:1”。②一对多联系:实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体间有联系,而E2中每个实体至多和E1中一个实体有联系,那么称E1对E2的联系是“一对多联系”,记为“1:N”。③多对多联系:如果实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么称E1和E2的联系是“多对多联系”,记为“M:N”。三种联系的E-R图实体1实体2联系实体1实体2联系实体1实体2联系1﹕1联系1﹕n联系m﹕n联系三种联系的E-R图实例客人飞机座位号联系院系教师联系课程学生联系1﹕1联系1﹕n联系m﹕n联系E-R图实例例:设计一个学生选课数据库。要求包括学生(student)、课程(course)和教师(teacher)的信息。实体中存在如下联系:一个学生可以选修多门课,而每门课也能由多个学生选修;一位教师可以教多门课,每门课也可以由多个教师讲授;用E-R图来描述此数据库。学生信息:学号(no)、学生姓名(name)、年龄(age)、地址(dddress)课程信息:课程号(no)、课程名(name)、课程学分(credits)教师信息:工号(no)、姓名(name)、教师的地址(address)学生-课程-教师E-R图studentcourseteachertaketeachcreditsnamenoaddressagenamenoaddressnamenoscore注意:如果一个联系具有属性,则这些属性也与该联系连接起来。TeachCourseNo条码白酒容量度数编号销售商联系人地址电话名称销售数量单价E-R图实例白酒销售IBM研究员E.F.Codd(EdgarFrankCodd,1924-2003)于1970发表了业界第一篇关于关系数据库理论的论文“ARelationalModelofDataforLargeSharedDataBanks”,首次提出了关系模型的概念。这篇论文是计算机科学史上最重要的论文之一,也奠定了Codd博士“关系数据库之父”的地位。E.F.Codd因此获得ACM图灵奖(1981年)。关系数据模型关系描述•关系名(关键属性,属性1,属性2,……,属性N)•Student(studentNo,studentName,birthday,sex)关系基本概念关系:对应通常所说的二维表。元组:表中的一行即为一个元组属性:表中的一列即为一个属性,例如下表有4列,就有4个属性(studentNo,studentName,birthday,sex)。主键:表中的某个属性组(可以多属性组合成主键),它可以唯一确定一个元组,例如,studentNo可以唯一确定一个学生,也就成为学生关系的主键;域:属性的取值范围,例如,大学生性别域是(男,女);分量:元组中的一个属性个数。例如,学生关系分量为4。关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,……,属性N)。关系模型实例关系关系名元组:表中的一行即为一个元组或记录;字段:表中的一列,列值称为字段值,列名称为字段名值域:字段值的取值范围元组(记录)属性(字段)主键:能唯一标识一个元组的属性集合。外键:若属性组F不是关系R1的主键,但它是关系R2的主键,则F称是关系R1的外键。主键主键外键关系模型查询的实现•通过关联表的方式实现良构关系•良构关系包含最小的数据冗余,•允许操作者插入、删除、修改表中的行而不会引起错误或数据的不一致良构关系--关系的规范化1、问题学生选课表SNoSNameSDeptMnameCNamegrade991230贺小华计算机周至光数据库96991239金谦计算机周至光操作系统90991239金谦计算机周至光编译原理92993851陈刚建筑王勇建筑原理89992076吕宋自动化李霞自动化设计85992076吕宋自动化李霞电路原理82•数据冗余•修改异常•插入异常•删除异常学号课程学分100人工智能3125文化学2150市场营销学2175人工智能3190文化学2更新异常:删除学号为150的学生的选课记录,丢掉了学生150选修“市场营销学”的事实,还失去了“市场营销学”的学分是2的事实。插入异常:若有一门“法律”课,学分为3,但无学生选修时,不能输入。消除异常的方法:模式分解若将以上的学生关系分解成学生-选课、课程-学分关系,更新异常、插入异常就都可消除了,对关系进行分解的过程就是规范化过程。学号课程100人工智能125文化学150市场营销175人工智能190文化学课程学分人工智能3文化学2市场营销2学生选课关系课程学分关系属性间有三种联系1)函数依赖:给定一个属性的值,可以获得另一个属性的值。例如,若已知“课程名”的值,便可知道“授课学时”。“授课学时”依赖于“课程名”,或“课程名”决定“授课学时”。记作“课程名→授课学时”。436面向对象X002354数值分析X001672编译原理Z006572操作系统Z004254C程序设计J003672数据库J001授课学期授课学时课程名课程号2)部分依赖:下表的主键是属性集合{学号,课程号}。主键{学号,课程号}决定了“学分”的值。但“学分”只由“课程号”决定,与“学号”无关,也就是“学分”属性只由主键{学号,课程号}的一部分而不是全部来决定,把这种依赖称为部分依赖。记作“学分→{学号,课程号}”。学号姓名课程号课程名学分0100101李灿J01数据库40100101李灿J04操作系统40100101李灿L02数值算法30100201张简J01数据库40100101李灿J04操作系统40200301张名F09德语60100201张简F09德语63)传递依赖:下表的主键是“学号”,学生住宿的楼号依赖于学号。但是,学生应交的住宿费是由楼号决定的,也就是说,“收费”依赖于“楼号”,这是一种新的依赖关系:“楼号”依赖于“学号”,而“收费”又依赖于“楼号”。一般把这种依赖关系称为“传递依赖”。记作“学号→收费”。80081506004120500213050021002楼号500180收费学号1)第一范式(FirstNormalForm,1NF)定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则关系R属于第一范式。注意:集合、数组和结构都不能为第一范式关系中属性的类型。符合第一范式的关系可能有插入、删除异常。例如:在关系“选课”中,存在着部分依赖:学分→{学号,课程号}将导致插入、删除异常。p2)第二范式(SecondNormalForm,2NF)定义:若关系模式R属于第一范式,且每个非主属性都完全函数依赖于主键,则R属于第二范式。注意:单个属性作为主键的关系自动就是第二范式。第二范式中的关系存在更新异常.例如:(学号、楼号、收费),虽然学号是单属性主键,属于第二范式,而楼号、收费都由学号决定,存在传递依赖关系:“学号→收费”将导致更新异常。t3)第三范式定义:如果一个关系R是第二范式的,并且每个非主属性都不传递依赖于主键,则R属于第三范式。例如:学生住宿关系可以分解为两个关系:学生-楼号关系(学号,楼号)和楼号-收费关系(楼号,收费)。这两个关系属于第三范式。学号楼号10021204130215081802楼号收费25004600250088002500UML到关系模型的转换—类转换•系模式名就是类名,关系模式的属性由原类中的各属性组成,关系模式的主键就是原类的主键Student(studentNo,studentName,sex,birthday)UML到关系模型的转换—关系转换•1:1关联(二元关系重数=1:1)–两个类转换成两个关系模式–在其中任意一个关系模式的属性集中加入另一个关系模式的主键•1:N关联(二元关系重数=1:N)–两个类转换成两个关系模式–在N端的类转换成的关系模式中加入1端关系模式的主键1:N关联转换实例Teacher(TeacherId,teacherName,sex)Deaprtment(DeptId,deptName,location)Teacher(TeacherId,teacherName,sex,deptId)UML到关系模型的转换—关联类•关联两端的对象各转换成一个关系模式•关联本身也产生一个关系模式,其主键用关联两端对象的主键形成复合键关联类转换实例Student(studentNo,…..)Course(courseNo,……)selectCourse(studentNo,courseNo,grade)4、E-R模型到关系模式的转换1)实体(对象)到关系模式的转换2)联系(关系)到关系模式的转换1)实体到关系模式的转换规则:将实体的名称作为关系的名称,将实体的属性作为关系的属性,并用下划线标识出主属性。studentcoursetakesNosnamesaddressagecNocnamecreditsgradestudent(sNo,sName,sex,age),表示student关系,其中sNo为主键。course(cNo,cNa