数据库建模

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 students;

反向联系

relationship Set students

inverse Student::courses;

relationship Set courses

inverse Course::students;

一个较完整的课程类定义:

interface Course {

attribute integer CourseNo;

attribute string CourseName;

attribute string Teacher;

relationship Set students

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 。如下图示:

相关文档
最新文档