分布式 DBMS - 快速指南


分布式 DBMS - 概念

为了任何组织的正常运作,都需要一个维护良好的数据库。不久前,数据库本质上是集中式的。然而,随着全球化的加剧,组织往往在全球范围内实现多元化。他们可能选择将数据分布在本地服务器而不是中央数据库上。由此,出现了分布式数据库的概念。

本章概述了数据库和数据库管理系统(DBMS)。数据库是相关数据的有序集合。DBMS 是一个用于数据库的软件包。有关 DBMS 的详细研究,请参阅我们名为“学习 DBMS”的教程。在本章中,我们修改了主要概念,以便能够轻松地完成DDBMS的学习。涵盖的三个主题是数据库模式、数据库类型和数据库操作。

数据库及数据库管理系统

数据库是为特定目的而构建的相关数据的有序集合。数据库可以被组织为多个表的集合,其中表代表现实世界的元素或实体。每个表都有几个不同的字段,代表实体的特征。

例如,公司数据库可能包括项目、员工、部门、产品和财务记录的表格。Employee 表中的字段可以是 Name、Company_Id、Date_of_Joining 等。

数据库管理系统是能够创建和维护数据库的程序的集合。DBMS 作为软件包提供,有助于数据库中数据的定义、构建、操作和共享。数据库的定义包括数据库结构的描述。数据库的构建涉及在任何存储介质中实际存储数据。操作是指从数据库中检索信息、更新数据库并生成报告。数据共享有利于不同用户或程序访问数据。

DBMS 应用领域示例

  • 自动柜员机
  • 火车票预订系统
  • 员工管理系统
  • 学生信息系统

DBMS 包的示例

  • MySQL
  • 甲骨文
  • SQL服务器
  • 数据库
  • 福克斯Pro
  • PostgreSQL 等

数据库模式

数据库模式是对数据库的描述,在数据库设计期间指定并且不经常更改。它定义了数据的组织、数据之间的关系以及与数据相关的约束。

数据库通常通过三模式架构ANSISPARC 架构来表示。该架构的目标是将用户应用程序与物理数据库分离。这三个级别是 -

  • 具有内部架构的内部级别- 它描述了数据库的物理结构、内部存储的详细信息和访问路径。

  • 具有概念模式的概念级别- 它描述了整个数据库的结构,同时隐藏了数据物理存储的细节。这说明了实体、属性及其数据类型和约束、用户操作和关系。

  • 具有外部模式或视图的外部或视图级别- 它描述与特定用户或一组用户相关的数据库部分,同时隐藏数据库的其余部分。

数据库管理系统的类型

DBMS 有四种类型。

分层数据库管理系统

在分层 DBMS 中,建立了数据库中数据之间的关系,以便一个数据元素作为另一个数据元素的从属存在。数据元素具有父子关系,并使用“树”数据结构进行建模。这些都非常快速且简单。

分层数据库管理系统

网络数据库管理系统

网络 DBMS,其中数据库中的数据之间的关系是网络形式的多对多类型。由于存在大量的多对多关系,结构通常比较复杂。网络 DBMS 使用“图”数据结构进行建模。

网络数据库管理系统

关系型数据库管理系统

在关系数据库中,数据库以关系的形式表示。每个关系建模一个实体并表示为值表。在关系或表中,一行称为元组,表示单个记录。列称为字段或属性,表示实体的特征属性。RDBMS 是最流行的数据库管理系统。

例如 - 学生关系 -

关系型数据库管理系统

面向对象的数据库管理系统

面向对象的DBMS源自面向对象编程范式的模型。它们有助于表示数据库中存储的一致数据以及执行程序中发现的瞬态数据。他们使用称为对象的小型可重用元素。每个对象都包含一个数据部分和一组对数据进行操作的操作。对象及其属性是通过指针访问的,而不是存储在关系表模型中。

例如 - 简化的银行账户面向对象数据库 -

面向对象的数据库管理系统

分布式数据库管理系统

分布式数据库是分布在计算机网络或互联网上的一组互连数据库。分布式数据库管理系统(DDBMS)管理分布式数据库并提供使数据库对用户透明的机制。在这些系统中,数据有意分布在多个节点之间,以便组织的所有计算资源都可以得到最佳利用。

