深入理解 DBMS 网状模型:从基础到实战应用

在我们探索数据库系统的演进历程时,往往会发现技术的更替是为了解决前一代技术的局限性。你是否想过,在关系型数据库(RDBMS)出现之前,我们是如何处理复杂数据关系的?特别是当数据之间存在多对多的复杂关联时,简单的树状结构(层级模型)已经无法满足需求。这时,网状模型应运而生。

今天,我们将深入探讨 DBMS(数据库管理系统)中的网状模型。这不仅仅是一次历史的回顾,更是为了理解数据建模的核心思想。我们将看到它如何通过图结构打破层级限制,允许更灵活的数据访问,并分析它在现代数据架构中留下的宝贵遗产。让我们开始这段旅程吧!

什么是网状模型?

简单来说,网状模型是一种数据模型,它允许数据以更灵活、更复杂的结构来表示“多对多”关系。与层级模型严格的父子树状结构不同,网状模型使用由节点(实体)和边(关系)组成的图结构来组织数据。

想象一下,在层级模型中,如果你是一个“子节点”,你只能有一个“父节点”。这就像在严格的家长制下,孩子只能归属于一个父亲。但在现实世界的数据库应用中,比如复杂的供应链系统或大学选课系统,一个实体往往需要同时属于多个上级分类。网状模型正是为了解决这种灵活性需求而诞生的。它通过允许记录拥有多个父节点,实现了更高效、更直接的访问路径,避免了数据冗余。

历史背景与核心概念:从 CODASYL 到图结构

为了真正掌握网状模型,我们需要回顾一下它的起源。这个模型最初是由数据库任务组(DBTG)在 20 世纪 60 年代后期规范化的,隶属于 CODASYL(系统语言会议咨询委员会)。它是层级模型的自然进化形式。

在这个模型中,数据被称为“片段”。与层级模型最大的区别在于,在这个模型中,一个片段可以拥有多个父节点。虽然这些片段在逻辑上被分组为不同的层级,但它们之间的关联不再局限于单一路径。通常情况下,任意两个片段之间都存在多对多的逻辑关联。

我们将这些片段之间的逻辑关联称为。因此,这个模型用类似图的结构取代了层级树,使得不同节点之间可以存在更通用的连接。它可以拥有 M:N(多对多)关系,这允许一条记录拥有多个父级片段。

“系”的概念:所有者与成员

在网状模型的理论中,有一个非常重要的术语我们必须了解——“系”。每一个“系”至少由以下两种类型的记录组成,这是理解该模型运作的关键:

  • 所有者记录: 它等同于层级模型中的父节点。它是关系的发起端,处于主导地位。
  • 成员记录: 它等同于层级模型中的子节点。它是从属端,可以有多个。

这种结构允许我们建立复杂的数据网络。为了让你更直观地理解,让我们通过可视化的图表来分析它的结构。

网状模型的结构解析

为了更好地理解这种抽象的概念,让我们看一个典型的网状数据模型示意图。

!A Network data model

图解分析:

在上面的图中,我们可以观察到层级模型中不可能出现的现象:

  • 单一父级: 成员 INLINECODE92b675b5 只有一个所有者 INLINECODE076dc49c。
  • 多重父级: 成员 INLINECODE7f8275f2 比较特殊,它有两个所有者,分别是 INLINECODEc02065fb 和 THREE

这里展示了网状模型的核心力量。两种记录类型之间的每一个链接都代表着它们之间的一对多(1:M)关系。该模型在节点之间既包含横向连接,也包含自上而下的连接。因此,它允许给定实体之间存在 1:1、1:M、M:N 的关系。

这种设计极大地有助于避免数据冗余问题,因为它支持通过多条路径访问同一条记录。这意味着我们不需要在不同的位置重复存储相同的数据,只需要建立逻辑上的连接即可。该模型的各种实现案例包括 Cincom Systems Inc. 开发的 TOTAL,以及 Xerox Corp. 开发的 EDMS 等。

示例:财务部门的网状模型

理论可能有点枯燥,让我们来看看一个更贴近业务场景的例子。假设我们为一家公司的财务部门设计数据库。

!Network model of Finance Department.

业务逻辑分析:

在上面的图中,INLINECODE27ef9c60(推销员)、INLINECODE4121b7ad(客户)、INLINECODEd355c10a(产品)、INLINECODE9f75e94b(发票)、INLINECODEe1dd14ba(支付)、INLINECODE2eb661eb(发票明细)是该公司销售业务中的记录类型。

我们可以梳理出这样的业务逻辑:

  • 发票明细的双重归属: 正如我们在图中看到的那样,INLINECODE89b87b79(发票明细)不仅属于某张发票,还关联到具体的产品。因此,INLINECODEcdd591a6 同时归属于 INLINECODEac79e2dd 和 INLINECODE0d2c9361。这是典型的多父级场景。
  • 发票的复杂性: INLINECODE8b8ee19c(发票)也有两个所有者:它是由某个 INLINECODEe9b90bfb(推销员)开出的,同时也属于某个 CUSTOMER(客户)。

这种结构完美地捕捉了现实世界的业务流程,而在严格的层级模型中,要表示“发票明细”既属于“发票”又属于“产品”的关系,将会非常困难且会导致数据冗余。

深入探讨:复杂实例与代码模拟

让我们把难度稍微提高一点,看看在更复杂的场景下网状模型是如何工作的。特别是关于多对多(M:N)关系的处理,这是网状模型的一大亮点。

场景设定:大学教务系统

