第四章  数据库设计基础
双击滚屏  关闭窗口

4 . 2 数据模型

  4.2.1 数据模型的基本概念
  4.2.2 E-R模型
  4.2.3 层次模型
  4.2.4 网状模型
  4.2.5 关系模型
  

  4.2.1 数据模型的基本概念


    数据库中的数据 模型可以将复杂的现实世界要求反映到计算机数据库中的物理世界,这种反映是一个逐步转化的过程,它分为两个阶段:由现实世界开始,经历信息世界而至计算机世界,从而完成整个转化。
    现实世界( real world ):用户为了某种需要,需将现实世界中的部分需求用数据库实现,这样,我们所见到的是客观世界的划定边界的一个部分环境,它称为现实世界。
    信息世界( information world ):通过抽象对现实世界进行数据库级上的刻画所构成的逻辑模型叫信息世界。信息世界与数据库的具体模型有关,如层次、网壮、关系模型等。
    计算机世界( computer world ):在信息世界基础上致力于其在计算机物理结构上的描述,从而形成的物理模型叫计算机世界。现实世界的要求只有在计算机世界中才得到真正的物理实现,而这种实现是通过信息世界逐步转化得到的。
    数据是现实世界符号的抽象,而数据模型( data model )则是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型所描述的内容有三个部分,它们是数据结构、数据操作与数据约束。
    (1)数据结构,数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作与约束均建立在数据结构上。不同数据结构有不同的操作与约束,因此,一般数据模型的分类均以数据结构的不同而分。
    (2)数据操作。数据模型中的数据操作主要描述在相应数据结构上的操作类型与操作方式。
    (3)数据约束。数据模型中的数据约束主要描述数据结构内数据同的语法、语义联系,它们之间的制约与依存关系,以及数据动态变化的规则,以保证数据的正确、有效与相容。
    数据模型按不同的应用层次分成三种类型,它们是概念数据模型( conceptual data model )、逻辑数据模型( logic data model )、物理数据模型( physical data model )。
    概念数据模型简称概念模型,它是一种面向客观世界、面向用户的模型;它与具体的数据库管理系统无关,与具体的计算机平台无关。概念模型着重于对客观世界复杂事物的结构描述及它们之间的内在联系的刻画。概念模型是整个数据模型的基础。目前,较为有名的概念模型有 E-R 模型、扩充的 E-R 模型、面向对象模型及谓词模型等。
    逻辑数据模型又称数据模型,它是一种面向数据库系统的模型,该模型着重于在数据库系统一级的实现。概念模型只有在转换成数据模型后才能在数据库中得以表示。目前,逻辑数据模型也有很多种,较为成熟并先后被人们大量使用过的有;层次模型、网状模型、关系模型、面向对象模型等。
    物理数据模型又称物理模型,它是一种面向计算机物理表示的模型,此模型给出了数据模型在计算机上物理结构的表示。

  4.2.2 E-R 模型

  概念模型是面向现实世界的,它的出发点是有效和自然地模拟现实世界,给出数据的概念化结构,长期以来被广泛使用的概念模型是 E-R 模型( entity-relationship model )(或实体联系模型),它于 1976 年 Peter Chen 首先提出。该模型将现实世界的要求转化成实体、联系、属性等几个基本秒年 ,以及它们间的两种基本联结关系,并且可以用一种图非常直观地表示出来。
   

  1 、 E-R 模型的基本概念
   (1)实体
   现实世界中的事物可以抽象成为实体,实体是概念世界中的基本单位,它们是客观存在的且又能相互区别的事物。凡是有共性的实体可组成一个集合称为实体集( entity set )。如小赵、小李是实体,他们又均是学生而组成一个实体集。
   (2)属性
   现实世界中事物均有一些特性,这些特性可以用属性来表示。属性刻画了实体的特征。一个实体往往可以有若干个属性。每个属性可以有值,一个属性的取值范围为该属性的值域( value domain )或值集( value set )。如小赵年龄取值为 17 ,小李为 19 。
   (3)联系
   现实世界中事物间的关联称为联系。在概念世界中联系反映了实体间的一定关系,如工人与设备之间的操作关系,上、下级间的领导关系,生产者与消费者之间的供求关系。
   实体集间的联系有多种,就实体集的个数而言有:
    ① 两个实体集间的联系。两个实体集间的联系是一种最为常见的联系,前面举的例子均属两个实体集间的联系
   ② 多个实体集间的联系。这种联系包括三个实体集间的联系以及三个以上实体集间的联系。如工厂、产品、用户这三个实体集间存在着工厂提供产品为用户服务的联系。
    ③ 一个实体集内部的联系。一个实体集内哟若干个食堂,它们之间的联系称实体集内部联系。如某公司职工这个实体集内部可以有上、下级联系。
   实体集间联系的个数可以是单个也可以是多个,如工人与设备之间有操作联系,另外还可以有维修联系。两个实体集间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种:
   一对一( one to one )的联系,简记为 1 : 1 。这种函数关系是常见的函数关系之一,如学校与校长间的联系,一个学校与一个校长间互相一一对应。
   一对多( one to many )或多对一( many to one )联系,简记为 1 : M ( 1 : m )或 M : 1 ( m : 1 )。这两种函数关系实际上是一种函数关系,如学生与其宿舍房间的联系是多对一的联系(反之,则为一对多联系),即多个学生对应一个房间。
   多对多( many to many )联系,简记为 M : N 或 m : n 。这是一种较为复杂的函数关系,如教师与学生这两个实体集间的教与学的联系是多对多的,因为一个教师可以教授多个学生,而一个学生又可以受教于多个教师。
   2、E-R 模型三个基本概念之间的联接关系
   E-R 模型由上面三个基本概念组成。由本体、联系、属性三者结合起来才能表示现实世界。
   (1)实体集(联系)与属性间的联接关系
   实体是概念世界中的基本单位,属性附属于实体,它本身并不构成独立单位。一个实体可以有若干个属性,实体以及它的所有属性构成了实体的一个完整描述,因此实体与属性同有一定的联系关系。如在人事档案中每个人(实体)可以有:编号、姓名、性别、年龄、籍贯、政治面貌等若干属性,它们组成了一个有关人(实体)的完整描述。
   属性有属性域,每个实体可取属性域内的值,一个实体的所有属性取值组成了一个值集叫元组( tuple )。在概念世界中,可以用元组表示实体,也可用它区别不同的实体。如在人事档案简表 4.2 中,每一行表示一个实体,这个实体可以用一组属性值表示。比如:( 101 ,赵英俊,男, 18 ,浙江,团员),( 102 ,王平,男, 21 ,江苏,党员),这两个元组分别表示两个不同的实体。
   实体有型与值之别,一个实体的所有属性构成了这个实体的型,如人事档案中的实体,它的型是由编号、姓名、性别、年龄、籍贯、政治面貌等属性组成,而实体中属性值的集合(即元组)则构成了这个实体的值。
   相同型的实体构成了实体集。如表 4.2 中的每一行是一个实体,他们均有相同的型,因此表内诸实体构成了一个实体集。 