DBMS 上的操作

数据库的四个基本操作是创建、检索、更新和删除。

  • 创建数据库结构并用数据填充它 - 数据库关系的创建涉及指定数据结构、数据类型和要存储的数据的约束。

    示例- 创建学生表的 SQL 命令 -

CREATE TABLE STUDENT ( 
   ROLL INTEGER PRIMARY KEY, 
   NAME VARCHAR2(25), 
   YEAR INTEGER, 
   STREAM VARCHAR2(10) 
);
  • 一旦定义了数据格式,实际数据就按照该格式存储在某种存储介质中。

    将单个元组插入学生表的示例SQL 命令 -

INSERT INTO STUDENT ( ROLL, NAME, YEAR, STREAM) 
VALUES ( 1, 'ANKIT JHA', 1, 'COMPUTER SCIENCE');
  • 从数据库中检索信息 – 检索信息通常涉及选择表的子集或在完成一些计算后显示表中的数据。这是通过查询表来完成的。

    示例- 要检索计算机科学流的所有学生的姓名,需要执行以下 SQL 查询 -

SELECT NAME FROM STUDENT 
WHERE STREAM = 'COMPUTER SCIENCE';
  • 更新存储的信息并修改数据库结构 - 更新表涉及用新值更改现有表行中的旧值。

    示例- 将流从电子更改为电子和通信的 SQL 命令 -

UPDATE STUDENT 
SET STREAM = 'ELECTRONICS AND COMMUNICATIONS' 
WHERE STREAM = 'ELECTRONICS';
  • 修改数据库意味着改变表的结构。然而,表的修改受到许多限制。

    示例- 要添加新字段或列,例如 Student 表的地址,我们使用以下 SQL 命令 -

ALTER TABLE STUDENT 
ADD ( ADDRESS VARCHAR2(50) ); 
  • 删除存储的信息或删除整个表 - 删除特定信息涉及从表中删除满足特定条件的选定行。

    示例- 要删除当前年级的所有学生,当他们昏倒时,我们使用 SQL 命令 -

DELETE FROM STUDENT 
WHERE YEAR = 4;
  • 或者,可以从数据库中删除整个表。

    示例- 要完全删除学生表,使用的 SQL 命令是 -

DROP TABLE STUDENT;

分布式 DBMS - 分布式数据库

本章介绍DDBMS的概念。在分布式数据库中,存在多个数据库,这些数据库在地理上可能分布在世界各地。分布式 DBMS 以某种方式管理分布式数据库,使其对用户来说就像一个数据库。在本章的后面部分,我们将继续研究导致分布式数据库的因素、其优点和缺点。

分布式数据库是多个互连数据库的集合,这些数据库物理上分布在通过计算机网络进行通信的各个位置。

特征

  • 集合中的数据库在逻辑上是相互关联的。它们通常代表单个逻辑数据库。

  • 数据物理存储在多个站点。每个站点中的数据都可以由独立于其他站点的 DBMS 进行管理。

  • 站点中的处理器通过网络连接。它们没有任何多处理器配置。

  • 分布式数据库不是松散连接的文件系统。

  • 分布式数据库包含事务处理,但它并不等同于事务处理系统。

分布式数据库管理系统

分布式数据库管理系统 (DDBMS) 是一种集中式软件系统,它管理分布式数据库,就像所有数据库都存储在一个位置一样。

特征

  • 它用于创建、检索、更新和删除分布式数据库。

  • 它定期同步数据库并提供访问机制,从而使分布对用户变得透明。

  • 它确保在任何站点修改的数据都得到普遍更新。

  • 它用于大量用户同时处理和访问大量数据的应用领域。

  • 它是为异构数据库平台而设计的。

  • 它维护数据库的机密性和数据完整性。

鼓励 DDBMS 的因素

