数据库模型
正式来说,**“数据库”**指的是一组相关数据及其组织方式。通常,这些数据的访问是由一个名为“数据库管理系统”(DBMS)集成软件套件提供的,它允许用户与一个或多个数据库交互,并提供对数据库中所有数据的访问。DBMS提供了各种功能,用于输入、存储和检索信息,并提供了管理信息组织方式的方法。由于两者之间存在密切的关系,“数据库”一词经常被随意地用来指代数据库本身及其用于操作的数据库管理系统。数据库及其DBMS都遵循特定数据库模型的原则。维基百科将数据库模型定义为一种数据模型,它确定数据库的逻辑结构,并从根本上决定数据如何存储、组织和操作。
早期的两种主要导航数据模型是层次模型,由IBM的IMS系统代表,以及CODASYL网络模型在IDMS等产品中得到实现。
1970年,埃德加·F·科德首次提出关系模型,与上述传统背道而驰,坚持认为应用程序应该通过数据内容而不是通过链接来查找数据。关系模型使用一系列类似于账簿的表格,用于存储不同类型的实体数据。直到20世纪80年代中期,计算机硬件才变得足够强大,从而使关系系统(DBMS以及应用程序)得以广泛部署。
然而,到了1990年代初期,关系型系统在所有大规模数据处理应用中占据了主导地位,截至2015年,它们仍然占据主导地位。关系型模型的主导数据库语言——标准化的SQL,也影响了其他数据模型的数据库语言。1980年代开发了对象数据库,以克服对象-关系不匹配的不便,这导致了“后关系型”一词的出现,也推动了混合对象-关系数据库的发展。2000年代后期出现的新一代后关系型数据库被称为NoSQL数据库,引入了快速键值存储。
层次模型
层次数据模型将数据组织成树形结构。存在父数据段和子数据段的层次结构。这种结构意味着一条记录可能有重复的信息,通常在子数据段中。数据是一系列记录,每条记录都有一组字段值。它将特定记录的所有实例作为一种记录类型收集在一起。这些记录类型相当于关系模型中的表,而单个记录相当于行。为了在这些记录类型之间创建链接,层次模型使用父-子关系。这是记录类型之间的 1:M 映射。这是通过使用树来实现的,就像关系模型中使用的集合论,是从数学中“借用”的。例如,一个组织可能会存储关于员工的信息,如姓名、员工编号、部门、工资。该组织还可能存储关于员工子女的信息,如姓名和出生日期。员工和子女数据形成一个层次结构,其中员工数据代表父段,子女数据代表子段。如果一名员工有三个子女,那么就会有三个子段与一个员工段相关联。在层次数据库中,父-子关系是一对多的。这限制了子段只能有一个父段。层次型 DBMS 从 20 世纪 60 年代末随着 IBM 的信息管理系统(IMS)DBMS 的推出而流行,一直持续到 70 年代。
网络模型
网络数据模型的流行与层次数据模型的流行相重合。有些数据用每个子节点有多个父节点来建模更自然。因此,网络模型允许对数据中的多对多关系进行建模。1971 年,数据系统语言会议(CODASYL)正式定义了网络模型。网络模型中的基本数据建模结构是集合结构。一个集合由一个所有者记录类型、一个集合名称和一个成员记录类型组成。一个成员记录类型可以在多个集合中担任该角色,因此支持多父节点的概念。一个所有者记录类型也可以在另一个集合中作为成员或所有者。数据模型是一个简单的网络,可能存在链接和交叉记录类型(IDMS 称为连接记录)以及它们之间的集合。因此,完整的关系网络由几个成对的集合表示;在每个集合中,某些(一个)记录类型是所有者(在网络箭头的尾部),一个或多个记录类型是成员(在关系箭头的头部)。通常,一个集合定义了一对多的关系,尽管一对一也是允许的。CODASYL 网络模型基于数学集合论。
关系模型
RDBMS(关系型数据库管理系统)数据库基于 E.F.科德开发的关系模型。关系型数据库允许定义数据结构、存储和检索操作以及完整性约束。在这样的数据库中,数据及其之间的关系以表格形式组织。一个表是记录的集合,表中的每个记录包含相同的字段。
关系表的属性包括:
- 值是原子的
- 每行都是唯一的
- 列值属于同一种类型
- 列的顺序无关紧要
- 行的顺序无关紧要
- 每个列都有唯一的名称
某些字段可以被指定为键,这意味着对该字段特定值的搜索将使用索引来加快速度。当两个不同表中的字段取值来自同一集合时,可以通过匹配这些字段中的值执行连接操作,以选择两个表中的相关记录。通常(但并非总是)这些字段在两个表中具有相同的名称。例如,“订单”表可能包含(客户 ID,产品代码)对,“产品”表可能包含(产品代码,价格)对,因此要计算给定客户的账单,您可以通过在两个表的产品代码字段上进行连接,对该客户订购的所有产品的价格求和。这可以扩展到在多个字段上连接多个表。由于这些关系仅在检索时指定,关系型数据库被归类为动态数据库管理系统。关系型数据库模型基于关系代数。
面向对象模型
对象数据库管理系统为面向对象编程语言添加了数据库功能。它们带来的远不止编程语言对象的持久存储。对象数据库管理系统扩展了 C++、Smalltalk 和 Java 等面向对象编程语言的语义,以提供全功能的数据库编程能力,同时保持与原生语言的兼容性。这种方法的一个主要优点是将应用程序和数据库开发统一到一个无缝的数据模型和语言环境中。因此,应用程序需要更少的代码,使用更自然的数据建模,并且代码库更易于维护。对象开发人员只需付出少量额外的努力就可以编写完整的数据库应用程序。
根据 Rao(1994)的说法,“面向对象数据库(OODB)范式是面向对象编程语言(OOPL)系统和持久系统的结合。OODB 的强大之处在于对数据库中的持久数据和执行程序中的瞬态数据进行无缝处理。”
与关系型数据库管理系统不同,在关系型数据库管理系统中,复杂的数据结构必须被展平以适应表,或者从这些表中连接起来以形成内存中的结构,对象数据库管理系统在存储或检索相互关联的对象的网络或层次结构时没有性能开销。面向对象编程语言对象到数据库对象的这种一对一映射与其他存储方法相比有两个好处:它提供了更高性能的对象管理,并且能够更好地管理对象之间复杂的相互关系。这使得对象数据库管理系统更适合支持诸如金融投资组合风险分析系统、电信服务应用程序、万维网文档结构、设计和制造系统以及医院患者记录系统等具有复杂数据关系的应用程序。
对象/关系模型
对象/关系型数据库管理系统(ORDBMS)为现代信息系统核心的关系型系统增添了新的对象存储能力。这些新的功能集成了对传统字段数据、复杂对象(如时间序列和地理空间数据)以及各种二进制媒体(如音频、视频、图像和小程序)的管理。通过将方法与数据结构封装在一起,ORDBMS 服务器可以执行复杂的分析和数据操作,以搜索和转换多媒体及其他复杂对象。
作为一种演进技术,对象/关系(OR)方法继承了其关系型前辈强大的事务和性能管理特性,以及其面向对象表亲的灵活性。数据库设计人员可以使用熟悉的表格结构和数据定义语言(DDL),同时吸收新的对象管理可能性。ORDBMS 中的查询和过程语言以及调用接口是熟悉的:SQL3、供应商过程语言以及 ODBC、JDBC 和专有调用接口都是 RDBMS 语言和接口的扩展。