欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《数据库建摸》PPT课件.ppt

    • 资源ID:5519513       资源大小:306.99KB        全文页数:87页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《数据库建摸》PPT课件.ppt

    ,第二章 数据库建模,本章要点,1.介绍数据库建模的两种基本方法:对象定义语言(ODL)和实体-联系模型(E/R图)2.用ODL语言定义类的基本方法和格式。3.ODL语言中的联系和反联系4.数据库设计的基本原则5.用 ODL 和 E/R图 表示子类的方法 6.键码和引用完整性两个基本概念,教学要求,理解:数据库建模的基本原则。理解:子类的继承性。理解:主键码、外键码以及引用完整性。初步掌握:ODL和E/R图表示子类的方法。熟练掌握:用对象定义语言(ODL)建立简单的数据库模型。熟练掌握:用实体联系模型(E/R图)建立简单的数据库模型。,一、数据库建模概述,1.要设计一个数据库,首先就要分析数据库中要存放什么信息,这些信息之间存在什么联系?也就是说首先要确定数据库的结构。数据库的结构,也称为数据库模式所以,确定数据库结构的过程就称为数据库建模。,2.数据库模式的两种主要表示法,实体联系模型,也叫做E/R图,E/R图的表示符号:用矩形框表示实体集;用椭圆形表示实体集的属性;用菱形框和箭头表示实体集之间的联系。(举例),对象定义语言(ODL):ODL是用,面向对象的术语来说明数据库结构的一种标准语言。,3.数据库设计的过程,设计者首先依据用户对数据设计的要求,对数据库的结构提出一个设计思路。将设计思路用E/R图或者用ODL语言表述出来。选择和确定一个数据库管理系统(DBMS)来定义和建立这个数据库。目前流行的是用关系DBMS或者选用面向对象DBMS来实现。,这样一个数据库设计的过程可用此图来示,ODL,思路、想法,关系,E/R图,关系DBMS,面向对象DBMS,二、对象定义语言 ODL,对象定义语言(ODL)是用面向对象的术语来说明和定义数据库结构的一种标准语言,它的主要作用是:书写面向对象数据库的设计;将其直接转换成面向对象数据库管理系统(OODBMS)的说明。OODBMS 的基本语言一般是 C+语言。所以 ODL与 C+是非常相似的。这种转换相当方便。,1.面向对象的设计,所谓对象,就是客观存在的各种实体;一个人、一门课程、一本书等等都可以作为一个对象。每个对象都有唯一的标识(属性)使其能区分于任何其它的对象。可把具有相似特性的若干个对象归为一个类。类封装了这些对象的共同属性。,在进行ODL类的设计时需要描述三种特性:,属性(Attribute):描述实体集的特性。其类型由基本数据类型构成。.联系(Relationship):实体集之间的对应关系称为联系。它反映了客观世界事物之间的相互联系。.方法(Method):是用于对该类对象进行操作的函数。在ODL中方法的使用与C+中函数的使用是类似的。,2.类的说明(定义),最简单的类的说明包括:关键字 interface(接口)类名类的特性表(属性、联系和方法),interface 类头 类体,3 ODL中的属性(Java中的静态属性),属性用来描述对象的某个方面的特性。,interface Course attribute integer CourseNo;attribute string CourseName;attribute string Teacher;,例:学生选课数据库中,每门课中有三个属性:CourseNo(课程号)、CourseName(课程名)、Teacher(老师)可定义为:,注意:,在ODL中属性的数据类型有:整型、浮点型、字符型、字符串型、布尔型、枚举型及复杂的数据类型:数组、集合型、结构体等类型。例如:给课程类Course增加一个属性开课日期 CourseData,那么这个属性应该定义成什么数据类型呢?,由于开课日期需要用年月日来表示,而C+和ODL均没有日期型数据类型,所以应该把CourseData 定义为结构类型的数据。即:attribute Struct Datainteger year,integer Month,integer day CourseData;,又例:再定义一个简单的学生类:,interface Student attribute integer StudentNo;attribute string StudentName;attribute integer Age;attribute string Dept;又如:电影类的定义;演员类的定义(P19),4 ODL中的联系和反向联系,现实生活中事物之间存在着各种各样的联系,实体(对象)的特征仅靠属性来描述是不够的。还需要描述实体(对象)之间的联系。例如:教师同学生之间存在教与学的联系;教师同教研室之间存在着所属的联系;学生同课程之间存在着选课的联系等等;,如果我们以学生同课程之间的选课联,系为例,由于一门课程可以有多个学生选学,为了说明这种联系,在课程类的说明中需要增加一个学生的集合,作为课程类和学生类之间的联系;这样在 Course 类的定义中可以用下面的语句行来说明这种联系:relationship Set students;,其中:relationship为联系的关键字,,它表明 Students 对 student 的引用;Set 表明Students 引用的是 student 的集合,而不是单一的student 的对象。如果,在课程类中再增加一个课代表,由于学生中每门课程仅有一个课代表,那么就需要引用单一的 student 的对象。这时可在 Course 类的说明中加上:relationship Student represent;,这样我们就可以较全面的定义一个包,含属性和联系的 Course 类:interface Course attribute integer CourseNo;attribute string CourseName;attribute string Teacher;relationship Set students;relationship Student represent;当然这个类中尚未定义方法,类似课程类,我们可以在学生类中增加一个课程集合的特性,因为每个学生可以选修多门课程,即:interface Student attribute integer StudentNo;attribute string StudentName;attribute integer Age;attribute string Dept;relationship Set Courses;,;,进一步分析联系students 和 Courses不难看到:如果某个学生出现在某门课程的选课学生的集合中,那么:这门课程就应该在这个学生的所选课程的集合中;反之亦然。在ODL中,用“反向联系”来表示这种关联。即:Courses 是 students 的反向联系;students 也是 Courses 的反向联系。,这种反向联系可以用关键字 inverse,来表示,这样 Courses 类和 students 类中这种反向联系,可按下面的格式来表述:relationship Set students inverse Student:courses;relationship Set courses inverse Course:students;,注意:,由于联系Courses是在另一个类students里定义的,所以在 Courses 前面要有类名 students并且要加 双冒号:双冒号:表示引用指定类的特性。,一个较完整的课程类就可以定义为:interface Course attribute integer CourseNo;attribute string CourseName;attribute string Teacher;relationship Set students inverseStudent:Courses;课下可写出:学生类、电影类、演员类的定义。,三、实体联系模型(E/R图)用图形直观地表示建模的方法用图形形象地描绘实体集与实体集之间的联系,1.E/R图的绘图规定,l 实体集:实体是实体集的成员,和ODL中的对象相似。用矩形框表示实体集,框内注明实体名称。l 属性:与ODL中的属性本质上相同。用椭圆形表示属性,其内注明属性名,并用连线与实体连接。l 联系:与ODL中的联系本质上也相同,E/R图中的联系可以涉及两个以上的实体集。用菱形框表示联系。,绘图举例:,例1:教师与教研室的归属关系 用E/R图来表示例2:学生与课程的选课关系 用E/R图来表示。(黑板画图),Course,CourseNo,CourseName,Teacher,StudentCourse,Student,Age,StudentNo,Dept,StudentName,2.联系的三种类型,实体集与实体集之间的联系虽然复杂,但可以归结为三种类型。一对一;一对多;多对多 一对一联系:设A、B两个实体集。若A中的每个实体至多和B中的一个实体有联系,反之B中的每个实体至多和A中的一个实体有联系,那么称 A对B 或 B对A是 1:1 的联系如:教研室实体集与室主任实体集的联系(E/R图)。,一对多联系:设A、B两个实体集。若A中的每个实体可以和B中的几个实体有联系,而B中的每个实体至多和A中的一个实体有联系,那么称 A对B 为1:多的联系(1:n)或 B对A 是多:1的联系(n:1)如:教学班实体集与学生实体集的联系。,多对多的联系:设A、B两个实体集。若A中的每个实体可与B中的多个实体有联系;反之B中的每个实体也和A中的多个实体有联系,那么称 A对B 或 B对A是 多:多的联系(m:n)如:课程集与学生集的选课关系,用箭头的有无来区别三种不同的联系。从实体集A到实体集B的一对一联系,画两个箭头,分别指向A和B。从实体集A到实体集B的多对一联系,画一个指向B的箭头(指向一方)。若为多对多联系,则两边均无箭头。,3.联系中的角色,在一个联系中,一个实体集可能出现两次或多次;倘若如此,一个实体集在联系中出现多少次,我们就从该联系到该实体集画多少条线。到实体集的每一条线代表该实体集所扮演的一个角色,我们把它扮演的角色标记在连线的侧面。,E/R图中的联系,例:一门课可能有几门先修课,比如“C+程序设计”、“数据结构”等就是“数据库原理”的先修课;而同一门课也可能是几门其他课的先修课,比如“C+程序设计”既是“数据结构”也是“数据库原理”的先修课。因此实体集Course和它本身的联系prelearn(先修)是多对多的。,E/R图中的联系,图:,Course,prelearn,Sequel 后续,Origin 先修,联系有时不仅局限于两个实体集之间,也可能涉及到三个或更多的实体集,这时就构成了多向联系。,4.联系的多向性,学生选课关系中,增加一个实体集Teacher(老师),把Course的属性Teacher换成与实体集Teacher的联系;这样,学生选课联系就涉及到三个实体集:Student,Course,Teacher。,StudentCourse,假设一门课可有几位老师开设,而每位老师都可开设几门课,学生可在选课的同时选择老师。指向Teacher的箭头表示对于特定的学生和课程,只有一位老师与它们相对应。没有指向实体集Student和Course的箭头意味着,一个学生可以选修一个老师开的几门课,而一个老师开的一门课也可以有多个学生去选。,在多向联系中,指向某个实体集E的箭头意味着,如果从与该联系相连的其他几个实体集中各取出一个实体,那么这几个实体将与E中唯一的实体相关。虽然用多向(多元)联系能更形象地反映某些现实世界,但从数据库建模的角度,用二元联系更为方便。,解决的方法是:把多向联系中的联系StudentCourse用 实体集 StudentCourse来代替,同时增加三个实体集之间的多对一的二元联系。从而形成四个实体集之间的联系。(注意图的切换),转换结果:,练习:一个工厂的管理系统,该工厂需要管理的实体集有:职工、部门、项目、零件、供应商、仓库。在该系统中各实体集之间存在以下联系:一个职工只在一个部门工作,一个部门有多位职工;一位职工可以参加一个以上的项目,每个项目可有多个职工参加;每个项目确定一个负责人,一人可以负责多个项目。,一个供应商可为多个项目供应零件,每个项目允许从不同的供应商采购零件。每个项目需要多种零件。一种零部件可以由其它几种零部件组装而成。一个仓库可以存放多种零件,一种零件可存放在不同的仓库里。用E/R图描述各实体集之间的联系,四、设计原则,真实性 避免冗余 简单性 合理选择元素类型 此部分内容学生自学,1.真实性,最基本的设计原则:类(实体集)和属性应当是真实的,应当反映客观现实。在设计时,首先要对客观世界进行准确、全面的分析,然后在此基础上进行正确、合理的抽象。,2.避免冗余,在设计过程中还要注意,任何事物都只表达一次,否则既浪费空间,又容易造成不必要的麻烦。,3.简单性,在设计数据库的过程中,一定要设法避免引入过多的元素,而应该尽量简单明了。,4.合理选择元素类型,究竟是把某种元素作为属性,还是单独作为一个类或实体集?属性比类/实体集或者联系实现起来简单一些。,五、子类,类中某些具有特殊属性的对象还可以组成它的子类,例如学生类又可分为小学生、中学生、大学生、研究生等子类。每个子类除了继承它的父类的类的特性以外,还应有它自己的附加属性和联系。,1.ODL中的子类,定义子类的方法:在类名 A 之后加上冒号和另一个类 B 的名字,就可以定义类 A 是类 B 的子类。,例如:将研究生定义为Student 类的子类 Postgraduate。interface Postgraduate:Student attribute string Tutor;/导师姓名;,子类能自动继承其超类(父类)的所有特性。,如上例中,每个研究生对象都要从Student 中 继承属性 StudentNo、StudentName、Age和Dept,并从Student中继承了联系 Courses,除此之外,还有它自己的属性Tutor。,2.ODL中的多重继承,一个类可以有多个子类,而子类本身又可以具有子类,形成类的层次结构。另外,一个类还可能有多个超类(父类)。条理电影类、演员类的定义,电影资料数据库:,电影类:Movieinterface Movie attribute string Title;/电影名 attribute integer Year;/电影制作年份 attribute integer Length;/电影长度(分钟)attribute enum Filmcolor,blackwhite Type;/电影类型(彩色、黑白)relationship set actors;/出演电影的集合 inverse Actor:movie;/反向联系 relationship Studio ownedby;/唯一的制片公司 inverse Studio:owns;/反向联系,演员类:Actor,interface Actor attribute string Name;/演员姓名 attribute integer Year;/出生年份 relationship set movies;/出演电影的集合 inverse Movie:actors;/反向联系,为电影类 Movie定义一个子类:谋杀片类 Murder,为电影类 Movie定义一个子类谋杀片类Murderinterface Movie:Murder attribute string Weapon;/凶器这样,谋杀片除了继承电影类所拥有的四个属性和两个联系外,自身还增加了一个属性:凶器。,例:分析电影谁陷害了兔子罗杰 电影谁陷害了兔子罗杰既是动画片,又是谋杀片。除了具有普通电影的四个属性和两个联系之外,还应该有联系voices和属性Weapon。这时,可以定义另外一个子类Cartoon_Murder(动画谋杀片),它是Cartoon(动画片)和Murder(谋杀片)两者的子类,即 Cartoon_Murder类有两个父类。interface Cartoon_Murder:Cartoon,Murder;,多重继承会导致一些复杂问题的出现。为此 ODL的实现至少提供如下机制之一来保证用户能够避免由于多重继承而产生的冲突:1.指出特性(属性或者联系)的两个定义中哪一个适用于子类。2.重新命名有相同名字的另一个特性。3.为子类重新定义在它的一个或多个超类中已经定义过的某些特性。,假定类A是类B的子类,为了表示出A和B之间的父、子关系,我们用一种称作“属于”(“isa”)的特殊联系将实体集A和B相连。“isa”联系用一个三角形和两条连向实体集的线来表示,三角形的尖端指向超(父)类,三角形中还要写上“isa”的字样。,3.E/R 图中的子类,实体集Student及其子类Postgraduate:,4.E/R 图中的继承,E/R 模型与 ODL 或者其它面向对象的模型在继承这个概念上有一些细微的差别。在ODL中,对象必须恰好是一个类的成员,而在 E/R图中,我们不需要这样的实体集。分析p31 图2.11的继承性,六、对约束的建模,使用ODL中的类及其特性(属性和联系),或者使用E/R 图中的实体集和联系,可以表示数据库最基本的数据结构。而在数据库的设计中还会遇到不能使用这两个方法建模的情况;其原因是这些信息对数据具有一定的约束。常见的约束信息有以下几种,1键码(key)2单值约束3引用完整性约束4域约束5.一般约束,1.键 码(key),什么是键码(又称关键字):在ODL中,类的范围内能唯一区分一个对象的属性或属性的组合;或者在E/R图中实体集的范围内能唯一区分一个实体(在E/R图中)的属性或属性的组合,称为键码。一个类中的任何两个对象在构成键码的属性集上的取值决不能相同,否则键码就不能唯一地标识一个对象。,如:Student学生类的键码是StudentNo该类的任何两个对象决不可能有相同的学号。有时一个属性难以唯一地区分一个对象(一条记录),则要确定一个属性的组合作为键码 复合键码。如:课程关系Course 中CourseNo 和 Teacher两个属性为复合键码,实际上,在设计数据库的时候我们都要为数据库设计一个有效的键码,如学校要为所有学生分配唯一的学号;公司为要所有职员分配唯一的员工号等等,这样就可以很方便的区分数据库中的对象或实体。,如何表示键码?,在ODL中,可以用关键字key或者keys(这两者效果相同)来说明一个或多个属性为一个类的键码,键码说明必须紧跟在类定义的后面,并且构成键码的属性要跟在关键字key后面,它本身也要用圆括号括起来。如:学生类Student的属性 StudentNo是关键字,则可表示为:,interface Student(key StudentNo)类体略 若键码为复合键码,则必须用圆括号把复合键码括起来。如:两个属性Title和Year的组合(集合)构成复合键码则可表示为interface Movie(key(Title,Year)类体略,在有的情况下,一个类或实体集可以有几个键码。假设约定学生类Student的属性姓名不允许重名,那么学号 StudentNo和姓名 Name都可以作为键码,那么这种多键码的情况可以表示为:interface Student(key Name,StudentNo)类体略,又如制片公司的注册号StudioNo也可以和公司名Name一样作为类Studio的键码,因为公司注册号是不会重号的,那么这种多键码可表示为interface Studio(key Name,StudioNo)类体略 在E/R图中,可以用很简单的方法来表示键码,即在该属性下面划一条横线。见图2.12,多个键码的情况下,E/R 图不提供正式的表示法来表示所有的键码。通常我们会选择一个键码作为主键码,并把它看作是实体集唯一的键码,用下划线来标明。至于其他的键码,称为次键码或候选键码,一般不在 E/R 图上标出,或者在图的旁边作出注释。,Student(StudentNo,StudentName,Dept)Course(CourseNo,CourseName,Teacher)SC(StudentNo,CourseNo,Grade)主键码:StudentNoCourseNoStudentNO,外键码StudentNO CourseNo,2.单 值 约 束,单值约束:在进行数据库设计时,通常要求某个对象的属性或联系值是唯一的,这就是单值约束。键码是单值约束的主要来源。由于键码能唯一地标识一个元组(或一个对象,一个实体),因此,当键码值给定时,该元组(或对象,实体)的其他属性值也都唯一地确定了。明确键码是单值约束的来源,会给数据库的管理带来很大方便。,例如:对学生数据库进行查询,若给定键码值为960001,那么按照单值约束的原则,该库内仅有一条记录(元组)为需要查找的对象,而不必担心会有其它学号相同的学生;如果按照非键码属性查找(如年龄),会因该属性为非单值约束,需查遍整个数据库方能找到要查找的学生。,在此,我们还需要区别一个属性或联系最多有一个值的情况(单值约束)和必须有一个值(即不能为空)的情况。当我们对一个属性进行单值约束的时候,有两种选择,是要求该属性值存在,是允许该属性值任选。如果类的一个属性是键码的一部分,那么一般要求类中每个对象的该属性值都要存在;,如果该属性不是键码的一部分,通常允许该属性值不存在,这时,可以对该属性建立“null”值(“空”值)来表示允许该属性的值任选(如年龄)。E/R 图也提供了表示单值约束的方法。实体集的每个属性都隐含地具有单一的值。,不能为空的属性将在边上标明。表明多对一或一对一联系的箭头也表示单值约束。如果实体集 A 的一个联系有指向实体集B的箭头,那么实体集 B 中最多有一个实体与实体集 A 中的某个实体相连。,3.引用完整性约束,单值约束通常要求某个对象的属性或联系最多有一个值存在;而完整性约束要求某个对象所引用的值在数据库中确实存在。完整性体现在两个方面:对属性,要求其有非空的单值;对联系,要求引用的对象存在并且唯一。,一个实体的键码属性值不能为空,称为实体完整性;,一个实体的某个属性(集)值只能引用另一实体确实存在的键码属性(集)值,则称为引用完整性。例如,在学生选课数据库中,若要删除某个学生对象,则除了要删除该学生的学号及其相关的属性值以外,同时还应删除与该学号对应的所有选课 courses(所选课程集合),并从所有相关课程的联系students(选课学生集合)中删除该学号。,除了删除操作与引用完整性有关,插入操作、修改操作同样要保证联系的引用,完整性。E/R 图中如何表示对引用完整性的约束:假定 R 是一个从实体集 A 到实体集 B 的联系,如果指向 B 的是一个圆箭头,则不仅表明 R 是从 A 到 B 的多对一或一对一联系,而且对于实体集 A 的一个给定的实体,要求存在一个与之相关的实体集 B 的实体。(见图2.13),5.其它类型的约束,有些时候,我们希望在数据库中实施一些其它类型的约束。在此仅对其它类型的约束作简要的说明,以后的章节将详细阐述。域 约 束 要求某个属性的值必须处于特定的范围内或者取自特性值的集合。,这种限定称为域约束。,例如,学生的学号StudentNo约定为整数类型,因此学号的取值只能在整数范围内。又如,学生选课的课程号必须是课程号的集合中的一个元素,而不能是集合外的某一数值。总之,域约束是把属性的值限定在一个有限的范围之内。,ODL在说明一个属性时要求带上属性的数据类型,这个数据类型就是域约束的最基本、最初级的约束形式。例如,电影长度的类型是整数,那么长度的值就不能是92.5或者其它非整数。然而,ODL不支持更进一步的限制性约束,例如要求长度在30到180之间。,一般约束:是指要求在数据库中保,存的任意断言。例如我们可能要求对任何一部电影所列出的演员数不得超过8个。6.约束的意义 键码使用户很容易区别对象或实体;单值约束可使我们知道某个属性只有唯一值,可以节省存储空间、节省访问时间。约束是数据库模式的一部分。,数据库设计者应该把约束和库结构的设计一起定义,一旦说明了某种约束,就不允许对数据库进行任何违背该约束的插入或修改的操作;设计者应该把对约束的建模放在一个重要的位置。,l 数据库建模(Database Modeling)l 对象定义语言(ODL,Object DefinitionLanguage)l实体/联系模型(Entity/Relationship Model)l联系的三种类型,七、本 章 总 结,l 设计原则l 子类(Subclass)l 对约束建模(Modeling of Constraint)l 键码(Key)l引用完整性(Reference Integrity),习题二 1.2.3.4.8,

    注意事项

    本文(《数据库建摸》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开