以下因素鼓励转向 DDBMS -

  • 组织单位的分布式性质- 当前大多数组织都细分为物理分布在全球各地的多个单位。每个单元都需要自己的本地数据集。因此,组织的整体数据库变得分布式。

  • 数据共享的需求- 多个组织单位经常需要相互通信并共享其数据和资源。这需要以同步方式使用通用数据库或复制数据库。

  • 支持 OLTP 和 OLAP - 在线事务处理 (OLTP) 和在线分析处理 (OLAP) 在可能具有公共数据的多样化系统上工作。分布式数据库系统通过提供同步数据来帮助这两种处理。

  • 数据库恢复- DDBMS 中使用的常用技术之一是跨不同站点的数据复制。如果任何站点的数据库损坏,数据复制会自动帮助数据恢复。在重建受损站点时,用户可以访问其他站点的数据。因此,数据库故障对于用户来说可能变得几乎不明显。

  • 支持多种应用软件- 大多数组织使用各种应用软件,每种软件都有其特定的数据库支持。DDBMS 提供了在不同平台之间使用相同数据的统一功能。

分布式数据库的优点

以下是分布式数据库相对于集中式数据库的优势。

模块化开发- 如果系统需要在集中式数据库系统中扩展到新地点或新单元,则需要付出大量努力并破坏现有功能。然而,在分布式数据库中,工作只需要向新站点添加新计算机和本地数据,最后将它们连接到分布式系统,而不会中断当前功能。

更可靠- 如果数据库发生故障,整个集中式数据库系统就会停止。然而,在分布式系统中,当某个组件发生故障时,系统继续运行可能会降低性能。因此DDBMS更加可靠。

更好的响应- 如果数据以有效的方式分发,则可以从本地数据本身满足用户请求,从而提供更快的响应。另一方面,在集中式系统中,所有查询都必须通过中央计算机进行处理,这增加了响应时间。

较低的通信成本- 在分布式数据库系统中,如果数据位于主要使用的本地,则可以最小化数据操作的通信成本。这在集中式系统中是不可行的。

分布式数据库的困境

以下是与分布式数据库相关的一些逆境。

  • 需要复杂且昂贵的软件- DDBMS 需要复杂且通常昂贵的软件来提供跨多个站点的数据透明度和协调。

  • 处理开销- 即使是简单的操作也可能需要大量通信和额外计算才能提供跨站点数据的一致性。

  • 数据完整性- 在多个站点更新数据的需要会带来数据完整性问题。

  • 数据分布不当的开销- 查询的响应能力在很大程度上取决于正确的数据分布。不正确的数据分发通常会导致对用户请求的响应非常缓慢。

分布式 DBMS - 数据库环境

在本教程的这一部分中,我们将研究有助于设计分布式数据库环境的不同方面。本章从分布式数据库的类型开始。分布式数据库可以分为同构数据库和异构数据库,并进一步划分。本章的下一节将讨论分布式架构,即客户端-服务器、点对点和多 DBMS。最后,介绍了不同的设计方案,例如复制和分段。

分布式数据库的类型

分布式数据库大致可分为同构分布式数据库环境和异构分布式数据库环境,每种分布式数据库环境又可进一步细分,如下图所示。

分布式数据库环境

同构分布式数据库

在同构分布式数据库中,所有站点都使用相同的 DBMS 和操作系统。它的属性是 -

  • 这些网站使用非常相似的软件。

  • 这些站点使用相同的 DBMS 或来自同一供应商的 DBMS。

  • 每个站点都了解所有其他站点,并与其他站点合作处理用户请求。

  • 通过单个接口访问数据库,就好像它是单个数据库一样。

同构分布式数据库的类型

有两种类型的同构分布式数据库 -

  • 自治- 每个数据库都是独立的,可以独立运行。它们由控制应用程序集成,并使用消息传递来共享数据更新。

  • 非自治- 数据分布在同构节点上,中央或主 DBMS 协调站点之间的数据更新。

异构分布式数据库

在异构分布式数据库中,不同站点具有不同的操作系统、DBMS产品和数据模型。它的属性是 -

  • 不同的站点使用不同的模式和软件。

  • 该系统可能由各种 DBMS 组成,如关系型、网络型、分层型或面向对象型。

  • 由于模式不同,查询处理很复杂。

  • 由于软件不同,交易处理很复杂。

  • 一个站点可能不知道其他站点,因此在处理用户请求方面的合作有限。

异构分布式数据库的类型

  • 联合- 异构数据库系统本质上是独立的并集成在一起,以便它们作为单个数据库系统运行。

  • 非联合- 数据库系统采用中央协调模块,通过该模块访问数据库。

分布式 DBMS 架构

DDBMS 架构通常根据三个参数来开发 -

  • 分布- 它说明数据在不同站点之间的物理分布。

  • 自治性- 它表示数据库系统的控制权分布以及每个组成的 DBMS 可以独立运行的程度。

  • 异构性- 指数据模型、系统组件和数据库的一致性或相异性。

建筑模型

一些常见的架构模型是 -

  • DDBMS 的客户端-服务器架构
  • DDBMS 的对等架构
  • 多DBMS架构

DDBMS 的客户端-服务器架构

这是一个两级架构,其中功能分为服务器和客户端。服务器功能主要包括数据管理、查询处理、优化和事务管理。客户端功能主要包括用户界面。但是,它们具有一致性检查和事务管理等功能。

两种不同的客户端-服务器架构是 -

  • 单服务器多客户端
  • 多服务器多客户端(如下图所示)
服务器架构

DDBMS 的点对点架构

在这些系统中,每个对等点既充当客户端又充当服务器,用于传递数据库服务。同伴与其他同伴共享资源并协调他们的活动。

这种架构通常有四个级别的模式 -

  • 全局概念模式- 描述数据的全局逻辑视图。

  • 本地概念架构- 描述每个站点的逻辑数据组织。

  • 本地内部架构- 描述每个站点的物理数据组织。

  • 外部模式- 描述数据的用户视图。

点对点架构

多DBMS架构

这是由两个或多个自治数据库系统集合而成的集成数据库系统。

多 DBMS 可以通过六个级别的模式来表达 -

  • 多数据库视图级别- 描述由集成分布式数据库的子集组成的多个用户视图。

  • 多数据库概念级别- 描述由全局逻辑多数据库结构定义组成的集成多数据库。

  • 多数据库内部级别- 描述不同站点之间的数据分布以及多数据库到本地数据的映射。

  • 本地数据库视图级别- 描述本地数据的公共视图。

  • 本地数据库概念级别- 描述每个站点的本地数据组织。

  • 本地数据库内部级别- 描述每个站点的物理数据组织。

多 DBMS 有两种设计替代方案 -

  • 具有多数据库概念级别的模型。
  • 没有多数据库概念级别的模型。
多数据库概念级别

没有多数据库概念级别

设计方案

DDBMS 中表的分布设计替代方案如下:

  • 非复制、非碎片化
  • 完全复制
  • 部分复制
  • 支离破碎
  • 混合

非复制、非碎片

在这种设计方案中,不同的桌子放置在不同的地点。数据的放置位置应靠近最常使用的站点。它最适合连接位于不同站点的表中的信息所需的查询百分比较低的数据库系统。如果采用适当的分发策略,那么这种设计方案有助于降低数据处理过程中的通信成本。

完全复制

在此设计方案中,在每个站点都存储所有数据库表的一份副本。由于每个站点都有自己的整个数据库副本,因此查询速度非常快,所需的通信成本可以忽略不计。相反,数据的大量冗余在更新操作时需要巨大的成本。因此,这适用于需要处理大量查询而数据库更新次数较少的系统。

部分复制

表的副本或表的一部分存储在不同的站点。表的分配是根据访问频率进行的。这考虑到了以下事实:访问表的频率因站点而异。表(或部分)的副本数量取决于访问查询执行的频率以及生成访问查询的站点。

支离破碎

在这种设计中,一个表被分为两个或多个称为片段或分区的片段,每个片段可以存储在不同的站点。这考虑到这样的事实:很少发生给定站点需要表中存储的所有数据的情况。此外,碎片增加了并行性并提供了更好的灾难恢复。这里,系统中每个分片只有一份副本,即没有冗余数据。

三种碎片技术是 -

  • 垂直碎片化
  • 水平碎片化
  • 混合碎片

混合分布

这是碎片和部分复制的组合。在这里,表最初以任何形式(水平或垂直)进行碎片化,然后根据访问碎片的频率在不同站点之间部分复制这些碎片。

分布式 DBMS - 设计策略

在上一章中,我们介绍了不同的设计方案。在本章中,我们将研究有助于采用设计的策略。这些策略大致可分为复制策略和碎片策略。然而,在大多数情况下,会结合使用两者。

