理论

关系型数据库管理系统(DBMS)是根据关系模型的设计规则实现的数据存储。这种方法允许根据关系代数对数据进行操作,如投影、选择、连接、集合操作(并集、差集、交集等)等。结合布尔代数(与、或、非、存在等)和其他数学概念,关系代数构建了一个完整的数学系统,包含基本操作、复杂操作以及操作之间的转换规则。数据库管理员(DBA)或应用程序员不需要了解关系代数。但了解您的关系型DBMS基于这一数学基础,并且它有能力将查询转换为多种形式,这是很有帮助的。

数据模型

关系模型将数据结构设计为具有属性(列)和这些关系之间关系的关系(表)。关于现实世界中一个实体的信息存储在表的一行中。然而,必须谨慎使用“现实世界中一个实体”这个术语。我们的智力可能会将一台机器识别为单个飞机。根据信息需求,可能足以将所有信息放入一个名为“飞机”的表的一行中。但在许多情况下,有必要将实体拆分为其组成部分,并将这些部分建模为独立的实体,包括与整体的关系。例如,如果需要关于飞机内每个座位的详细信息,就需要一个第二个表“座位”以及将座位与飞机关联起来的方法。

这种将现实实体的信息分解为复杂数据模型的方式高度依赖于业务概念的信息需求。此外,还有一些独立于任何应用程序的正式要求:生成的数据模型应符合所谓的范式。通常,这些数据模型由大量的表及其之间的关系组成。这种模型不会预先确定应用程序的使用方式;它们是严格描述性的,不会以任何方式限制对数据的访问。

一些基础知识

数据库中的操作不仅必须能够作用于单行,还必须能够作用于行集。关系代数提供了这种可能性。因此,基于关系代数的语言,例如SQL,提供了强大的语法,可以在一个单一命令中操作大量数据。

由于关系代数中的操作可以被不同但逻辑等价的操作所替代,基于关系代数的语言不应预先确定其语法如何映射到操作(执行计划)。该语言应描述“做什么”,而不是“如何做”。注意:这种操作选择不涉及使用或忽略索引

如前所述,关系模型倾向于将对象分解为子对象。在这种情况下以及其他情况下,通常需要从多个表中收集关联信息到一个信息单元中。如果没有参与表和行之间的链接,这是如何可能的呢?答案是:所有连接都是基于实际存储在属性中的值进行的。关系型DBMS必须自行决定如何访问所有相关行:是读取所有可能受影响的行并忽略不相关的行(全表扫描),还是使用某种索引,仅读取符合条件的行。这种基于值的方法甚至允许使用等于运算符以外的操作符,例如:

SELECT * FROM gift JOIN box ON gift.extent < box.extent;

这个命令将所有“gift”记录与所有“box”记录中“extent”更大的记录进行连接(无论“extent”是什么意思)。

Last modified: Tuesday, 28 January 2025, 12:01 PM