数据模型(Data Model)是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象。数据模型从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供了一个抽象的框架。数据模型所描述的内容有三部分:数据结构、数据操作和数据完整性约束。
数据发展过程中产生过三种基本的数据模型,它们是层次模型、网状模型和关系模型。这三种模型是按其数据结构而命名的。前两种采用格式化的结构。在这类结构中实体用记录型表示,而记录型抽象为图的顶点。记录型之间的联系抽象为顶点间的连接弧。整个数据结构与图相对应。其中层次模型的基本结构是树形结构;网状模型的基本结构是一个不加任何限制条件的无向图。关系模型为非格式化的结构,用单一的二维表的结构表示实体及实体之间的联系。其中应用最广泛的是关系模型,在逻辑数据类型中最常用的是层次模型、网状模型、关系模型。[1]
本章将从数据结构、数据操作、数据完整性约束、查询效率等方对常用的数据模型进行对比分析。并对一些不常见的数据模型进行简单介绍。
它将数据组织成一对多关系的结构,层次结构采用关键字来访问其中每一层次的每一部分。优点是存取方便且速度快;结构清晰,容易理解;数据修改和数据库扩展容易实现;检索关键属性十分方便。缺点是结构呆板,缺乏灵活性;同一属性数据要存储多次,数据冗余大(如公共边),不适合于拓扑空间数据的组织。[1]
如图1,以Pavement Improvement为例的层次模型。该实例有7个记录类型。记录类型Pavement Improvement是根节点。Routine、Corrective、Preventive是叶节点,它们没有子女节点。
它用连接指令或指针来确定数据间的显式连接关系,是具有多对多类型的数据组织方式。优点是能明确而方便地表示数据间的复杂关系;数据冗余小。缺点在于网状结构的复杂,增加了用户查询和定位的困难;需要存储数据间联系的指针,使得数据量增大;数据的修改不方便(指针必须修改)。[2]
网状数据模型可以看做是放松层次数据模型的约束性的一种扩展。网状数据模型中所有的节点允许脱离父节点而存在,也就是说说在整个模型中允许存在两个或多个没有根节点的节点,同时也允许一个节点存在一个或者多个的父节点,成为一种网状的有向图。因此节点之间的对应关系不再是1:n,而是一种m:n的关系,从而克服了层次状数据模型的缺点。[2]
图二以教务管理系统为例,下面说明了院系的组成中,教师、学生、课程之间的关系。由上图中可以看出课程(实体)的父节点由专业、教研室、学生。以课程和学生之间的关系来说,他们是一种m:n的关系,也就是说一个学生能够选修多门课程,一门课程也可以被多个学生同时选修。
它以记录组或数据表的形式组织数据,以便于利用各种地理实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法。优点在于结构特别灵活,概念单一,满足所有布尔逻辑运算和数学运算规则形成的查询要求;[2]、[3]能搜索、组合和比较不同类型的数据;增加和删除数据非常方便;具有更高的数据独立性、更好的安全保密性。缺点是数据库大时,查找满足特定关系的数据费时;对空间关系无法满足。
关系模型采用二维表来表示。二维表由表框架和表的元组组成。表框架由多个命名的表属性组成。每个属性有一个取值范围称为值域。二维表中的每一行数据成称为元组。
图形数据库允许比网状模型更通用的结构;任何节点都可以连接到任何其他节点。[5]
在计算中,图数据库是一个数据库,它使用图状结构进行语义查询,并使用节点,边和属性来表示和存储数据。系统的一个关键概念是图形(或边缘或关系),它直接关联商店中的数据项。这些关系允许商店中的数据直接链接在一起,并且在很多情况下通过一个操作进行检索。
图形数据库,通过设计,可以简单快速地检索复杂的层次结构,这些结构很难建模在关系系统中。图形数据库与20世纪70年代的网络模型数据库类似,都表示通用图形,但网络模型数据库在较低的抽象层次上操作,并且在边缘链上缺乏简单的遍历。
节点表示诸如人员,企业,账户或任何其他要跟踪的项目的实体。他们大致相当于纪录,关系,或排在关系数据库或文件中的文档数据库。
边缘(也称为图或关系)是将节点连接到其他节点的线; 他们代表了他们之间的关系。检查节点,属性和边的连接和互连时会出现有意义的模式。边缘是图形数据库中的关键概念,代表了其他系统中不直接实现的抽象。属性是节点的相关信息。例如,如果维基百科是其中一个节点,它可能会与诸如网站,参考资料或以字母w开头的单词之类的属性相关联。[5]
图形数据库直接存储记录之间的关系。而不是通过查找其中的用户密钥找到电子邮件地址userpk列,用户记录具有直接指向电子邮件地址记录的指针。也就是说,选择一个用户后,指针可以直接跟在电子邮件记录上,不需要搜索电子邮件表来查找匹配的记录。这可以消除昂贵的连接操作。当执行多于一个级别的搜索时,图表方法的真实价值变得明显。
图形数据库自然适用于在线系统和大数据环境中日益普遍的搜索类型。如果图中的一个节点被删除,相应地与此节点有关系的边和属性都要删除。[5]
图中三个节点的记录类型实例分别是Alice,Bob,Chess,每个节点有不同的属性,ID是唯一标识码。边表示两个记录类型之间关系。
在20世纪90年代,面向对象的编程范例被应用于数据库技术,创建了一个新的数据库模型,称为对象数据库。这旨在避免对象 – 关系阻抗不匹配 – 在数据库中的表示(例如表中的行)与其在应用程序中的表示(通常为对象)之间转换信息的开销。更进一步,可以直接在数据库中定义特定应用程序中使用的类型系统,从而允许数据库执行相同的数据完整性不变量。对象数据库还介绍了对象编程的关键概念,如封装和多态,进入数据库的世界。
各种各样的方法已经被尝试用于将对象存储在数据库中。有些产品已经从应用程序编程的最后,通过使程序操纵的对象持久化来解决问题。这通常需要添加某种查询语言,因为传统编程语言无法根据其信息内容查找对象。其他已经从数据库端攻击了这个问题,为数据库定义了一个面向对象的数据模型,并定义了一个数据库编程语言,该语言允许完整的编程功能以及传统的查询功能。
对象数据库由于缺乏标准化而受到影响:虽然标准是由ODMG定义的,但它们从未得到足够好的执行以确保产品之间的互操作性。尽管如此,目标数据库已经成功地用于许多应用:通常是专门的应用,如工程数据库或分子生物学数据库,而不是主流的商业数据处理。然而,对象数据库的想法是由关系供应商挑选出来的,影响了对这些产品的扩展,甚至影响了对SQL语言的扩展。[6]、[7]
在对象和关系数据库之间转换的另一种方法是使用对象关系映射(ORM)库。
在关系模型中基本数据结构是表,而面向对象数据模型中对应的是类。关系中的数据元组相当于面向对象数据模型中的实例。
在关系数据模型中的数据操作都归结为对关系的运算。在面向对象数据模型中,对类的操作分为两部分:一是封装在类内的操作,即方法;二是类间相互沟通的操作,即消息。
在关系数据模型中有实体完整性、参照完整性和用户定义的完整性约束,约束条件可以用逻辑公式表示。在面向对象数据模型中可以用方法或消息表示约束,称为完整性约束消息。[6]
图中两个对象是Maintenance Report和Maintenance Activity,其中Object1 Instance每个对象中包含若干属性,其中第一个对象中有Activity Code、Route No.、Daily Production、Equipment Hours、Labor Hours这些属性。面向对象的数据库模型允许像集合和列表这样的容器,任意用户定义的数据类型以及嵌套对象,在访问上述实例中的对象则通过OOP封装的方法实现。
随着互联网、大数据及人工智能的发展,作为信息系统核心和基础的数据库技术得到越来越广泛的应用,数据模型是数据库的基础,对数据模型的对比分析能够加深我们对数据库的认识,使我们将技术服务于应用。
[1] 孟小峰, 周龙骧, 王珊. 数据库技术发展趋势[J]. 软件学报, 2004, 15(12):1822-1836.
[2] 何婷婷. 数据库系统中的数据模型[J]. 高等继续教育学报, 1994(3):22-26.
[3] Codd E F. The relational model for database management: version 2[M]. Addison-Wesley Longman Publishing Co., Inc., 1990.
[4] Schek H J, Scholl M H. The relational model with relation-valued attributes[J]. Information systems, 1986, 11(2): 137-147.
[5] Angles R, Gutierrez C. Survey of graph database models[J]. ACM Computing Surveys (CSUR), 2008, 40(1): 1.
[6] Kim W, Lochovsky F H. Object-oriented concepts, databases, and applications[M]. ACM Press/Addison-Wesley Publishing Co., 1989.
[7] Kim W. Modern database systems: the object model, interoperability, and beyond[M]. ACM Press/Addison-Wesley Publishing Co., 1995.