数据复制

数据复制是在两个或更多站点存储数据库的单独副本的过程。它是一种流行的分布式数据库容错技术。

数据复制的优点

  • 可靠性- 如果任何站点出现故障,数据库系统将继续工作,因为另一个站点有可用的副本。

  • 减少网络负载- 由于可以使用数据的本地副本,因此可以在减少网络使用的情况下完成查询处理,特别是在黄金时段。数据更新可以在非黄金时段进行。

  • 更快的响应- 数据本地副本的可用性确保快速查询处理,从而确保快速响应时间。

  • 更简单的事务- 事务需要更少数量的位于不同站点的表的连接以及最少的网络协调。因此,它们本质上变得更简单。

数据复制的缺点

  • 增加的存储要求- 维护多个数据副本与增加的存储成本相关。所需的存储空间是集中式系统所需存储空间的倍数。

  • 数据更新的成本和复杂性增加- 每次更新数据项时,更新都需要反映在不同站点的所有数据副本中。这需要复杂的同步技术和协议。

  • 不良应用程序 - 数据库耦合- 如果不使用复杂的更新机制,消除数据不一致需要在应用程序级别进行复杂的协调。这会导致不良的应用程序——数据库耦合。

一些常用的复制技术是 -

  • 快照复制
  • 近实时复制
  • 拉复制

碎片化

碎片是将一个表分成一组较小的表的任务。表的子集称为片段。碎片可以分为三种类型:水平碎片、垂直碎片和混合碎片(水平和垂直的组合)。水平分片又可以分为两种技术:初级水平分片和派生水平分片。

碎片应该以某种方式完成,以便可以从碎片重建原始表。这是必要的,以便在需要时可以从片段重建原始表。这一要求称为“可重构性”。

碎片化的优点

  • 由于数据存储在靠近使用地点的位置,因此提高了数据库系统的效率。

  • 本地查询优化技术足以满足大多数查询,因为数据在本地可用。

  • 由于站点上无法获取无关数据,因此可以维护数据库系统的安全性和隐私性。

碎片化的缺点

  • 当需要不同分片的数据时,访问速度可能会很低。

  • 在递归碎片的情况下,重建工作将需要昂贵的技术。

  • 不同站点中缺乏数据备份副本可能会导致数据库在某个站点出现故障时失效。

垂直碎片化

在垂直分段中,表的字段或列被分组为分段。为了保持可重构性,每个片段应包含表的主键字段。垂直碎片可用于加强数据的隐私性。

例如,让我们考虑大学数据库在具有以下模式的学生表中保存所有注册学生的记录。

学生

注册号 姓名 课程 地址 学期 费用 分数

现在,费用详细信息保存在帐户部分。在这种情况下,设计者将数据库分段如下 -

CREATE TABLE STD_FEES AS 
   SELECT Regd_No, Fees 
   FROM STUDENT;

水平碎片化

水平分段根据一个或多个字段的值对表的元组进行分组。水平碎片也应符合可重构性规则。每个水平片段必须具有原始基表的所有列。

例如,在学生模式中,如果需要在计算机科学学院维护计算机科学课程所有学生的详细信息,那么设计者将水平分段数据库,如下所示 -

CREATE COMP_STD AS 
   SELECT * FROM STUDENT  
   WHERE COURSE = "Computer Science";

混合碎片

在混合分段中,使用水平和垂直分段技术的组合。这是最灵活的分段技术,因为它生成的片段具有最少的无关信息。然而,重建原始表通常是一项昂贵的任务。

混合碎片可以通过两种替代方式完成 -

  • 首先,生成一组水平片段;然后从一个或多个水平片段生成垂直片段。

  • 首先,生成一组垂直片段;然后从一个或多个垂直片段生成水平片段。

DDBMS - 分布透明度

分布透明性是分布式数据库的属性,通过它,分布的内部细节对用户隐藏。DDBMS 设计者可以选择对表进行分段、复制分段并将它们存储在不同的站点。然而,由于用户忽略了这些细节,他们发现分布式数据库像任何集中式数据库一样易于使用。

分配透明度的三个维度是 -

  • 位置透明
  • 碎片透明度
  • 复制透明度

位置透明度

位置透明性确保用户可以查询任何表或表片段,就像它们本地存储在用户站点中一样。表或其片段存储在分布式数据库系统中的远程站点这一事实对于最终用户来说应该是完全不知道的。远程站点的地址和访问机制是完全隐藏的。

为了实现位置透明性,DDBMS 应该能够访问更新且准确的数据字典和包含数据位置详细信息的 DDBMS 目录。

碎片透明

碎片透明度使用户能够查询任何表,就像它没有碎片一样。因此,它隐藏了这样一个事实:用户正在查询的表实际上是一个片段或某些片段的联合。它还掩盖了碎片位于不同地点的事实。

这有点类似于 SQL 视图的用户,用户可能不知道他们正在使用表的视图而不是表本身。

复制透明度

复制透明度确保数据库的复制对用户隐藏。它使用户能够查询表,就好像该表只存在一个副本一样。

复制透明度与并发透明度和故障透明度相关。每当用户更新数据项时,更新都会反映在表的所有副本中。然而,用户不应该知道该操作。这就是并发透明度。此外,在站点发生故障的情况下,用户仍然可以使用复制副本继续进行查询,而无需知道故障。这就是失败透明度。

透明胶片的组合

在任何分布式数据库系统中,设计者应该确保在相当大的程度上维持所有规定的透明度。设计者可以选择对表进行碎片化、复制并将它们存储在不同的站点;最终用户都忽略了这一点。然而,完全的分配透明度是一项艰巨的任务,需要大量的设计工作。

分布式 DBMS - 数据库控制

数据库控制是指执行法规的任务,以便向数据库的真实用户和应用程序提供正确的数据。为了向用户提供正确的数据,所有数据都应符合数据库中定义的完整性约束。此外,应屏蔽数据以防止未经授权的用户使用,以维护数据库的安全和隐私。数据库控制是数据库管理员(DBA)的主要任务之一。

数据库控制的三个维度是 -

  • 验证
  • 访问权
  • 完整性约束

验证

在分布式数据库系统中,身份验证是只有合法用户才能访问数据资源的过程。

身份验证可以在两个级别上强制执行 -

  • 控制对客户端计算机的访问- 在此级别,登录到为数据库服务器提供用户界面的客户端计算机时,用户访问受到限制。最常见的方法是用户名/密码组合。然而,更复杂的方法(例如生物特征认证)可用于高安全性数据。

  • 控制对数据库软件的访问- 在此级别,数据库软件/管理员向用户分配一些凭据。用户使用这些凭据获得对数据库的访问权限。其中一种方法是在数据库服务器中创建登录帐户。

访问权

用户的访问权限是指授予用户有关 DBMS 操作的权限,例如创建表、删除表、添加/删除/更新表中的元组或查询表的权限。

在分布式环境中,由于表数量较多,用户数量较多,为用户分配单独的访问权限是不可行的。因此,DDBMS 定义了某些角色。角色是数据库系统中具有某些特权的构造。定义不同的角色后,将为各个用户分配这些角色之一。通常,角色的层次结构是根据组织的权限和责任层次结构来定义的。

例如,以下 SQL 语句创建角色“Accountant”,然后将该角色分配给用户“ABC”。

CREATE ROLE ACCOUNTANT; 
GRANT SELECT, INSERT, UPDATE ON EMP_SAL TO ACCOUNTANT; 
GRANT INSERT, UPDATE, DELETE ON TENDER TO ACCOUNTANT; 
GRANT INSERT, SELECT ON EXPENSE TO ACCOUNTANT; 
COMMIT; 
GRANT ACCOUNTANT TO ABC; 
COMMIT;

语义完整性控制

语义完整性控制定义并强制执行数据库系统的完整性约束。

完整性约束如下 -

  • 数据类型完整性约束
  • 实体完整性约束
  • 参照完整性约束

数据类型完整性约束

数据类型约束限制了可应用于具有指定数据类型的字段的值范围和操作类型。

例如,假设表“HOSTEL”具有三个字段 - 旅馆编号、旅馆名称和容量。宿舍编号应以大写字母“H”开头,且不能为NULL,且容量不能超过150。可以使用以下SQL命令进行数据定义 -

