《数据库原理与应用(第3版)》——2.3 组织层数据模型-阿里云开发者社区

开发者社区> 华章出版社> 正文

《数据库原理与应用(第3版)》——2.3 组织层数据模型

简介:

本节书摘来自华章出版社《数据库原理与应用(第3版)》一 书中的第2章,第2.3节,作者:何玉洁,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 组织层数据模型

组织层数据模型是从数据的组织形式的角度来描述信息,目前,在数据库技术的发展过程中用到的组织层数据模型主要有:层次模型(Hierarchical Model)、网状模型(Network Model)、关系模型(Relational Model)、面向对象模型(Object Oriented Model)和对象关系模型(Object Relational Model)。组织层数据模型是按组织数据的逻辑结构来命名的,比如层次模型采用树形结构。而且各数据库管理系统也是按其所采用的组织层数据模型来分类的,比如层次数据库管理系统就是按层次模型来组织数据,而网状数据库管理系统就是按网状模型来组织数据。
1970年,美国IBM公司研究员E.F.Codd首次提出了数据库系统的关系模型,开创了关系数据库和关系数据理论的研究,为关系数据库技术奠定了理论基础。关系模型从20世纪70~80年代开始到现在已经发展得非常成熟,本书的重点也是介绍关系模型。20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都支持关系模型,非关系系统的产品也大都加上了关系接口。
一般将层次模型和网状模型统称为非关系模型。非关系模型的数据库系统在20世纪70年代至80年代初曾非常流行,在数据库管理系统的产品中占主导地位,但现在已逐步被采用关系模型的数据库管理系统所取代。20世纪80年代以来,面向对象的方法和技术在计算机各个领域,包括程序设计语言、软件工程、信息系统设计、计算机硬件设计等方面都产生了深远的影响,也促进了数据库中面向对象数据模型的研究和发展。

2.3.1 层次数据模型

层次数据模型(层次模型)是数据库管理系统中最早出现的数据模型。层次数据库管理系统采用层次模型作为数据的组织方式。层次数据库管理系统的典型代表是IBM公司的IMS(Information Management System),这是IBM公司1968年推出的第一个大型的商用数据库管理系统。
层次数据模型用树形结构表示实体和实体之间的联系。现实世界中许多实体之间的联系本身就呈现出一种自然的层次关系,如行政机构、家族关系等。
构成层次模型的树由节点和连线组成,节点表示实体,节点中的项表示实体的属性,连线表示相连的两个实体间的联系,这种联系是一对多的。通常把表示“一”的实体放在上方,称为父节点;把表示“多”的实体放在下方,称为子节点。将不包含任何子节点的节点称为叶节点,如图2-4所示。
层次模型可以直接、方便地表示一对多的联系。但在层次模型中有以下两点限制:
1)有且仅有一个节点无父节点,这个节点即为树的根。
2)其他节点有且仅有一个父节点。
层次模型的一个基本特点是,任何一个给定的记录值只有从层次模型的根部开始按路径查看时,才能明确其含义,任何子节点都不能脱离父节点而存在。
图2-5说明了一个具有层次结构的学校组织机构数据模型,该模型有4个节点,“学院”是根节点,由学院编号、学院名称和办公地点三项组成。“学院”节点下有两个子节点,分别为“教研室”和“学生”。“教研室”节点由“教研室名”、“室主任”和“室人数”三项组成,“学生”节点由“学号”“姓名”“性别”和“年龄”四项组成。“教研室”节点下又有一个子节点“教师”,因此,“教研室”是“教师”的父节点,“教师”是“教研室”的子节点。“教师”节点由“教师号”“教师名”和“职称”项组成。

screenshot

图2-6是图2-5数据模型对应的一个值。
screenshot

图2-6 学院层次数据库的一个值
层次数据模型只能表示一对多联系,不能直接表示多对多联系。但如果把多对多联系转换为一对多联系,又会出现一个子节点有多个父节点的情况(如图2-7所示,学生和课程原本是一个多对多联系,在这里将其转换为两个一对多联系),这显然不符合层次数据模型的要求。一般常用的解决办法是把一个层次模型分解为两个层次模型,如图2-8所示。
层次数据库是由若干个层次模型构成的,或者说它是一个层次模型的集合。

