数据库建模
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章数据库建模
本章要点
1、掌握数据库建模的两种基本方法:
对象定义语言(ODL)和实体-联系模型(E/R图)
2、会用这两种方法建立简单的数据库模型。
3、了解数据库设计的基本原则
4、掌握用ODL和E/R图表示子类的方法
5、了解子类的继承性
6、深入理解键码和引用完整性这两个基本概念
数据库建模概述
1、数据库的结构,也称为数据库模式。因此,确定数据库的结构的过程就称为数据库建模。
2、两种主要数据库模式表示法:
实体—联系模型,也叫做E/R图,矩形表示实体,椭圆形表示属性,菱形和箭头表示联系。
对象定义语言(ODL):是面向对象的数据库设计方法
3、数据库设计的过程图
4、面向对象的设计
所谓对象,就是某种可观察、可研究的实体;一个人、一门课程、一本书等等都可以作为对象。
每个对象都有唯一的标识,使其能区分于任何其他的对象。
可把具有相似特性的对象归为一类。
2.1对象定义语言ODL
ODL主要用于书写面向对象数据库的设计,进而将其直接转换成面向对象数据库管理系统(OODBMS)的说明。
OODBMS的基本语言一般是C++或者Smalltalk,所以必须把ODL转换成其中一种语言的说明。
ODL与C++非常类似,这种转换相当方便。
2.1.1 面向对象的设计
ODL类的三种特性:
1、属性(Attribute),它们的类型由基本的数据类型构成。
2、联系(Relationship),它们的类型是对某类对象的引用或引用的集合。
3、方法(Method),是能用于该类对象的函数。
2.1.2 类的说明
关键字interface(接口)
•类名
•类的特性表(属性、联系和方法)interface <类名> {
<特性表>
}
2.1.3 ODL中的属性
属性用来描述对象的某个方面。例:学生选课数据库中,每门课中有三个属性:CourseNo(课程号)、CourseName(课程名)、Teacher(老师),可用ODL表示如下:interface Course {
attribute integer CourseNo;
attribute string CourseName;
attribute string Teacher;
}
我们再定义一个简单的学生类:
interface Student {
attribute integer StudentNo;
attribute string StudentName;
attribute integer Age;
attribute string Dept;
}
2.1.4 ODL中的联系和反向联系
描述一个对象与其他对象之间的联系。例:
课程和学生之间存在选课联系,在课程类的说明中增加一个学生集合,作为课程类和学生类之间的联系:
relationship Set
反向联系
relationship Set
inverse Student::courses;
relationship Set
inverse Course::students;
一个较完整的课程类定义:
interface Course {
attribute integer CourseNo;
attribute string CourseName;
attribute string Teacher;
relationship Set
inverse Student::courses;
}
2.1.5 联系的类型
一对一 、一对多、多对一和多对多
2.2 实体联系模型(E/R 图)
一、用图形表示的数据库建模方法——E/R 图
实体集:实体是实体集的成员,和ODL 中的对象相似。矩形表示实体集。
属性: 与ODL 中的属性本质上相同。椭圆形表示属性。
联系: 与ODL 中的联系本质上也相同,E/R 图中的联系可以涉及两个以上的实体集。
菱形表示联系。
2.2.1 E/R 图中联系的三种类型
用箭头的有无来区别三种不同的联系。
1、从实体集A 到实体集B 的多对一联系,画一个指向B 的箭头。
2、从实体集A 到实体集B 的一对一联系,画两个箭头,分别指向A 和B 。
3、若为多对多联系,则两边均无箭头。
2.2.2 联系中的角色
在一个联系中,一个实体集可能出现两次或多次;倘若如此,一个实体集在联系中出现多少次,我们就从该联系到该实体集画多少条线。到实体集的每一条线代表该实体集所扮演的每一个角色,我们把它扮演的角色标记在连线的侧面
例:一门课可能有几门先修课,比如“C++程序设计”、“数据结构”等就是“数据库原理”的先修课;而同一门课也可能是几门其他课的先修课,比如“C++程序设计”既是“数据结构”也是“数据库原理”的先修课。因此实体集Course 和它本身的联系prelearn (先修)是多对多的。
联系有时不仅局限于两个实体集之间,也可能涉及到三个或更多的实体集,这时就构成了多向联系。
例如:学生选课关系中,增加一个实体集
Teacher (老师),把Course 的属性Teacher 换成与实体集Teacher 的联系;这样,学生选课联系就涉及到三个实体集:Student ,Course ,Teacher 。如下图示: