第2章 数据模型
本章主要内容 本章将着重介绍一下概念模型、层次模型、网状模型、关系模型、面向对象模型等数据库系统的数据模型的基本概念和设计方法,为后面的数据库设计打下基础。 (1)数据描述 概念设计、逻辑设计和物理设计等各阶段中数据描述的术语,概念设计中实体间二元联系的描述(1:1,1:N,M:N)。 (2)数据模型 数据模型的定义,两类数据模型,逻辑模型的形式定义,ER模型,层次模型、网状模型、关系模型和面向对象模型的数据结构以及联系的实现方式。
数据模型 2.1 数据模型概述 2.2 E-R数据模型 2.3 层次数据模型 2.4 网状数据模型 2.5 关系数据模型 2.6 面向对象数据模型 本章小结
2.1 数据模型概述 数据模型(Data Model)是对现实世界数据特征的抽象,是用来描述数据的一组概念和定义。 数据模型的分类: 现实世界中的客观对象抽象为概念模型; 然后把概念模型转换为DBMS支持的数据模型。 其转换过程如右图。 数据模型的分类: 概念数据模型(又称概念模型) 逻辑数据模型(又称数据模型) 现实世界 概念数据模型:信息世界 逻辑数据模型:DBMS支持的数据模型 认识抽象 转换
2.1.1 数据模型的基本组成 (1)数据结构 (2)数据操作 (3)数据的约束条件 数据模型是现实世界中的事物及其间联系的一种抽象表示,是一种形式化描述数据、数据间联系以及有关语义约束规则的方法。它通常由以下三个部分组成: (1)数据结构 它是指对实体类型和实体间联系的表达实现。 它是数据模型最基本的组织部分,规定了数据模型的静态特性。 (2)数据操作 是指对数据库进行的检索和更新两类操作。 (3)数据的约束条件 数据的约束条件是一组完整性规则的集合。 它定义了给定数据模型中数据及其联系应具有的制约和依赖规则。
2.1.2 数据模型的发展 20世纪60年代后期,在文件系统基础上发展起来的层次模型、网状模型和关系模型等传统数据模型; 20世纪70年代后期产生的E-R数据模型 ; 20世纪80年代以来又相继推出面向对象数据模型、基于逻辑的数据模型等新的模型。
2.2 E-R数据模型 2.2.1 基本概念 2.2.2 E-R图 2.2.3 扩充E-R数据模型
2.2.1 基本概念 E-R数据模型(即Entity-Relationship data model,实体-联系数据模型)是P. Chen(Peter Pin-Shan Chen)于1976年提出的一种语义数据模型。E-R数据模型不同于传统数据模型,它不是面向实现,而是面向现实世界。 1)实体(Entity) 实体是客观存在的且可以区别的事物。 2)联系(Relationship) 实体与实体间的关系抽象为联系。 (1)二元联系 只有两个实体参与的联系称为二元联系。 在二元联系中,E-R数据模型又把联系区分为一对一(1:1)、一对多(1:n)、和多对多(m:n)三种 。
二元联系 一对一(1:1)联系 一对多(1:n)联系 多对多(m:n)联系 若两个实体集中E1、E2中的每一个实体至多和另一个实体集中的一个实体有联系,则称E1和E2是一对一的联系,记为1:1。 例如,学校实体集与校长实体集间的联系是一对一联系。 一对多(1:n)联系 设两个实体集E1、E2,若E1中每一个实体与E2中任意个实体(包括零个)相联系,而E2中每个实体至多和E1中一个实体有联系,则称E1和E2是一对多的联系,记为1:n。 多对多(m:n)联系 设两个实体集E1、E2,若E1中每一个实体都和另一个实体集中任意个实体(包括零个)有联系,则称E1和E2是多对多的联系,记为m:n。 它们三者之间是包含关系。如右图所示。 m:n 1:n 1:1
数据联系的描述 (1:1)联系 (1:n)联系 (m:n)联系 实体集E1 实体集E2 实体集E1 实体集E2 实体集E1 实体集E2 E1 车间 工人 实体集E1 实体集E2 座位 E1 乘客 E2 (m:n)联系 实体集E1 实体集E2 E1 E2 学生 课程
多元联系与自反联系 (2)多元联系 (3)自反联系 在E-R数据模型中,二元联系这种表示方法还可推广到多元联系,即参与联系的实体个数n≥3。例如,三元联系也可区分1:1:1、1:1:p、1:n:p、m:n:p等联系。 (3)自反联系 表示同一个实体集两部分实体之间的联系,是一种特殊的二元联系。这两部分实体之间的联系也可以区分为1:1、1:n和m:n三种。 例如,在“人”这个实体集中存在夫妻之间的1:1联系;教师实体集中为了描述领导与被领导关系,可用1:n联系描述;在课程实体集中存在一门课程与另外一门或几门课程之间的预选课联系。
3)属性 实体或联系所具有的特征称为属性。 实体是由特征来表征和区分的,通常一个实体可以由多个属性来描述。例如,学生具有姓名、学号等属性。 一个实体可以有若干个属性,但在数据库设计中通常只选择部分数据管理需要的属性。 属性往往是不可再细分的原子属性,如姓名、性别等。 属性有型和值的区别。 例如,学生实体中的学号、姓名等属性名是属性型,而“021231142”、“李定”等具体数据称为属性值。 每个属性值都有一定的变化范围,通常称属性取值的变化范围为属性值的域。 例如,性别属性域是{男、女},年龄属性域是1~200。 能唯一标识实体集中某一实体的属性或属性组称为实体集的标识关键字或称关键字。
2.2.2 E-R图 E-R图是E-R数据模型的图形表示法,是一种直观表示现实世界的有力工具,目前E-R图已用于数据库的概念设计。 1)E-R图的表示方法 联系 属性 实体集名 上述提到的几种联系的E-R简图如下: 课程 预选 m n 校长 负责 学校 1 二元联系E-R简图 系部 聘任 教师 1 n 教师 教学 学生 m n 人 夫妻 1 自反联系E-R简图 教师 领导 1 n
2)E-R图的构成规则 (1)画出实体集及它们之间的联系 如果实体集A中实体之间有联系A-A,则实体间联系如下图: n A A-A m n 如果实体集A和实体集B之间有联系A-B,则实体间联系如下图: A A-B B 1 A A-B B 1 n A A-B B m n 如果三个实体集A、B、C之间有联系A-B-C,则实体间联系如下图: A A-B-C C 1 B A A-B-C C 1 p B A A-B-C C n p B 1 A A-B-C C n p B m
(2)画出实体集及联系的属性 用无向边把属性框连向与其相关的实体集或联系。 例如学校和教师实体集间存在聘任联系,联系有“聘任日期”属性,则一个描述学校和教师实体集及其联系的E-R图如下图所示。 学校 聘任 学校代码 学校名称 地址 聘任日期 教师 教师代码 教师姓名 性别 职称 1 n
2.2.3 扩充E-R数据模型 1)依赖联系和弱实体集 在现实世界中,某些实体集间还存在一种特殊的联系――依赖联系。 例如,在人事管理数据库中存放的职工实体集及其家庭成员实体集,前者以后者的存在为前提,家庭成员实体集依赖于职工实体集。这种依赖另一个实体集的存在而存在的实体集称为弱实体集,它们与其他实体集间的联系称为依赖联系,如右图所示。 职工 成员 家庭情况 1 n
2)子类和超类 为了进一步描述一个实体集中某些实体的不同特征,从该实体集中取出一部分实体构成一个(或多个)新的实体集,称这个新实体集是原实体集的子类,而原实体集是新实体集的超类。 例如,一个系部的职工实体集,为区分他们不同的工作特点,可分为教师、教辅人员及管理人员三个子类实体集。其EER数据模型实例如下图所示。 职工 职工代码 职工姓名 性别 教师 学校团体 行政级别 年龄 教辅人员 管理人员
3)聚集 在EER数据模型中,将联系视为参与联系的实体集组合而成新实体集,其属性为参与联系的实体的属性和联系的属性的并。这种新实体集称为聚集。这样联系也能以聚集的形式参与联系。 下图是应用聚集的例子。 科研项目 单位编码 教师代码 系名 教师 合同号 聘任日期 姓名 系部 聘任 承担 聚集
4)范畴 在描述现实世界时,有时要用到不同类型的实体组成的实体集,引入了范畴这一抽象概念。设E1、E2、…En是n个不同类型的实体集,则范畴T可定义为: 其中:E1、E2、…En称为T的超实体集。 例如,“银行账户”这个实体集的成员可能是单位,也可能是个人。 单位名 姓名 法人代表 个人 身份证号 单位 ∪ 地点 地址 ψ 银行 账号 开户 账户 m n
几个E-R事例 部门E-R
医院病房 管理E-R
图1 学生选课的局部E-R图 图2 教师任课的局部E-R图 系 系
教师 属于 讲授 1 m n 图3 合并的全局E-R图 系 学生 课程 开课 选修 拥有 1 m n
2.3 层次数据模型 2.3.1 基本概念和结构 2.3.2 数据操作 2.3.3 数据约束 2.3.4 层次数据模型的优缺点
2.3.1 基本概念和结构 层次模型是按照层次结构的形式组织数据库数据的数据模型,即用树型结构表示实体集与实体集之间的联系。 2.3.1 基本概念和结构 层次模型是按照层次结构的形式组织数据库数据的数据模型,即用树型结构表示实体集与实体集之间的联系。 其中用结点表示实体集,结点之间联系的基本方式是1:n。 1)记录和字段 记录是用来描述某个事物或事物间关系的命名的数据单位,也是存储的数据单位。 它包含若干字段。每个字段也是命名的,字段只能是简单的数据类型,例如整数、实数、字符串等。 例如:图(a)是一个名为系的记录。 图(b)是其一个实例。 系 系名 系号 系主任名 地点 图(a) 记录的型 图(b) 记录的一个实例 计算机系 9 李远 科技大楼
2)双亲子女关系(简称PCR) 这是层次数据模型中最基本的数据关系。它代表了两个记录型之间一对多关系(1:n)。 例如,一个系有多个班,就构成了如图(a)所示的双亲子女关系(即PCR型),在“1”方的记录型称为双亲记录,在“n”方的记录型称为子女记录。图(b)是其一个实例。 计算机系 计科0201班 计科0202班 计教0201班 系 班 1 n (a)PCR型 (b) 一个PCR实例
3)层次数据模式 利用PCR可以构成层次数据模式。 右图是一个层次数据模式的例子。 下图是层次数据模式的一个实例。 系 班 教研室 学生 教师 层次数据模式是一棵树,其数据结构特点为: 在每棵树仅有根结点无双亲。 除根结点外的任何结点有且有一个双亲结点,但可以有任意个子女结点。 树中无子女的结点称为叶结点。 计算机系 计科0201班 计科0202班 张三 李四 … 王五 李定 计教0201班 赵山 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟
4)层次序列和层次路径 (1)层次序列 (2)层次路径 由于存储器是线性的,层次数据模型采用树的先序遍历的次序(即从上向下、自左到右)作为存储次序。这样所生成的序列称为层次序列。上例中的层次数据模式的实例的层次序列如下图所示。 计算机系 计 科 0201 班 张三 … 李四 0202 王五 教 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟 计算机系 计科0201班 计科0202班 张三 李四 … 王五 李定 计教0201班 赵山 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟 (2)层次路径 层次路径是用来指明从层次数据模式的根结点到目标结点的一条查询路径,通常用从根结点到目标结点路径上每个记录值的排序关键字表示。
2.3.2 数据操作 1)数据查询 下面介绍3个查询操作命令。 (1)GU(Get Unique) 计算机系 计科0201班 计科0202班 张三 李四 … 王五 李定 计教0201班 赵山 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟 1)数据查询 在层次数据模型中,若要查找一个记录,须从根结点开始,按给定条件沿一个层次路径查找所需要的记录。 下面介绍3个查询操作命令。 (1)GU(Get Unique) 格式:GU<查询条件> 该命令执行的结果是查找出满足条件的第一个条件。 例如,GU 系(系名=’计算机系’),班(班名=’计科0202’),学生; (2)GNP(Get Next within Parent) 在当前记录的双亲下,按层次序列查找下一个满足条件的记录。 例如,查找计科0202班所有学生的记录的查询操作命令如下: GU 系(系名=’计算机系’),班(班名=’计科0202’),学生;/*找到记录王五*/ While not fail do GNP 学生;/*找到当前记录王五的双亲计科0202班的所有学生记录*/
从当前记录位置开始,按照层次序列,不受同一双亲的限制,查找当前记录的下一个满足条件的记录。 计算机系 计科0201班 计科0202班 张三 李四 … 王五 李定 计教0201班 赵山 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟 (3)GN(Get Next) 从当前记录位置开始,按照层次序列,不受同一双亲的限制,查找当前记录的下一个满足条件的记录。 例如,查找计科0202班和计教0201班的所有学生记录的查询操作命令如下: GU 系(系名=’计算机系’),班(班名=’计科0202’),学生; While not fail do GNP 学生;/*找到计科0202班的所有学生记录*/ GN 学生; /*找到计教0201班的第一个学生记录,即学生赵山*/ While not fail do GNP 学生;/*找到计教0201班的所有学生记录*/ 可以看出,GNP和GN命令通常跟在GU命令后面使用,先由GU命令定位到层次模型中的某个记录,再用GNP和GN命令查询所需记录。
2)更新操作 (1)数据插入(INSERT) (2)数据删除(DELETE) (3)数据修改(REPLACE) 插入操作可先将插入数据写入系统I/O区,然后指定一个由根记录开始的插入层次路径,完成数据的插入操作。 (2)数据删除(DELETE) 删除操作是先用查询命令将待删除的记录定位为当前记录,再DELETE命令完成删除任务。当删除一个记录时,则其所从属的所有子女记录都被删除。 (3)数据修改(REPLACE) 先用查询语句将要修改的记录定位为当前记录,并将该记录读到I/O区,在I/O区对数据进行修改,然后用REPLACE命令可将修改后的记录值写回到数据库中。
2.3.3 数据约束 层次数据模型的数据约束主要是由层次结构的约束造成的。 (1)除了根结点外,任何其他结点不能离开其双亲结点而孤立存在。 这条约束表明了在插入一个子女记录时,必须与一个约束双亲记录相联系,否则不能插入;在删除一个记录时,其子女记录也将自动被删除。这一约束为数据操作造成了不便。 (2)层次数据模型所体现的记录之间的联系只限于二元1:n或1:1的联系,这一约束了用层次模型描述现实世界的能力。 对于现实世界中存在的二元m:n联系和多元m:n:p等复杂联系,就不能用层次模型直接进行表达了。通常采用下列的分解法或虚拟记录法来解决这一问题。
分解法 例如,学生记录型和课程记录型是一个m:n联系,将无法用层次模型直接表达学生与课程之间的多对多联系。 可以采用分解的方法,把一个二元m:n联系分解成两个二元1:n联系。 学生 课程 张三 网络安全 李四 数据库 王五 (a) m:n联系的型与实例 学生 课程 张三 网络安全 李四 数据库 王五 (b) 按学生进行分解的型与实例 (c) 按课程进行分解的型与实例 课程 学生 李四 网络安全 张三 王五 数据库
虚拟记录法 由上可以看出,这种分解法会导致大量的存储数据冗余。为了减少分解所带来的数据冗余,可以采用虚拟记录法(IMS系统所采用的方法)。 虚拟记录法是在数据库中,如果有一个记录x要在多处被引用,则只存储一份这样的记录,其他需要引用的地方用其指针代替。这种用指针代替的记录称为虚拟记录,记为V.x。右图表示学生和课程间的m:n联系。 学生 (课程)v 课程 (学生)v (3)由于层次结构中的全部记录都是以有序树的形式组织起来,当对某些层次结构进行修改时,不允许改变原数据库中记录类型之间的双亲子女联系,这使得数据库的适应能力受到限制。 (4)虚拟记录的指针必须指向一个实际存在的记录。有虚拟记录指向的记录不得删除。 (5)虚拟记录不能为根记录。
2.3.4 层次数据模型的优缺点 层次数据模型的优点主要有: 层次数据模型的缺点主要有: 层次模型结构简单、层次分明,便于在计算机内实现。 2.3.4 层次数据模型的优缺点 层次数据模型的优点主要有: 层次模型结构简单、层次分明,便于在计算机内实现。 在层次结构中,从根结点到树中任一结点均存在一条唯一的层次路径,这为有效地进行数据操纵提供了条件。 在层次结构中除根结点外所有结点有且只有一个双亲结点,故实体集之间的联系可用双亲结点唯一地表示,因此层次模型DBMS对层次结构的数据有较高的处理效率。 层次数据模型提供了良好的完整性支持。 层次数据模型的缺点主要有: 层次数据模型缺乏直接表达现实世界中非层次型结构的复杂联系,如多对多联系。 对插入或删除操作有较多的限制。 查询子女结点必须通过双亲结点。 计算机系 计科0201班 计科0202班 张三 李四 … 王五 李定 计教0201班 赵山 周英 硬件教研室 孙立 钱敏 软件教研室 胡恒 丁伟
2.4 网状数据模型 2.4.1 基本概念和结构 2.4.2 数据操作 2.4.3 数据约束 2.4.4 网状数据模型的优缺点
2.4.1 基本概念和结构 为了克服层次模型结构描述非层次型事物的局限,20世纪60年代末美国CODASYL委员会提出了网状数据模型。 2.4.1 基本概念和结构 为了克服层次模型结构描述非层次型事物的局限,20世纪60年代末美国CODASYL委员会提出了网状数据模型。 1)记录与数据项(Data Items) 与层次数据模型类似,在网状数据模型中,也是以记录为数据的存储单位。记录包含若干数据项,数据项相当于字段。 但与层次数据模型中的字段不同,网状数据模型中的数据项不一定是简单的数据类型,也可以是多值的和复合的数据。 2)系(Set) 在网状数据模型中,数据间的联系用系表示。 简单的网状结构 班级 学生 1 社团 n S1 S2 系代表了两记录之间的1:n联系,系用一条弧表示,箭头指向“n”方。“1”方的记录称首记录,“n”方的记录称属记录。右图是简单网状结构的例子。
3)系型 (1)单属系型 (2)多属系型 由主记录型和单一的属记录组成。 例如班级记录型和学生记录型组成的班级-学生系是单属系型。 计科0201班 张三 李四 王杰 (2)多属系型 该系型中包含三个以上记录型,其中一个为首记录型,其余为属记录型。 例如,在学校中有教师和职工,他们有不同的记录结构可形成两个记录类型。当建立一个学校――教职工系型时,可将教师记录型和职工记录型作为学校的两个属记录型。如右图。 多属系型 教师 学校 职工 (3)奇异系型 这是一种只有属记录型而无首记录型的一种特殊系型。 一个单位的所有部门可以组成一个无首记录型的奇异系型。 部门
4)联系记录 但对于二元m:n联系、和多元m:n:p联系也不能直接用系来表示,而是采用联系记录这个辅助数据结构,来将实体集间的m:n联系转换成两个1:n联系。 例如学生记录与课程记录之间的m:n联系可通过引入联系记录――学生选课记录,将其转换为两个1:n联系。如下图所示。 张三 李四 C语言 网络安全 选课1 选课2 选课3 选课4 SL 数据库 CL 学生 课程 m n m:n联系 型 值 学生 课程 1 m 学生选课 SL n CL
由于网状数据模型中规定,一个记录型不能在一个系中既作为系的首记录又作为系的属记录,即系不能直接用来表示一个记录型的自身联系。我们通常可采用增加联系记录的方法来解决。 例如,职工间的领导关系可以表示成一个环,如图(a)所示,增加一个联系记录型――领导记录,该记录存放领导职务等信息,从而形成两个系类型S1、S2,如图(b)所示。 (a) (b) 环结构的表示 职工 1:n 领导 1:1 S1 S2
2.4.2 数据操作 1)查询操作 查询操作主要是通过查询语句FIND和取数语句GET配合使用实现的。 计科0201班 张三 李四 王杰 1)查询操作 查询操作主要是通过查询语句FIND和取数语句GET配合使用实现的。 FIND语句主要是查找定位数据库中满足条件的记录为当前记录。 GET语句主要是将当前记录取出来供应用程序使用。 (1)利用关键字查询 根据记录中的一个或多个数据项来查询某个记录。其格式如下: FIND 记录名 RECORD VIA 系名 SET USING 数据项 (2)导航式查询 根据系值环形链上的指针,沿着环形链一个记录值接一个记录值地进行查询,直至找到欲查询的记录。其格式如下: FIND FIRST/LAST/NEXT/PRIOR/N 记录名 RECORD WITHIN 系名 (3)利用当前值查询 利用当前值查询可以快速地查出刚访问过的某个记录。其格式为: FIND CURRENT OF 记录名 RECORD 或 FIND CURRENT OF 系名 SET
2)更新操作 网状数据模型的更新操作分为对记录的更新和对系的更新两类。 (1)对记录的更新 (2)对系的更新 插入操作(STORE):存储一个记录到数据库中,并按插入系籍的约束,加入有关的系值中。 修改操作(MODIFY):修改指定记录中的数据项。 删除操作(ERASE):从数据库中删除指定记录。 (2)对系的更新 CONNECT(加入):把属记录加入到相应的系值中。 RECONNECT(转接):把属记录从原系值转移到另一个指定的系值中。 DISCONNECT(撤离):把属记录从其所在的系值中撤离,但该记录仍保留在数据库中。
2.4.3 数据约束 (1)一个记录值不能出现在同一个系型的多个系值中。 (2)一个记录型不能同时为同一个系的首记录和属记录。 (3)任一个系值有且仅有一个首记录值,但可以有任意个属记录值。 (4)每个系型有且仅有一个首记录型,但可以有多个属记录型,且属记录型必须至少有一个。 张三 李四 C语言 网络安全 数据库 张三 李四 C语言 网络安全 选课1 选课2 选课3 选课4 SL 数据库 CL (a) (b) 职工 1:n 领导 1:1 S1 S2
2.4.4 网状数据模型的优缺点 网状数据模型的优点主要有: 网状数据模型的缺点主要有: 能够更为直接地描述现实世界。 具有存取效率高等良好性能。 网状数据模型的缺点主要有: 数据结构比较复杂,不便于终端用户掌握。 其数据定义语言(DDL)、数据操作语言(DML)较为复杂,用户掌握使用较为困难。 数据独立性较差。
2.5 关系数据模型 2.5.1 基本概念 2.5.2 关系数据模型的数据结构 2.5.3 数据操作 2.5.4 数据约束 2.5.5 关系数据模型的优缺点
2.5.1 基本概念 1)属性和域 2)关系和元组 3)键 在现实世界中,要描述一个事物,常常取其若干特征来表示。这些特征称为属性。 2.5.1 基本概念 1)属性和域 在现实世界中,要描述一个事物,常常取其若干特征来表示。这些特征称为属性。 例如,大学生可用姓名、学号、性别、系别等属性来描述。 每个属性对应一个值的集合,作为其可以取值的范围,称为属性的域。 例如姓名的域是所有合法姓名的集合;性别的域是{男,女}等。 2)关系和元组 一个对象可以用一个或多个关系来表示。关系就是定义在它的所有属性域上的多元关系。设为R,它有属性A1、A2、…、An,其对应的域分别为D1、D2、…、Dn,则关系R可表示为: R=(A1/D1,A2/D2,…,An/Dn) 或R=(A1,A2,…,An) 元组是关系中各个属性的一个取值的集合。 3)键 关系中的某一属性或属性组的值唯一地决定其他所有属性的值,也就是唯一决定一个元组,而其任何真子集无此性质,则称这个属性或属性组为该关系的候选键,简称键。
2.5.2 关系数据模型的数据结构 1)关系数据模型的描述功能 (1)用二维表格表示实体集及其属性 设实体集R有属性A1、A2、…、An,实体集的型可用一个二维表的框架表示。见表(a)。表中每一元组表示实体集的值,见表(b) A1 A2 A3 … An a11 am1 a12 am2 a13 am3 a1n amn A1 A2 A3 … An (a)关系R的型 (b)关系R的值 学号 姓名 年龄 性别 系部号 S1 程宏 19 男 9 S2 王盟 20 女 S3 刘莎莎 18 10 学生情况表
(2)用二维表描述实体集间的联系 关系模型不仅可用二维表表示实体集,而且可用二维表描述实体集间的联系。 例如,在图书管理中经常用“借书人统计表”和“图书登记表”如下表所示。 姓名 借书证号 单位 张三 10001 计算机系 刘一 10002 自动化系 … 总编号 分类号 书名 作者 200001 TP101 数据库导论 C.J.DATE 400002 TP102 自动化理论 周明德 … 由于借书人与图书之间是m:n联系,在前面用层次模型或网状模型将是一项复杂的事情。在这里用二维表――“借书登记表”来表示借书人和图书两个实体集之间的联系则十分简便,如下表所示。 借书证号 总编号 借阅日期 10001 200001 2003.9.1 400002 10002 2003.10.9 …
2)关系的性质 关系是一个简单的二维表,其主要性质为: 关系是一个二维表,表中的每一行对应一个元组,表中的每一列有一个属性名且对应一个域。 学号 姓名 年龄 性别 系部号 S1 程宏 19 男 9 S2 王盟 20 女 S4 李刚 10 关系是一个简单的二维表,其主要性质为: 关系是一个二维表,表中的每一行对应一个元组,表中的每一列有一个属性名且对应一个域。 列是同质的,即每一列的值来自同一域。 关系中的每一个属性是不可再分解,即所有域都应是原子数据的集合。 关系中任意两个元组不能完全相同。 关系中行的排列顺序、列的排列顺序是无关紧要的。 每个关系都有关键字的属性集唯一标识各个元组。
3)关系模式 关系模式是关系中信息内容结构的描述。 它包括关系名、属性名、每个属性列的取值集合、数据完整性约束条件以及各属性间固有的数据依赖关系等。可以表示为: R(U,D,DOM,I,∑) 其中:R为关系名;U为组成关系的全部属性的集合;D是U中属性取值的值域;DOM是属性列到域的映射,即DOM:U→D;I是一组完整性约束条件;∑是属性集间的一组数据依赖。 通常,可用R(U)来简化地表示关系模式。 例如,描述大学生的关系模式表示为: STUDENT(学号,姓名,性别,年龄,所在系,籍贯,入学年份)
2.5.3 数据操作 1)关系代数 (1)传统的集合运算 (2)专门的关系运算 2)关系演算 关系代数是由一组以关系作为运算对象的特定的关系运算所组成,用户通过这组运算对一个或多个关系进行“组合”与“分割”,从而得到所需要的新关系。 关系代数又分为传统的集合运算和专门的关系运算。 (1)传统的集合运算 主要包括并运算、差运算、交运算和笛卡儿乘积运算等。 (2)专门的关系运算 包括选择运算、投影运算、连接运算、自然连接运算、半连接运算、自然半连接运算和除运算等。 其中:{σ,Π,∪,-, ×}五种运算为关系代数的基本运算,组成了一个完备的操作集,任何其他关系代数操作都可以用这五种操作来表示。 2)关系演算 除了用关系代数表示关系操作外,还可以用谓词演算来表达关系的操作,称为关系演算。关系演算又可分为元组关系演算和域关系演算。
2.5.4 数据约束 1)域完整性约束 域完整性约束限定了属性值的取值范围,并由语义决定一个属性值是否允许为空值NULL。 学号 姓名 年龄 性别 系部号 S1 程宏 19 男 9 S2 王盟 20 女 S4 李刚 11 学生情况表 系部号 系名 系主任 地点 9 计算机系 李远 科技大楼 10 电子系 张立 电子大楼 院系情况 2)实体完整性约束 每个关系应有一个主键,每个元组的主键的值应是唯一的。主键的值不能为NULL,否则无法区分和识别元组。 3)参照完整性约束 参照完整性约束是不同关系间的约束,当存在关系间的引用时,要求不能引用不存在的元组。
2.5.5 关系数据模型的优缺点 1)关系数据模型的优点 2)关系数据模型的缺点 : 关系模型有坚实的理论基础。 在关系模型中,二维表不仅能表示实体集,而且能方便地表示实体集间的联系。 关系数据模型中数据的表示方法统一、简单,便于计算机实现,使用用户使用。 数据独立性高。 2)关系数据模型的缺点 : 关系数据模型的主要缺点是查询效率常常不如非关系数据模型。 关系数据模型等传统数据模型还存在不能以自然的方式表示实体集间的联系、语义信息不足、数据类型过少等弱点。 因此自20世纪80年代后期以来,陆续出现了以面向对象数据模型为代表的新的数据模型。
2.6 面向对象数据模型 2.6.1 对象和对象标识符 2.6.2 属性和方法 2.6.3 封装和消息传递 2.6.4 类和实例 面向对象数据模型(Object-Oriented Data Model,简称OO数据模型)是面向对象程序设计方法与数据库技术相结合的产物,用以支持非传统应用领域对数据模型提出的新需求。 2.6.1 对象和对象标识符 2.6.2 属性和方法 2.6.3 封装和消息传递 2.6.4 类和实例 2.6.5 类层次结构和继承 2.6.6 持久性和版本 2.6.7 多态、重载、重定义与动态联编 2.6.8 与关系数据模型的比较
2.6.1 对象和对象标识符 1)对象 在面向对象数据模型中,所有现实世界中的实体都模拟为对象,小至一个整数、字符串,大至一个公司、一部电影,都可以看成对象。 2)对象标识符 在OO数据模型中,每个对象都有一个系统内唯一不变的标识符,称为对象标识符(OID)。 OID一般是由系统产生,用户不得修改。OID是区别对象的唯一标志,与对象的属性值无关。 如果两对象的属性值和方法一样,但OID不同,则仍认为是两个“相等”而不同的对象。 如果一个对象的属性值修改了,只要其标识符不变,则仍认为是同一对象。 因此,OID可看成是对象的替身,以构造更复杂的对象。
2.6.2 属性和方法 1)属性 2)方法 除了属性外,对象还包含若干方法,用以描述对象的行为特性。 2.6.2 属性和方法 学生 学号 班级 专业 … 选课 1)属性 每个对象包含若干属性,用以描述对象的状态、组成和特性。 属性也是对象,它又可能包含其他对象作为其属性。这种递归引用对象的过程可以继续下去,从而组成各种复杂的对象。右图是一个事例: CPU 主板 计算机 A 2)方法 除了属性外,对象还包含若干方法,用以描述对象的行为特性。 方法又称为操作,它可以改变对象的状态,对对象进行各种数据库操作。方法的定义与表示包含两个部分: 一是方法的接口,说明方法的名称、参数和结果的类型; 二是方法的实现部分,是用程序编写的一个过程,以实现方法的功能。 一个对象一般是由一组属性、一组方法,再冠以一个OID组成。
2.6.3 封装和消息传递 1)封装 在OO数据模型中,系统把一个对象的属性和方法封装成一个整体。 对象的封装性体现在以下几个方面: 对象具有清晰的边界; 对象具有统一的外部接口; 对象的内部实现是不公开的。 对象标识符 属性1 … 属性n 方法1 方法m 消息(调用) 消息(结果) 2)消息传递 对象是封装的,对象与外界、对象之间的通信一般只能借助于消息。消息传送给对象,调用对象的相应方法,进行相应的操作,再以消息形式返回操作的结果。这种通信机制称为消息传递。 对象i 属性1 … 属性n 方法1 方法m 对象j 消息(调用) 消息(结果) 消息一般由操作者、接收者、操作参数三个部分组成。对象、消息之间的关系如右图所示。
2.6.4 类和实例 1)类 2)实例 3)元类 类是具有共同属性和方法的对象的集合,这些属性和方法可以在类中统一说明。 学生 研究生 本科生 1)类 类是具有共同属性和方法的对象的集合,这些属性和方法可以在类中统一说明。 同类对象在数据结构和操作性质方面具有共性。 例如大学生、研究生是一些有共同性质有对象,可能抽象为一个学生类。 2)实例 类中每个对象称为该类的一个实例。 同一个类中对象的属性名虽然是相同的,但这些属性的取值会因各个实例而异。 S1 程宏 19 计算机 学生 学号 姓名 年龄 籍贯 … 3)元类 在一些OO数据模型中,把类也看做对象,因此由类可以组成新的类。这种由类组成的类称为元类,元类的实例是类。 籍贯 省 市 …
2.6.5 类层次结构和继承 1)类层次结构 在类层次结构中,一个类的下层可以是多个子类;一个类的上层也可以有多个超类。下图是一个类学校层次结构的例子。 学校人员 类层次结构 学校人员 学生 教职工 子类与超类 学生 研究生 本科生 教职工 教师 职员 工人 教师 研究生 在职研究生 在职研究生 教授 讲师 助教
2)继承 在类继承时,可能发生属性名和方法名的同名冲突: (1)各超类之间的冲突 (2)子类与超类之间的冲突 学校人员 姓名 … 在职研究生 学号 班级 研究专业 职称 专业 在职单位 研究生 学号 班级 专业 … 教职工 职称 在职研究生 在职单位 … 在类继承时,可能发生属性名和方法名的同名冲突: (1)各超类之间的冲突 (2)子类与超类之间的冲突
2.6.6 持久性和版本 1)持久性 2)版本 持久性是指对象的生成期超过所属程序的执行期。 即当一个程序在执行过程中产生了一个持久性的对象,则在程序执行结束后,此对象依然存在。 持久性程序设计为面向对象数据库、计算机辅助软件工程(CASE)等提供支持。 2)版本 由于每个对象都包含一组属性并具有相应的属性值,当为属性指定一组新值时,就建立了一个新的版本。 因此,同一对象可产生多个不同的版本。 对象的版本概念为CAD/CAM、工程数据库、OODB、多媒体数据库、CASE技术提供重要支持。
2.6.7 多态、重载、重定义与动态联编 1)多态(一名多义) 2)重载(一名多用) 3)重定义 4)动态联编 类的方法有相同的接口表示,但允许有不同的多种内部实现,这种情况称为方法的多态。 2)重载(一名多用) 在类继承结构中子类继承超类的方法,这种继承往往有多态性,即子类仅继承超类的接口表示,但它用自己的实现手段,这种情况称为方法重载。 3)重定义 子类属性、方法可以替换成与超类不一致的能力称为重定义功能。便于提高属性、方法的灵活性。 4)动态联编 方法的多态性和方法重载在计算机中采用动态联编的方法来实现,即在应用程序执行到一定阶段后才与方法联编。
2.6.8 与关系数据模型的比较 在关系数据模型中基本数据结构是表,这相当于OO数据模型中的类;而关系中的数据元组相当于OO数据模型中的实例。 在关系数据模型中,对数据库的操作都归结为对关系的运算,而在OO数据模型中,对类层次结构的操作分为两部分: 一是封装在类内的操作即方法;二是类间相互沟通的操作即消息。 在关系数据模型中有域、实体和参照完整性约束,完整性约束条件可以用逻辑公式表示,称为完整性约束方法。在OO数据模型中这些用于约束的公式可以用方法或消息表示,称为完整性约束消息。
本章小结 数据模型是对现实世界进行抽象的工具,用于描述现实世界的数据、数据联系、数据语义和数据约束等的方面的内容。E-R模型是最常用的概念模型,关系模型是当前的主流模型,面向对象(OODB)是今后发展的方向。 下面以前面的学生成绩管理为例,来对本章的E-R模型、层次数据模型、网状数据模型、关系数据模型、面向对象数据模型进行总结。
E-R模型 m:n联系 学生实体 课程实体 E-R图 学号 姓名 性别 年龄 所在系 学生 课程 m n 学生 课程 选修 m n 成绩 课程号 课程名 所在系 学分 学生实体 学号 姓名 年龄 性别 所在系 S1 程宏 19 男 计算机 S9 王敏 20 女 课程实体 课程号 课程名 学分 C1 计算机基础 3 C2 C语言
图1 学生选课的局部E-R图 图2 教师任课的局部E-R图 系 E-R合并
E-R合并 教师 属于 讲授 1 m n 图3 合并的全局E-R图 系 学生 课程 开课 选修 拥有 1 m n
教师管理 局部E-R图
学生管理 局部E-R图 导师 班级 学生 组成 管理 班主任 档案材料 宿舍 住宿 归档 指导 系 有 参加 学会 具有 社会关系 1 N M 具有 社会关系
课程管理 局部E-R图 1 教室 M 教科书 教师 担任 课程 系 开设 N 学生 选修 MN 上课 P
三个局部ER图合并成一个ER图 社会关系 系 项目 院长 学院 教师 职称 工作量 档案材料 学会 宿舍 教科书 课程 教室 班级 学生 1 N P M 社会关系 具有 系 聘用 承接 项目 参加 设置 院长 学院 主管 教师 评定 职称 分配 工作量 档案材料 归档 学会 宿舍 住宿 教科书 担任 指导 课程 选修 教室 上课 有 班级 学生 组成 开设 管理
层次数据模型 (分解法) 按课程进行分解 按学生进行分解 m:n联系 S1 程宏 19 男 计算机 C1 计算机基础 3 S9 王敏 20 女 C2 C语言 按课程进行分解 课程 学生 m:n联系 学生 课程 m n S1 程宏 19 男 计算机 C1 计算机基础 3 C2 C语言 S9 王敏 20 女 按学生进行分解 学生 课程
层次数据模型 (虚拟记录法) 虚拟记录法 m:n联系 学生 (课程)v 课程 (学生)v 学生 课程 m n S1 程宏 19 男 计算机 PS1 PS2 S1 程宏 19 男 计算机 S9 王敏 20 女 计算机 PC1 PC2 C1 计算机基础 计算机 3 C2 C语言
网状数据模型 m:n联系 值 型 S1 程宏 19 男 计算机 S9 王敏 20 女 学生 课程 m n 学生 课程 C1 计算机基础 SL 值 m:n联系 学生 课程 m n 选课1 选课2 选课3 CL 学生 课程 型 C1 计算机基础 计算机 3 C2 C语言 1 m 学生选课 SL n CL
关系数据模型 学生情况表 成绩表 课程情况表 学号 姓名 年龄 性别 所在系 S1 程宏 19 男 计算机 S9 王敏 20 女 选修 m n 成绩 学号 姓名 性别 年龄 所在系 课程号 课程名 学分 学生 课程 学号 课程号 成绩 S1 C1 88 C2 76 S9 83 78 成绩表 课程情况表 课程号 课程名 所在系 学分 C1 计算机基础 计算机 3 C2 C语言
面向对象数据模型 学生类 学号 姓名 年龄 性别 所在系 … 课程类 课程号 课程名 学分 选课类 成绩 *
面向对象数据模型的概念 对象:由一组变量、消息和方法组成 类:本质相同的对象的抽象 继承性:类的子类继承父类的所有性质 1.一个对象 对象:由一组变量、消息和方法组成 类:本质相同的对象的抽象 继承性:类的子类继承父类的所有性质 对象标识:OID,唯一标识对象 对象包含:一个对象由几个对象组成,则该对象包含它的成员对象 person customer employee officer teller secretary 3. 类继承层次图 2.对象、对象和实体间的对应关系以及对象和外界的联系 对象 属性1 属性2 方法 消息 实体 飞机 引擎 机身 5. 对象之间的包含层次 尾翼 机翼 person faculty faculty_student student 4. 多重继承性层次