假设我们有两个实体:INLINECODE931f470b(教员/系)和 INLINECODE129602be(学生)。

现实生活中,一个学生(比如 John)既选修了 CS(计算机科学)系的课程,也选修了 EE(电子工程)系的课程。如果我们在层级模型中,John 只能属于一个系。但在网状模型中,我们不仅需要找出这里存在多少个实例,还需要处理这种错综复杂的关系。

对于上述示例,一个学生的实例至少可以有两个父级实例(CS 系和 EE 系)。因此,在学生片段和教员片段的实例之间存在着多对多的逻辑关联。

伪代码实现:模拟网状模型的 DDL 和 DML

为了让你对网状模型的操作有更具体的理解,虽然网状数据库通常使用 COBOL 等语言结合专有接口,但我们可以通过一种结构化的伪代码来模拟其核心操作。这里我们模拟一个基于集合的操作。

#### 示例 1:构建 Schema(模式定义)

在网状模型中,我们需要定义记录类型以及它们之间的系。

“INLINECODEd6da1e6f`INLINECODE50284688SELECT * FROM Student WHERE FacultyID = …INLINECODE4bc71b46GETFIRSTMEMBERINLINECODEd5203174GETNEXT_MEMBER`。

这正是网状模型(以及 IDMS 等具体实现)的典型操作方式。数据是通过指针链表连接在一起的。一旦找到了“所有者”记录(教员),数据库系统就会直接读取指向下一个成员的指针。这种方法在处理大规模数据时,性能往往优于早期的关系型数据库,因为它避免了昂贵的笛卡尔积运算。这就是为什么在金融交易等对性能要求极高的系统中,网状模型曾经长期占据主导地位的原因。

网状模型的优势:为什么它曾如此流行?

在我们继续之前,让我们总结一下网状模型的核心优势。这有助于我们在设计现代系统时,借鉴其优点:

  • 简单与高效: 这个模型非常简单,易于设计(从概念上讲),类似于层级数据模型。在处理大量 1:N 关系时,它比 SQL 更加直观和快速。
  • 处理复杂关系: 这个模型能够处理多种类型的关系(1:1, 1:M, M:N),这非常有助于对现实生活中的应用程序进行建模,比如复杂的供应链、航空预订或大学管理系统。
  • 快速的数据访问: 在这个模型中,我们可以轻松地访问数据。应用程序有机会直接访问同一个系内的所有者记录和成员记录。如果你知道路径,数据检索就是瞬间的。
  • 数据完整性: 这种网络结构不允许成员在没有所有者的情况下存在(强制保留规则),这天然地导致了数据完整性概念的加强。
  • 多父级支持: 与层级模型最大的不同在于,这个模型允许表示多父关系,解决了数据冗余和更新异常的问题。

网状模型的劣势:为什么它最终被取代?

尽管网状模型在性能上表现出色,但它也有明显的局限性,这也正是为什么在 20 世纪 80 年代以后,关系型数据库逐渐成为主流的原因:

  • 结构极其复杂: 该数据库的模式或结构本质上非常复杂,因为所有的记录都是通过使用指针来维护的。对于普通用户来说,想象数据的 3D 结构是非常困难的。
  • 操作导航复杂: 由于使用指针进行导航,导致存在操作异常,进而使得开发变得复杂。程序员必须非常了解数据的具体存储路径。
  • 用户不友好: 该模型的设计或结构对最终用户并不友好。普通的业务人员很难写出查询代码,通常需要专业的程序员。
  • 缺乏查询优化: 该模型没有任何自动查询优化的空间。系统在很大程度上依赖程序员编写的路径效率。
  • 结构独立性差: 尽管网状数据库模型能够实现数据独立性,但该模型未能实现结构独立性。如果你需要改变数据的结构(例如,把一个记录类型从一个系移到另一个系),你可能需要重写整个应用程序。

数据关系表示的最佳实践

在我们的实际应用中,网状模型告诉我们如何使用图结构来表示数据关系。它允许我们将复杂的业务逻辑直接映射到数据库结构中。

实战见解: 虽然我们在今天主要使用 SQL 数据库,但理解网状模型对于理解图数据库(如 Neo4j)以及现代 SQL 中的递归查询非常有帮助。当你在 SQL 中使用自连接或 CTE(公用表表达式)来处理层级数据时,你实际上是在用关系型的代码模拟网状模型的逻辑。

总结与展望

通过这篇文章,我们深入探讨了 DBMS 中的网状模型。我们回顾了它的历史起源,分析了它如何通过“系”和图结构解决多对多关系,并学习了它的优缺点。

核心要点回顾:

  • 网状模型使用图结构,支持多对多(M:N)关系,是层级模型的进化版。
  • 核心概念是“所有者记录”和“成员记录”,它们共同组成了“系”。
  • 它的主要优势是访问速度快和数据完整性高,适合处理复杂关系。
  • 它的主要劣势是结构复杂、缺乏结构独立性以及对用户/开发者不够友好。

作为开发者,即使我们在日常工作中不再直接使用 IDMS 或 Raima Database Manager 这样的网状数据库,理解这种模型依然至关重要。它提醒我们,数据结构的设计必须服务于业务逻辑的复杂性。

下一步建议:

在下一篇文章中,我们将探讨关系型数据库模型,看看它是如何通过“表”和“外键”将我们从复杂的指针导航中解放出来的,同时也要看看它为此付出了什么代价(性能)。我们将比较 SQL 的声明式查询与网状模型的导航式查询,看看你的应用究竟适合哪一种风格。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/47809.html
点赞
0.00 平均评分 (0% 分数) - 0