第二讲:概念模型ER图及概念模型转化成关系模型概念模型和实体关系图概念模型转化成逻辑模型PowerDesigner建立概念模型CDM概念数据模型CDM转化成物理数据模型PDM建立数据库一、概念模型和实体关系图把用户需求抽象为概念模型即为概念结构设计。概念模型除了要求能反映客观世界并且易于理解外,还要求其易于向数据模型(如关系模型)转化。概念模型独立于具体的数据库系统,是整个数据库设计的基础。1.概念模型概念模型的用途概念模型用于信息世界的建模是现实世界到机器世界的一个中间层次是数据库设计的有力工具数据库设计人员和用户之间进行交流的语言对概念模型的基本要求较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识简单、清晰、易于用户理解。2.信息世界中的基本概念(1)实体(Entity)客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。(2)属性(Attribute)实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。(3)码(Key)唯一标识实体的属性集称为码。信息世界中的基本概念(续)(4)域(Domain)属性的取值范围称为该属性的域。(5)实体型(EntityType)用实体名及其属性名集合来抽象和刻画同类实体称为实体型(6)实体集(EntitySet)同型实体的集合称为实体集信息世界中的基本概念(续)(7)联系(Relationship)现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系实体型间联系两个实体型一对一联系(1:1)三个实体型一对多联系(1:n)一个实体型多对多联系(m:n)AnIntroductiontoDatabaseSystem两个实体型间的联系实体型1联系名实体型2111:1联系实体型1联系名实体型2mnm:n联系实体型1联系名实体型21n1:n联系两个实体型间的联系一对一联系如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。记为1:1。实例班级与班长之间的联系:一个班级只有一个正班长一个班长只在一个班中任职两个实体型间的联系(续)一对多联系如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系记为1:n实例班级与学生之间的联系:一个班级中有若干名学生,每个学生只在一个班级中学习两个实体型间的联系(续)多对多联系(m:n)如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系。记为m:n实例课程与学生之间的联系:一门课程同时有若干个学生选修一个学生可以同时选修多门课程3.概念模型的表示方法ER图实体型用矩形表示,矩形框内写明实体名。学生教师AnIntroductiontoDatabaseSystemE-R图(续)属性用椭圆形表示,并用无向边将其与相应的实体连接起来学生学号年龄性别姓名AnIntroductiontoDatabaseSystemE-R图(续)联系联系本身:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)联系的属性:联系本身也是一种实体型,也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来联系的表示方法实体型1联系名实体型2111:1联系实体型1联系名实体型2mnm:n联系实体型1联系名实体型21n1:n联系联系的表示方法(续)实体型1联系名mn同一实体型内部的m:n联系实体型1联系名实体型21m多个实体型间的1:n联系实体型3n联系的表示方法示例班级班级-班长班长111:1联系课程选修学生mnm:n联系班级组成学生1n1:n联系联系的表示方法示例(续)职工领导1n同一实体型内部的1:n联系课程讲授教师1m多个实体型间的1:n联系参考书nAnIntroductiontoDatabaseSystem联系属性的表示方法课程选修学生mn成绩E-R图实例:学生课程班级学生卡学号姓名选课办卡属于课程号课程名学分卡号余额班号辅导员mn11n1成绩二、概念模型转化成逻辑模型将E-R图转换为关系模型实际是将实体集、属性以及联系转换为相应的关系模式。1.实体集的转换规则:概念模型中的一个实体集转换为关系模型中的一个关系,实体的属性就是关系的属性,实体的码就是关系的码,关系的结构是关系模式。2.实体集间联系的转换规则以下举例基于以下的E-R图学生课程班级学生卡学号姓名选课办卡属于课程号课程名学分卡号余额班号辅导员mn11n1成绩AnIntroductiontoDatabaseSystem1)1:1联系的转换方法一个1:1联系可以转换为一个独立的关系,也可以与任意一端实体集所对应的关系合并。如学生与学生卡关系的处理可以有三种,一种把学生卡的卡号作为学生关系(表)的一个属性(字段);第二种方法是把学生编号作为学生卡关系(表)的一个属性(字段);第三种方法为是单独建立一个关系(表),属性(字段)为学生号和学生卡卡号。AnIntroductiontoDatabaseSystem2)1:N联系的转换方法实体间的1:n联系可以有两种转换方法:一种方法是将联系转换成一个独立的关系;另一种方法是在n端实体集中增加新属性,新属性由联系对应的1端实体集的码和联系自身的属性构成,新增属性后原关系的码不变。如学生与班级为1:n的关系,一种方法是单独建立一个关系(表),属性(字段)为学生号和班级代码;第二种方法为在学生的关系(表)中增加班级编号属性(字段)。3)M:N联系的转换方法在向关系模型转换时,一个m:n联系转换为一个关系,两个多对多实体的码组成关系的码或码的一部分,多对多关系本身可以包含属性。如学生与课程的关系为m:n的关系,可以用一个独立的关系(表)表示,其属性(字段)为学生编号,课程编号和成绩,前两者是码且是外码。最后上述概念模型转成的逻辑模型为:学生(*学号,姓名,班号)学生卡(*卡号,余额,学号)班级(*班号,辅导员)课程(*课程号,课程名,学分)学生-课程(*学号,*课程号,成绩)*表示为码,下划线表示为外码三、POWERDESIGNER设计数据库的过程一)E-R图学生课程班级校园卡学号姓名选课持有属于编号名称学分卡号余额班号班名mn11n1成绩班长11二)概念数据模型CDM使用Powerdesigner描述E-R图(TeachingCDM):三)生成的物理模型根据CDM生成的物理模型PDM图(TeachingPDM):生成物理模型的警告学生和课程之间的多对多关系生成物理模型时会有一个indexinclusion的警告原因是外码和主码生成pdm时会自动建立index,生成的学生-课程关系中,学号和课程同是为主码和外码,所以重复建立了以下索引:学号,课程号,学号+课程号。四)生成的DDL语句(部分)PDM包含了选择的DBMS的DDL语句:createtableStudents(stdidchar(6)notnull,classidchar(6)notnull,nametitlenull,constraintPK_STUDENTSprimarykey(stdid))altertableStudentsaddconstraintFK_STUDENTS_STDBELONG_CLASSESforeignkey(classid)referencesclasses(classid)四、POWERDESIGNER的概念数据模型(CONCEPTUALDATAMODEL)PD对概念数据模型定义主要的内容:设计数据库过程通常开始于概念级,在此级不需要考虑实际物理实现的细节。一个概念数据模型CDM代表了一个数据库的整体逻辑结构,它独立于任何软件或数据存储结构。1、基本概念目标:使用PowerDesigner建立概念数据模型新建:选菜单New,然后选ConceptualDataModel(概念模型),在Browse窗口的根WorkSpace下产生一个概念模型的结点,使用弹出菜单更名为“TeachingCDM”。在该结点下已自动加入一个Diagram。在概念模型中加入实体等元素:右击概念模型TeachingCDM,选择New/Entity或其他菜单。设置元素的特性:右击元素,选择菜单Properties将出现特性设置的对话框,不同类型的元素由不同的页框组成。元素的Name用于图中显示,所以一般取中文,而Code用于生成物理模型的对象名(如表名、列名等),一般取英文字母。A、实体(ENTITY)实体特性窗口中主要包含下列页框:General:设置实体(Entity)的编码(Code)、名称(Name)和发生的行数(Number)Attributes(属性):设置实体的属性Identifiers:设置实体的标识(对应物理模型中码和唯一性约束)实体属性(ATTRIBUTES)和数据项(DATAITEMS)实体属性:在实体的特性窗口的Attributes页框中设置实体的属性属性设置内容:包括Code、Name、Comment、Datatype、Length、Domain和StandardChecks(Maximum、Minimum和Default)等数据项DataItem:在Entity中加入的所有属性将被自动加入在DataItems结点下作为数据项进行集中管理。也可以直接在DataItems下增加数据项,实体属性通过使用相同的Code引用该数据项定义。属性和数据项关系:实体的属性可以看作是DataItems下数据项的组合;DataItems是所有实体属性的集合数据项机制的意义相同数据项目定义一次,节省了工作量保证不同实体相同属性的定义一致性保证相同性质的列名一致性后两条通常先定义数据项,然后在实体中引用该数据项前两条通过域也能实现相同含义不同定义的属性code名不要同名(如进价和售价等)属性的Code值:缺省情况下为DataItems的唯一性标识,不同实体相同Code属性被认为对应的是一个数据项定义。是以后生成建表SQL语句的列名。属性的M、P和D:M=Mandatory(强制):选中表示属性非空,P=PrimaryIdentifier:选中为主标识。D=Displayed:选中在图中显示该属性,否则不显示。ATTRIBUTEPROPERTIES-列约束设置:双击某一属性,进入属性特性设置框,其中standardChecks页框中包含了下列常用设置:最大、最小、缺省值、格式以及所有合法值生成的物理模型中建表SQL语句示例:……ageintnulldefault18constraintCKC_AGE_ENTITY_1check(ageisnullor(agebetween16and20andagein(17,18,19,20,16))),……行约束:进货价格必须小于销售价格在概念模型中新建一个BusinessRules,在Expresion/Server中输入“进货价格=销售价格”(Client中只在文档中反应,而不会对物理模型产生影响)在实体的Properties中的Rules页框点击AddObjects,选择上面建立的rule。在生成的物理模型的建表的SQL语句中出现:……constraintCKT_ENTITY_1check(agelength)……选作实体主码数据项的排它性若一个数据项作为一个实体的主码,就不能再作为其他实体的属性。基于的理由是Powerdesigner假设与某一实体主码同名的属性必是外码,而外码是在生成物理模型时根据实体间关系自动生成,在概念模型中无需设置。引出的CODE的取名(即表列名)