2.3.2 网状数据模型

在现实世界中事物之间的联系更多的是非层次的,用层次数据模型表达现实世界中存在的联系有很多限制。如果去掉层次模型中的两点限制,即允许一个以上的节点无父节点,并且每个节点可以有多个父节点,便构成了网状模型。
用图形结构表示实体和实体之间的联系的数据模型称为网状数据模型(网状模型)。在网状模型中,同样使用父节点和子节点这样的术语,并且同样一般把父节点放置在子节点的上方。图2-9所示为几个不同形式的网状模型形式。

screenshot

从图2-9可以看出,网状模型父节点与子节点之间的联系可以不唯一,因此,就需要为每个联系命名。如图2-9a中,节点R3有两个父节点R1和R2,因此,将R1与R3之间的联系命名为L1,将R2与R3之间的联系命名为L2。图2-9b和c与此类似。
由于网状模型没有层次模型的两点限制,因此可以直接表示多对多联系。但在网状模型中多对多的联系实现起来太复杂,因此一些支持网状模型的数据库管理系统对多对多联系还是进行了限制。例如,网状模型的典型代表CODASYL(Conference On Data System Language)就只支持一对多联系。
网状模型和层次模型在本质上是一样的。从逻辑上看,它们都是用连线表示实体之间的联系,用节点表示实体;从物理上看,它们都是用指针来实现文件以及记录之间的联系,其差别仅在于网状模型中的连线或指针更复杂,更纵横交错,从而使数据结构更复杂。
网状模型的典型代表是CODASYL,它是CODASYL组织的标准建议的具体实现。层次模型是按层次组织数据,而CODASYL是按系(set)组织数据。所谓“系”可以理解为命名了的联系,它由一个父记录型和一个或若干个子记录型组成。图2-10为网状模型的一个示例,其中包含四个系,S-G系由学生和选课记录构成,C-G系由课程和选课记录构成,C-C系由课程和授课记录构成,T-C系由教师和授课记录构成。实际上,图2-7所示的具有两个父节点的结构也属于网状模型。

screenshot

2.3.3 关系数据模型

关系数据模型是目前最重要的一种数据模型,关系数据库就是采用关系数据模型作为数据的组织方式。关系数据模型源于数学,它把数据看作二维表中的元素,而这个二维表在关系数据库中就称为关系。关于关系的详细讨论将在第3章进行。
用关系(表格数据)表示实体和实体之间的联系的模型就称为关系数据模型。在关系数据模型中,实体本身以及实体和实体之间的联系都用关系来表示,实体之间的联系不再通过指针来实现。
表2-1和表2-2所示分别为“学生”和“选课”关系模型的数据结构,其中“学生”和“选课”间的联系是靠“学号”列实现的。
screenshot

在关系数据库中,记录值仅仅构成关系,关系之间的联系是靠语义相同的字段(称为连接字段)值表达的。理解关系和连接字段(即列)的思想在关系数据库中非常重要。例如,要查询“刘晨”的考试成绩,则首先要在“学生”关系中得到“刘晨”的学号值,然后根据这个学号值再在“选课”关系中找出该学生的所有考试记录值。
对于用户来说,关系的操作应该很简单,但关系数据库管理系统本身是很复杂的。关系操作之所以对用户很简单,是因为它把大量的工作交给了数据库管理系统来实现。尽管在层次数据库和网状数据库诞生之时,就有了关系数据库的设想,但研制和开发关系数据库管理系统却花费了比人们想象要长得多的时间。关系数据库管理系统真正成为商品并投入使用要比层次数据库和网状数据库晚十几年。但关系数据库管理系统一经投入使用,便显示出了强大的活力和生命力,并逐步取代了层次数据库和网状数据库。现在耳熟能详的数据库管理系统几乎都是关系数据库管理系统,比如Microsoft SQL Server、Oracle、IBM DB2、Access等。
关系数据模型易于设计、实现、维护和使用,它与层次数据模型和网状数据模型的最根本区别是,关系数据模型不依赖于导航式的数据访问系统,数据结构的变化不会影响对数据的访问。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接