CREATE TABLE HOSTEL ( 
   H_NO VARCHAR2(5) NOT NULL, 
   H_NAME VARCHAR2(15), 
   CAPACITY INTEGER, 
   CHECK ( H_NO LIKE 'H%'), 
   CHECK ( CAPACITY <= 150) 
); 

实体完整性控制

实体完整性控制强制执行规则,以便每个元组都可以与其他元组唯一地标识。为此定义了主键。主键是一组可以唯一标识元组的最小字段。实体完整性约束规定表中的两个元组不能具有相同的主键值,并且作为主键一部分的字段不能具有 NULL 值。

例如,在上面的宿舍表中,可以通过以下 SQL 语句将宿舍编号指定为主键(忽略检查) -

CREATE TABLE HOSTEL ( 
   H_NO VARCHAR2(5) PRIMARY KEY, 
   H_NAME VARCHAR2(15), 
   CAPACITY INTEGER 
); 

参照完整性约束

参照完整性约束规定了外键的规则。外键是数据表中的一个字段,它是相关表的主键。引用完整性约束规定了外键字段的值应该在引用表的主键值之间或者完全为 NULL 的规则。

例如,让我们考虑一个学生表,学生可能选择住在宿舍里。为此,宿舍表的主键应作为外键包含在学生表中。以下 SQL 语句包含了这一点 -

CREATE TABLE STUDENT (  
   S_ROLL INTEGER PRIMARY KEY, 
   S_NAME VARCHAR2(25) NOT NULL, 
   S_COURSE VARCHAR2(10), 
   S_HOSTEL VARCHAR2(5) REFERENCES HOSTEL 
); 

用于查询优化的关系代数

当发出查询时,首先对其进行扫描、解析和验证。然后创建查询的内部表示,例如查询树或查询图。然后设计替代执行策略来从数据库表中检索结果。为查询处理选择最合适的执行策略的过程称为查询优化。

DDBMS 中的查询优化问题

在DDBMS中,查询优化是一项至关重要的任务。由于以下因素,替代策略的数量可能呈指数级增加,因此复杂性很高 -

  • 存在许多碎片。
  • 片段或表在各个站点的分布。
  • 通信链路的速度。
  • 本地处理能力的差异。

因此,在分布式系统中,目标通常是找到一种良好的查询处理执行策略,而不是最佳策略。执行查询的时间是以下各项的总和 -

  • 是时候将查询传递给数据库了。
  • 执行本地查询片段的时间。
  • 是时候收集来自不同站点的数据了。
  • 是时候向应用程序显示结果了。

查询处理

查询处理是从查询放置到显示查询结果的所有活动的集合。步骤如下图所示 -

查询处理

关系代数

关系代数定义了关系数据库模型的基本操作集。一系列关系代数运算形成关系代数表达式。该表达式的结果表示数据库查询的结果。

基本操作是 -

  • 投影
  • 选择
  • 联盟
  • 路口
  • 加入

投影

投影操作显示表的字段的子集。这给出了表的垂直分区。

关系代数语法

π<AttributeList>(<TableName>)

例如,让我们考虑以下学生数据库 -

学生
卷号 姓名 课程 学期 性别
2 阿米特·普拉萨德 BCA 1 男性
4 瓦尔莎·蒂瓦里 BCA 1 女性
5 阿西夫·阿里 MCA 2 男性
6 乔·华莱士 MCA 1 男性
8 希瓦尼·艾扬格 BCA 1 女性

如果我们想显示所有学生的姓名和课程,我们将使用以下关系代数表达式 -

πName,Course(STUDENT)

选择

选择操作显示满足特定条件的表的元组子集。这给出了表的水平分区。

关系代数语法

σ<Conditions>(<TableName>)

例如,在学生表中,如果我们想显示所有选择 MCA 课程的学生的详细信息,我们将使用以下关系代数表达式 -

σCourse="BCA"(STUDENT)

投影和选择操作的组合

对于大多数查询,我们需要投影和选择操作的组合。有两种方法可以编写这些表达式 -

  • 使用投影和选择操作的顺序。
  • 使用重命名操作来生成中间结果。

例如,显示 BCA 课程所有女学生的姓名 -

  • 使用投影和选择操作序列的关系代数表达式