编 号

姓 名

性 别

年 龄

籍 贯

政治面貌

101

赵英俊

18

浙江

团员

102

王平

21

江苏

党员

103

吴亦奇

20

辽宁

群众

104

刘过

21

陕西

群众

105

李美丽

18

安徽

团员

                          表 4.2 人事档案简表

  联系也可以附有属性,联系和它的所有属性够成了联系的一个完整描述,因此,联系与属性间也有联系关系。如有教师与学生两个实体集间的教与学的联系,该联系尚可附有属性“教室号”。
   (2)实体(集)与联系
   实体集间可通过联系建立联系关系,一般而言,实体集间无法建立直接关系,它只能通过联系才能建立联系关系。如教师与学生之间无法直接建立关系,只有通过“教与学”的联系才能在相互之间建立关系。
   在E-R 模型中有三个基本概念以及它们之间的两种基本联系关系。它们将现实世界中的错综复杂的现象抽象成简单明了的几个概念与关系,具有极强的概括性和表达能力。因此, E-R 模型目前已成为表示概念世界的有力工具。

  3. E-R 模型的图示方法
   E-R 模型可以用一种非常直观的图的形式表示,这种图称为 E-R 图( entity-relationship diagram )。在 E-R 图中我们分别用下面不同的几何图形表示 E-R 模型中的三个概念与两个联系关系。
   (1)实体集表示法
   在E-R 图中用矩形表示实体集,在矩形内写上该实体集的名字。如实体集学生( student )、课程( course )可用图 4.4 表示。
                      
                          图4.4 实体集表示法
   (2)属性表示法
   在 E-R 图中用椭圆形表示属性,在椭圆形内写上该属性的名称。如学生有属性:学号( S# )、姓名( Sn )及年龄( Sa ),它们可以用图 4.5 表示。
                     
                           图4.5 属性表示法
   (3)联系表示法
   在E-R 图中用菱形(内写上联系名)表示联系。如学生与课程间的联系 SC ,用图 4.6 表示。
                         
                           图4.6 联系表示法

   三个基本概念分别用三种几何图形表示。它们间的联系关系也可用图形表示
   (4)实体集(联系)与属性间的联系关系
   属性依附于实体集,因此,它们之间有联系关系。在 E-R 图中这种关系可用联接这两个图形间的无向线段表示(一般情况下可用直线)。如实体集 student 有属性 S# (学号)、 Sn (学生姓名)及 Sa (学生年龄):实体集 course 有属性 C# (课程号)、 Cn (课程名)及 P#( 预修课号 ) ,此时它们可用图 4.7 联接。
                
                          图4.7 实体集的属性间的联接
  属性也依附于联系,它们之间也有联接关系,因此也可用无向线段表示。如联系 SC 可与学生的课程成绩属性 G 建立连接并可用图 4.8 表示
                   
                          图4.8 联系与属性间的联接

   (5)实体集与联系间的联接关系
   在E-R 图中实体集与联系间的联接关系可用联接这两个图形间的无向线段来表示。如实体集 student 与联系 SC 间有联接关系,实体集 course 与联系 SC 间也有联接关系,因此他们之间可用无向线段想联,构成一个如图 4.9 所示的图。
                    
                         图4.9 实体集与联系间的联接关系
   有时为了进一步刻画实体间的函数关系,还可在线段边上注明其对应的函数关系,如: 1 : 1 , 1 : n , n : m 等,如 student 与 course 间有多对多联系,此时在图中可以用图 4.10 所示的形式表示。
                    

                          图4.10 实体集间的联系表示图

   实体集与联系间的联接可以有多种,上面所举例子均是两个实体集间的联系叫二元关系,也可以是多个实体集间联系,叫多元联系。如工厂,产品与用户间的联系 FPU 是一种三元联系,此种联接关系可以用 4.11 表示。
                      
                           图4.11 多个实体间联系的联接方法

  一个实体集内部可以有联系。如某公司职工( employee )间上、下级管理( anage)的联系,此时,其联系关系可用图 4.12 (a)表示。
   实体集键间可有多种联系。如教师( T )与学生( S )之间可以有教学( E )联系也可以有管理( M )联系,此种联接关系可以用图 4.12 ( b )表示。
             
                            图4.12 实体集间多种联系

  由矩形、椭圆形、菱形以及按一定要求相互间联接的线段构成了一个完整的 E-R 图。
   例 4.1 由前面所述的实体集 student,course 以及附属于它们的属性和它们间的联系 SC 以及附属于 SC 的属性 G 构成了一个学生课程联系的概念模型,可用图 4.13 的 E-R 图表示。
       
                         图4.13 E-R图的一个实例


   在概念上, E — R 模型中的实体、属性与联系是有明显区别的不同概念。但是在分析客观世界的具体事物时,对某个具体数据对象,究竟它是实体,还是属性或联系,则是相对的,所做的分析设计与实际应用的背景及设计人的理解有关。这是工程实践中构造 E — R 模型的难点之一。

  4.2.3 层次模型


   层次模型是最早发展起来的数据库模型。层次模型( hierarchical model )的基本构造是树形结构,这种结构方式在现实世界中很普遍,如家族结构、行政组织机构,它们自顶向下、层次分明。图 4.14 给出了一个学校行政机构图的简化 E — R 图,略去了其中的属性。
        
                         图4.14 一个简化E-R图

  由图论中树的性质可知,任一树结构均有下列特性:
   (1)每棵树有且仅有一个无双亲结点,称为根( root )。
   (2) 树中除根外所有结点有且仅有一个双亲。因此,树结构是受到一定限制的,从 E — R 模型观点看,它对于联系也加上了许多限制。
   层次数据模型支持的操作主要有查、插入、删除和更新。在对层次模型进行插入、删除、更新操作时,要满足层次模型的完整型约束条件,进行插入操作时,如果没有相应的是双亲结点值就不能插入子女结点值;进行删除操作时,如果删除双亲结点值,则相应的子女结点值也被同时删除;进行更新操作时,应更新所有相应记录,以保证数据的一致性。
   层次模型的数据结构比较简单,操作简单;对于实体间联系是固定的、且预先定义好的应用系统,层次结构有较高的性能;同时,层次模型还可以提供很良好的完整性支持。但由于层次模型成型早,受文件系统影响大,模型受限制多,物理成分复杂,操作与使用均不甚理想,它不适合于表示表示非层次性的联系;对于插入和删除操作的限制比较多;此外,查询子女结点必须通过双亲结点。

  4.2.4  网状模型


   网状模型( Network model )的出现略晚于层次模型。从图论观点看,网状模型是一个不加任何条件限制的无向图。网状模型在结构上较层次模型好,不像层次模型那样要求满足严格的条件。图 4.15 是学校行政机构图与学生联系的简化 E — R 图 3 。
   在实现中,网状模型将通用的网络拓扑结构分成一些基本结构。一般采用的分解方法是将一个网络分成若干个二级树,即只有两个层次的树。换句话说,这种树是由一个根及若干个叶所组成。为实现的方便,一般规定根结点与任一叶子结点间的联系均是一对多的联系(包含一对一联系)。
   在网状模型的 DBTO ( data base taskgroup )标准中,基本结构简单二级树叫系( set ) ,系的基本数据单位是记录( record ) , 它相当于 E — R 模型中的实体(集);记录又可由若干数据项组成,它相当于 E — R 模型中的属性。系有一个首记录( owner record ) , 它相当于简单二级树的根;系同时有若干个成员记录( member record ),它相当于简单二级树中的叶;
   首记录与 成员记录之间的联系用有向线段表示(线段方向仅表示由首记录至成员记录的方向,而并不表示搜索方向),在系中首记录与成员记录间是一对多联系(包括一对一联系)。图 4.16 给出了一个系的实例。
           
          图4.15 一个简化的教学关系E-R图             图4.16 一个系的实例

  一般地,现实世界的一个实体结构往往可以右若干个系组成。在网状模型的数据库管理系统中,一般提供 DDL 语言,用它可以构造系。网状模型中的基本操作是简单二级树中的操作,它包括查询、增加、删除、修改等操作,对于这些操作,不仅需要说明做什么,还需要说明怎么做。比如,在进行查询时,不但要说明查找对象,而且还要规定存取的路径。在DBTG 报告中,提供了在系上进行操纵的 DML 语言,它们有包括打开( open )、关闭( colse )、定位 (find) 、取 (get) 、删除 (delete) 、存储 (store) 等在内的许多操作。
   网状模型明显优于层次模型,不管是数据表示或数据操纵均显示了更高的效率、更为成熟。但是,网状模型数据库系统也有一定的不足,在使用时涉及到系统内部的物理因素较多,用户操作使用不方便,其数据模式与系统实现也均不甚理想。

  4.2.5 关系模型

  1.关系的数据结构
关系模型采用二维表来表示,简称表。二维表由表框架 (Frame) 及表的元组—( Tuple )组成。表框架由 n 个命名的属性( Attribute )组成, n 称为属性元数 (Arity) 。每个属性有一个取值范围称为值域( Domain )。表框架对应了关系的模式,即类型的概念。
   在表框架中按行可以存放数据,每行数据称为元组,实际上,一个元组是由 n 个元组分量所组成,每个元组分量是表框架中每个属性的投影值。一个表框架可以存放 m 个元组, m 称为表的基数( Cardinality )。
   一个 n 元表框架及框架内 m 个元组构成了一个完整的二维表。表 4.3 给出了有关学(S)二维表的一个实例。
       
   二维表一般满足下面 7 个性质:
   •  二维表中元组个数是有限的——元组个数有限性。
  •  二维表中元组均不相同——元组的唯一性。
  •  二维表中元组的次序可以任意交换——元组次序的无关性。
  •  二维表中元组的分量是不可分割的基本数据项——元组分量的原子性。
  •  二维表中属性名各不相同——属性名唯一性。
  •  二维表中属性与次序无关,可任意交换——属性的次序无关性。
  •  二维表属性的分量具有与该属性相同的值域——分量值域的同一性。
   满足以上 7 个性质的二维表称为关系( relation ) , 以二维表为基本结构所建立的模型称为关系模型。
   
关系模型中的一个中的一个重要概念是键或码。键具有标识元组、建立元组间联系等重要作用。
   在二维表中凡能唯一标识元组的最小属性集称为该表的候选码或候选键( Candidata key )。
   从二维表的所有候选键中选取一个作为用户使用的键称为主键( Primary key )或主码,一般主键也简称键或码。
   表 A 中的某属性集是某表 B 的键,则称该属性集为 A 的外键( Foreign key )或外码。
   表中一定要有键,因为如果表中所有属性的子集均不是键,则表中属性的全集必为键(称为全键),因此也一定有主键。
   在关系元组的分量中允许出现空值( Null value )以表示信息的空缺。空值用于表示未知的值或这不可能出现的值,一般用 NULL 表示。一般关系数据库系统都支持空值,但是有两个限制,即关系中的主键中不允许出现空值,因为主键若为空值则失去了其元组的标识作用;需要定义有空值的运算。}
  关系框架与关系元组构成了一个关系。一个语义相关的关系集合构成了一个关系数据库( Relational Database ) . 关系的框架称为关系模式,而语义相关的关系模式集合构成了关系数据库模式( Relational Database Schema )。
   关系模式支持子模式,关系子模式是数据库模式中用户所见到的那部分数据模式描述。关系子模式也是二维表结构,关系子模式对应用户数据库视图 (View) 。
   2.关系操纵
   关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除及修改四种操作。
   (1)数据查询
   用户可以查询关系数据库中的数据,它包括一个关系内的查询及关系间的查询。
   ① 对一个关系内查询的基本单位是元组分量,其基本过程是先定位后操作,所谓定位包括纵向定位与横向定位两部分,纵向定位既是指定关系中的一些属性(称列指定),横向定位既是选择满足某些逻辑条件的元组(称行选择)。通过纵向与横向定位后一个关系中的元组分量即可确定了。在定位后即可进行定位操作,就是将定位的数据从关系中取出并放入指定的内存。
   ② 对多个关系间的数据查询可以分为三步:‘第一步,将多个饿关系合并成一个关系:第二步,对合并后的一个关系做定位;第三步,操作。其中第二步与第三步为对一个关系的查询。对多个关系合并可分解成两个关系的逐步合并,如有三个关系 R1 , R2 和 R3 ,合并过程下是将 R1 和 R2 合并成 R ,然后再将 R4 和 R3 最终合并成结果 R5 。
   因此,对关系数据库的查询可以分解成一个关系内的属性指定、一个关系内的元组选择、两个关系的合并三个基本定位操作以及一个查询操作。
   (2)数据删除
   数据删除的基本单位是一个关系内的元组,它的功能是将指定关系内的指定元组删除,它也分为定位和操作两部分,其中定位部分只需要横向定位而无需纵向定位,定位后即执行删除操作。因此数据删除可以分解为一个关系内的元组选择与关系中元组删除两个基本操作。
   (3)数据插入
   数据插入仅对一个关系而言,并指定关系中插入一个或多个元组。在数据插入中不需定位,仅需做关系中元组插入操作,因此数据插入只有一个基本操作。
   (4)数据修改
   数据修改是在一个关系中修改指定的元组与属性。数据修改不是一个基本操作,它可以分解为删除需修改的元组与插入修改后的元组两个更基本的操作。
   以上四种操作的对象都是关系,而操作结果也是关系,因此都是建立在关系基础上操作。这四种操作可以分解成六种基本操作,称为关系模型的基本操作
   •  关系的属性指定;
   •  关系的元组选择;
   •  两个关系合并;
   •  一个或多个关系的查询;
   •  关系中元组的插入;
   •  关系中元组的删除;
   3. 关系中的数据约束
   关系模型允许定义三类数据约束,它们是实体完整性约束、参照完整性约束以及用户自定义的完整性约束,其中前两种完整性约束由关系数据库系统自动支持。对于用户自定义的完整性约束,则由关系数据库系统提供完整性约束语言,用户利用该语言写出约束条件,运行时由系统自动检查。
  (1) 实体完整性约束( Entity Integrity Constraint )
  该约束要求关系中的主键属性不能为空值,这是数据库完整性的最基本要求,因为主键是惟一决定元组的,如为空值则其惟一性就成为不可能的了。
  (2) 参照完整性约束( Reference Integrity Constraint )
  该约束是关系之间相关联的基本约束,它不允许关系引用不存在的元组:即在关系中的外键要么是所连关系中实际存在的元组,要么就为空值。比如在关系 S ( S# 、 SN 、 SD 、 SA )与 SC ( S# 、 C# 、 G )中, SC 中的主键为( S# 、 C# )而外键为 S# , SC 与 S 通过 S# 相关联,参照完整性约束要求 SC 中的 S# 的值必在 S 中有相应的元组值,如有 SC ( S13 、 C8 、 70 ),则必在 S 中存在 S ( S13 , ….. )
  (3) 用户自定义的完整性约束( User defined Integrity Constraint )
  这是针对具体数据环境与应用环境由用户具体设置的约束,它反映了具体应用中数据的语义要求。实体完整性约束和参照完整性约束是关系数据库所必须遵循的规则,在任何一个关系数据库管理系统( RDBMS )中均由系统自动支持。

 
                             返回首页                     双击滚屏  关闭窗口
数学与信息科学学院 版权所有