主题
第一章 数据库基础概念与系统架构
📖 ⏱️ 预计阅读时长 1 分钟 👑 会员专属
1. 存储体系与磁盘 I/O 基础
数据库之所以被发明出来,从根本上说是为了解决计算机内存容量有限与人类需要持久化保存的数据量日益增长之间的矛盾。在现代信息系统中,几乎所有的业务应用都需要对数据进行可靠的存储和高效的检索。为了达成这一目标,我们必须首先理解计算机存储体系的层次结构以及数据在各层级之间的流转方式,因为这些硬件基础直接决定了数据库在索引设计、缓冲管理、并发控制和故障恢复等方面的架构选择。
初学数据库时,很多读者会把数据库简单理解为“一个装数据的软件”。这种理解只抓住了结果,没有抓住本质。更准确地说,数据库首先是一种把现实世界中的对象、关系、规则和变化组织成可计算结构的方法,其次才是一套软件与硬件协同工作的系统。正因为它既面对真实业务,又依赖底层存储,所以学习数据库必须同时建立两种视角:一种是抽象视角,关注现实对象如何转化为实体、属性和联系;另一种是工程视角,关注数据页如何读写、缓存如何命中、故障如何恢复。若只看到表和语句,后续很多章节会变成机械记忆;若从一开始就把数据库放回“现实问题如何被计算机稳定表达”这一背景中理解,后续内容就会更连贯。
1.1 存储介质的层次结构
现代计算机系统采用分级存储体系结构。这种设计的核心思想是利用不同特性的存储介质组成一个层次分明的体系,在速度、容量和成本之间取得最佳平衡。自上而下,各层级的特征如下:
CPU 寄存器 (Registers):位于处理器内部,速度最快,访问时间在纳秒级别以下,但容量极小,通常只有几十到几百字节。寄存器用于保存 CPU 当前正在执行的指令和运算中直接使用的数据。对于数据库应用层而言,寄存器的使用是完全透明的,程序员无法也不需要直接管理寄存器中的内容。
高速缓存 (Cache):分为 L1、L2、L3 三级,位于 CPU 内部或紧邻 CPU 的位置。缓存利用了计算机科学中的局部性原理来加速数据访问。时间局部性是指刚被访问过的数据在短时间内很可能再次被访问;空间局部性是指与当前访问数据地址相邻的数据在短时间内也很可能被访问。L1 缓存容量最小但速度最快,通常只有几十 KB;L3 缓存容量可达数十 MB,但速度相对较慢。尽管数据库软件本身不能直接控制缓存的内容,但高质量的数据库引擎代码会通过合理的数据布局和访问模式来提高缓存命中率。
主存储器 (Main Memory / RAM):即通常所说的内存,容量在 GB 到 TB 级别,访问时间约为几十纳秒。内存是数据库运行的核心战场。数据库管理系统的缓冲池 (Buffer Pool) 驻留在内存中。所有需要读取或修改的数据页都必须先从磁盘加载到缓冲池中才能被处理。内存属于易失性存储器,即一旦断电,其中的数据将全部丢失。数据库事务的持久性机制正是为了应对这一特性而设计的。缓冲池的大小直接影响数据库的性能。如果缓冲池足够大,大部分数据页可以常驻内存,从而大幅减少对磁盘的访问次数。
固态硬盘 (SSD / Flash Memory):基于闪存技术,没有机械运动部件。SSD 的随机读写性能远优于传统机械硬盘,读取延迟通常在微秒级别。这使得 SSD 成为当前在线事务处理系统 (OLTP) 的主流存储介质。SSD 属于非易失性存储器,数据在断电后不会丢失。其使用寿命受到写入次数的限制(存在写入放大问题),但在现代企业级 SSD 产品中这一问题已经得到了较好的工程解决。
机械硬盘 (HDD / Magnetic Disks):依靠磁头臂在高速旋转的磁盘盘片上进行数据读写。HDD 的主要性能瓶颈在于寻道时间和旋转延迟。寻道时间是指磁头从当前位置移动到目标磁道所需的时间;旋转延迟是指目标扇区旋转到磁头下方所需的时间。这两个因素导致 HDD 的随机读写性能远低于顺序读写性能。然而,HDD 凭借极低的每 GB 存储成本,在数据仓库、日志归档和冷备份等对容量需求大但对访问速度要求不高的场景中仍然广泛使用。
磁带和光盘:容量大、成本极低,但只能进行顺序存取。主要用于企业级的离线归档存储,例如银行保存多年前的历史交易记录,或者作为灾难恢复方案中的最后一道防线。在实际数据库运行中基本不直接参与。
1.2 数据库的 I/O 模型与块存取机制
理解了存储层次结构之后,一个关键的问题随之而来:数据库与磁盘之间的数据交换是如何进行的?
在关系型数据库中,数据的读写并非以行为单位进行,而是以一个固定大小的数据页 (Page) 或数据块 (Block) 作为最小传输单元。不同的数据库系统默认的页大小有所不同,例如 MySQL InnoDB 引擎的默认页大小为 16KB,Oracle 默认为 8KB,PostgreSQL 默认为 8KB。
即便应用程序只需要查询表中的一条记录,DBMS 的存储引擎也会将该记录所在的整个数据页一并从磁盘加载到内存缓冲池中。这种以页为单位的读写方式称为块存取机制。
为什么要采用这种看似浪费的方式?原因主要有两个:第一,对于机械硬盘而言,一次 I/O 操作的主要开销在于寻道和旋转等待,一旦磁头到达了目标位置,顺序读取连续的若干 KB 数据的边际成本非常低;第二,根据空间局部性原理,与被请求的记录物理相邻的记录(即同一页中的其他行)在后续操作中被访问的概率较高,提前加载可以有效减少后续的磁盘 I/O 次数。
在此基础上,缓冲管理器 (Buffer Manager) 在内存中维护一个缓冲池,用于缓存最近使用过的数据页。当某个数据页被请求时,缓冲管理器首先检查该页是否已经在缓冲池中。如果在(称为缓冲命中),则直接返回内存中的数据;如果不在(称为缓冲未命中),则需要从磁盘读取该页,并可能需要通过页面置换算法(如 LRU,即最近最少使用算法)淘汰缓冲池中某个不再活跃的页以腾出空间。
理解了以数据页为核心的 I/O 模型后,后续学习 B 加树索引为何能有效减少磁盘 I/O、Hash 索引为何不支持范围查询、以及聚簇索引的设计原理时,就会自然得多。
2. 数据管理技术的历史演进
人类对数据的管理方式经历了从原始到成熟的渐进过程。了解这段历史有助于深入理解数据库系统各项核心特性的设计动机。
2.1 人工管理阶段(20 世纪 50 年代中叶以前)
在计算机发展的早期阶段,计算机主要用于科学计算和军事用途。这一时期的硬件环境十分有限,外部存储设备只有纸带和卡片等,尚不具备磁盘等大容量的直接存取存储设备。软件方面,既没有操作系统,也没有专门用于管理数据的系统性软件。
这一阶段的数据管理方式具有以下特点:
第一,数据不能长期保存。程序运行结束后,其所使用的数据就随之消失,无法供其他程序或后续使用。第二,没有专门的软件来管理数据,程序员必须在代码中自行规划数据的物理存储位置和读取方式。第三,数据完全面向特定的应用程序,不同应用之间无法共享数据。如果两个实验项目需要用到相同的数据集,只能各自准备一份拷贝。第四,数据与程序高度耦合。数据的存储格式一旦发生变化(例如在记录中增加一个字段),所有依赖该数据格式的程序都必须进行相应的修改。
2.2 文件系统阶段(20 世纪 50 年代末至 60 年代中)
随着磁鼓和磁盘等直接存取存储设备的出现以及操作系统的发展,数据可以以文件的形式长期保存在计算机的外部存储器中。文件系统为应用程序提供了统一的打开 (Open)、关闭 (Close)、读取 (Read) 和写入 (Write) 等操作接口,程序员不再需要关心数据在磁盘上的物理位置。
这一阶段相比人工管理有了显著进步。数据可以长期保存并反复使用。程序与数据之间有了一定程度的独立性,因为文件系统屏蔽了部分底层细节。
然而,文件系统阶段仍然存在三个突出的问题:
第一,数据冗余度高、共享性差。不同部门或应用程序各自维护自己的数据文件,相同的信息可能被重复存储多次。例如,人事部门和财务部门可能各自保存一份员工基本信息的文件。这种重复存储不仅浪费存储空间,更严重的问题在于它为数据不一致性埋下了隐患。
第二,数据不一致性。由于同一数据存在多份拷贝,当其中一份被更新而其他拷贝未被同步更新时,就会出现数据前后矛盾的情况。例如,员工更改了住址后,如果只在人事文件中做了修改而忘记同步到财务文件,就会导致工资单寄送出错。
第三,数据独立性仍然不够。虽然文件系统隐藏了部分物理存储细节,但如果文件的记录格式发生变化(例如在每条记录中增加一个字段),依赖该文件的应用程序仍然需要修改其数据读取和解析逻辑。
2.3 数据库系统阶段(20 世纪 60 年代末至今)
进入 20 世纪 60 年代后期,随着应用规模的不断扩大,多个部门和应用需要共享和交叉使用大量相互关联的数据。文件系统的局限性在这种大规模数据共享需求面前变得越来越难以接受。在此背景下,数据库管理系统 (DBMS) 应运而生,标志着数据管理技术进入了数据库系统的新阶段。
与文件系统相比,数据库系统具有以下根本性的改进:
第一,数据实现了整体结构化。这是数据库系统与文件系统最本质的区别。在文件系统中,数据的组织仅限于文件内部的记录结构,文件与文件之间没有内在的联系。而在数据库中,数据不仅在单个表内部有严格的列定义和类型约束,表与表之间还通过外键等引用完整性机制建立了明确的逻辑关联。整个数据库作为一个统一的整体来进行组织、描述和管理。
第二,数据的共享度高、冗余度低。数据库系统的所有应用程序都通过 DBMS 这个统一的入口来访问同一份数据,从根本上减少了数据的重复存储。同时,由于数据集中管理,当数据发生变更时只需修改一处,消除了由冗余拷贝引起的数据不一致风险。
第三,数据独立性高。通过三级模式与两级映像的体系结构,数据的逻辑结构与应用程序之间、数据的物理存储结构与逻辑结构之间都实现了高度的解耦。当数据的逻辑或物理组织方式发生变化时,应用程序可以不做修改或只做少量修改。
第四,数据由 DBMS 进行统一管理和控制。DBMS 提供了数据的安全性保护(防止非授权用户访问)、完整性检查(保证数据满足语义约束条件)、并发控制(协调多个用户同时访问数据时的冲突)以及故障恢复(在系统崩溃后将数据恢复到一致状态)等功能。应用程序开发人员不必自行实现这些复杂且极易出错的功能。
从认识论角度看,数据库系统阶段真正完成的跨越,并不只是“文件更多了”或者“接口更方便了”,而是把原本分散在程序中的数据定义、约束规则和访问控制集中收回到系统层统一管理。文件系统时期,程序员往往既负责业务逻辑,又负责数据格式和存取路径;数据库系统出现后,数据开始被当作一种相对独立、可共享、可治理的资源来组织。也正因为有了这种统一管理,数据才不再只是程序的附属物,而成为多个应用、多个部门、多个角色共同依赖的基础设施。
3. 数据库系统的基本概念
3.1 核心术语辨析
在日常交流中,人们常笼统地使用数据库一词来指代与数据存储相关的各种事物。但在科学和工程语境下,以下几个概念有着严格的界定,准确区分它们是学习数据库理论的基本功。
数据 (Data) 是对客观事物属性进行符号化描述的结果。广义上,文字、数字、图像、音频、视频等经过数字化编码后都是数据。数据的含义需要结合其语义进行解释。例如,数值 20 本身没有明确含义,只有当它与年龄这一语义关联后,才表示某人的年龄为 20 岁。
数据库 (Database, DB) 是长期存储在计算机中的、有组织的、可共享的大量数据的集合。数据库中的数据按照一定的数据模型进行组织、描述和存储,具有较小的冗余度、较高的数据独立性,并且能够为多种应用服务。
数据库管理系统 (DBMS) 是位于用户应用程序与操作系统之间的一层数据管理软件,是数据库系统的核心组成部分。DBMS 负责数据库的定义(DDL 处理)、数据的操纵(DML 处理)、数据库的运行管理(并发控制、安全检查、完整性检查)以及数据库的建立和维护(数据加载、备份恢复、性能监控与优化)。Oracle、MySQL、PostgreSQL、Microsoft SQL Server 和 SQLite 等都是常见的 DBMS 产品。
数据库系统 (DBS) 是一个完整的概念,它包括数据库本身、数据库管理系统及其相关实用工具、应用程序以及数据库管理员 (DBA) 在内的整体运行环境。简而言之,DBS 等于 DB 加 DBMS 加应用程序加 DBA 加用户。
IMPORTANT
数据库系统 (DBS) 是一个范围更大的概念,包含了 DBMS。不能将二者颠倒。
这些术语之所以必须严格区分,是因为它们分别对应不同层次的问题。数据回答的是“要表达什么事实”,数据库回答的是“这些事实如何被长期组织和共享”,DBMS 回答的是“由谁负责管理这些事实的定义、读写和保护”,数据库系统则进一步回答“这些能力如何与用户、应用、管理员共同构成一个可运行环境”。一旦术语混用,后续讨论数据独立性、权限控制、性能优化时就很容易发生层次混乱。大学教材反复强调定义,不是为了考试,而是为了训练一种精确表达能力。
现实世界中的业务对象通常还具有复杂性、动态性和多视角性。复杂性意味着一个对象往往同时牵涉多种属性和联系,例如学生既有基本信息,也与课程、成绩、学院、奖惩记录发生联系。动态性意味着数据不是静止快照,而是不断变化的过程,例如订单会经历待支付、已支付、已发货、已完成等状态。多视角性意味着同一数据会被不同角色用不同方式理解,例如财务关注支付状态,教务关注选课结果,运营关注行为趋势。数据库的任务,就是用统一的数据结构容纳这些差异,而不让语义在多次传递中走样。
3.2 数据库管理员 (DBA) 的职责
数据库管理员 (DBA, Database Administrator) 是负责数据库系统全生命周期管理的专职人员。DBA 的主要职责包括以下几个方面:
第一,参与数据库设计。在系统开发之初,DBA 需要参与需求分析和概念设计,确定数据库的概念模式和逻辑模式,为整个数据架构定下基调。
第二,确定存储结构和存取策略。DBA 需要根据应用特点和数据量,决定数据的物理组织方式,包括选择何种索引结构、确定数据在磁盘上的分布方式、设置内存缓冲池的大小等参数。这些决策直接影响系统的查询性能和存储效率。
第三,安全性与完整性管理。DBA 负责定义各类用户的访问权限,确保敏感数据不被非授权用户访问或修改。同时,DBA 还需要定义各种完整性约束规则(如主键约束、外键约束、CHECK 约束等),保障数据库中的数据始终满足业务规则。
第四,监控与维护。在数据库运行期间,DBA 需要持续监控系统性能,识别并解决性能瓶颈。此外,DBA 还负责制定和执行备份及恢复策略,确保在发生硬件故障或人为误操作等灾难事件时,能够及时将数据库恢复到一致状态。
4. 三级模式与两级映像
ANSI/SPARC 委员会提出的三级模式两级映像体系结构是数据库系统实现数据独立性的核心架构设计。这一设计通过在应用程序和物理存储之间引入多层抽象,使得上层应用不必关心底层数据的物理实现细节,也使得底层存储方式的变更不会波及上层应用。
4.1 三级模式
概念模式(模式 / Schema):描述数据库中全体数据的逻辑结构和特征。概念模式定义了数据库中有哪些实体、实体具有哪些属性、实体之间存在什么关系,以及数据应满足的安全性和完整性要求。概念模式不涉及数据的物理存储方式,也不考虑应用程序的特定需求。一个数据库只有一个概念模式,它是数据库结构的全局性描述。
外模式(子模式 / External Schema):描述特定用户或应用程序所能看到和使用的局部数据视图。外模式的作用有两个:一是简化用户对数据的理解和使用,用户只需关注与自身业务相关的数据子集;二是提供安全性保障,通过限制用户只能通过特定的外模式访问数据,可以有效控制用户的数据可见范围。一个数据库可以有多个外模式,不同的用户或应用根据需要使用不同的外模式。一个应用程序只能使用一个外模式。
内模式(存储模式 / Internal Schema):描述数据在数据库内部的物理存储结构和存取方式。内模式定义了数据的存储方式(如行存储还是列存储)、索引的组织形式(如 B 加树索引还是哈希索引)、数据是否压缩或加密等底层细节。一个数据库只有一个内模式。
4.2 两级映像与数据独立性
三级模式之间通过两级映像进行转换和联系:
外模式/模式映像负责将外模式中用户视角的数据描述转换为概念模式中的全局数据描述。当概念模式发生变化时(例如,某张表增加了新列或者被分拆为两张表),只需要修改对应的外模式/模式映像,就可以使外模式保持不变,从而使得基于该外模式的应用程序不必修改。这就是逻辑数据独立性。
模式/内模式映像负责将概念模式中的逻辑数据描述与内模式中的物理存储描述之间建立对应关系。当数据的物理存储结构发生变化时(例如,更换了索引方式,或者数据迁移到了新的存储设备上),只需修改模式/内模式映像,就可以使概念模式保持不变,从而使得所有外模式和应用程序都不受影响。这就是物理数据独立性。
这两级映像保证了数据库中数据的独立性,使得应用程序具有很强的可移植性和可维护性,也是数据库技术之所以能够在软件工程中发挥如此重要作用的关键原因之一。
数据独立性经常被误当作纯理论概念,其实它有非常直接的工程价值。一个长期运行的系统几乎必然要经历字段新增、实体拆分、索引重建、冷热数据迁移、分区归档等变化。若没有逻辑独立性,应用程序会因为局部结构调整被迫跟着全面修改;若没有物理独立性,底层存储优化将频繁牵动上层业务。换句话说,真正稳定的系统不是永远不变,而是能够在变化中保持可控。三级模式与两级映像,本质上就是数据库领域为“持续演进”提供的一套缓冲机制。
5. 数据模型
数据模型 (Data Model) 是对现实世界中数据的特征进行的一种抽象表示。它是数据库系统的核心基础,决定了数据的组织方式、可执行的操作以及需要遵守的约束规则。任何数据模型都由以下三个要素组成:
- 数据结构:描述数据的静态特征,即数据对象的类型、内容和性质以及数据对象之间的联系。数据结构是数据模型最基本的组成部分,不同的数据模型之间最显著的区别就在于数据结构的不同。
- 数据操作:描述数据的动态特征,即对数据库中各种对象允许执行的操作集合以及操作的规则。
- 完整性约束:描述数据结构中数据及其联系所应满足的制约和规则,用于保证数据的正确性、有效性和相容性。
5.1 层次模型
层次模型 (Hierarchical Model) 是数据库系统中最早出现的数据模型之一,以树形结构来组织数据。IBM 公司在 20 世纪 60 年代开发的 IMS (Information Management System) 是层次模型的典型代表。
在层次模型中,数据被组织成一棵倒置的树。树的根节点在最顶层,有且仅有一个根节点,根节点没有父节点。除根节点外,每个节点有且仅有一个父节点。从父节点到子节点的联系是一对多的关系。
层次模型的优点在于:对于具有天然层次关系的数据(如行政组织架构、文件目录结构),建模非常直观且效率高。层次模型的缺点在于:无法直接表示多对多的关系。当现实世界中一个实体需要同时属于多个父实体时(例如一位教师同时在多个院系任教),层次模型必须通过引入冗余数据或虚拟节点来变通处理,这增加了数据管理的复杂性。此外,层次模型中的数据查询必须沿着树的层次路径进行导航式访问,查询灵活性受到限制。
5.2 网状模型
网状模型 (Network Model) 是在层次模型基础上发展而来的一种更为通用的数据模型,以有向图的形式组织数据。DBTG 发布的 CODASYL 系统规范是网状模型的代表。
与层次模型的严格树形结构不同,网状模型取消了以下两个限制:允许一个节点拥有多个父节点;允许节点之间存在多种不同类型的联系。这使得网状模型能够直接、自然地表示现实世界中复杂的多对多关系。
网状模型的主要缺点在于:数据之间的联系通过物理指针实现,整个数据库的结构像一张错综复杂的网。随着实体种类和联系类型的增加,数据结构变得极为复杂,用户在编写数据访问程序时必须了解数据的物理指针路径,导致程序编写困难、可维护性差。
5.3 关系模型
关系模型 (Relational Model) 由 IBM 研究院的 E.F. Codd 于 1970 年提出,以二维表的形式组织数据。关系模型的出现标志着数据库技术发展的一个重要里程碑,目前绝大多数主流数据库管理系统都基于关系模型。
关系模型以关系这一数学概念为基础。一个关系对应一张二维表,表中的每一行称为一个元组,每一列称为一个属性。不同表之间的数据关联不依赖物理层面的指针,而是通过公共属性值的匹配来实现。这就是主键与外键机制的本质。
关系模型相比层次模型和网状模型有三个显著优势:第一,它建立在严格的数学基础之上。关系代数和关系演算为数据操作提供了形式化的理论保障。第二,数据的存取路径对用户完全透明。用户只需要用 SQL 描述自己需要什么数据,而不必告诉系统如何去获取。具体的存取路径选择由 DBMS 内部的查询优化器自动完成。第三,数据模型概念简单。用一张二维表来对应一个实体集,用表中的行来对应具体实体,用列来对应属性,这种映射方式直观易懂。
5.4 其他数据模型简介
随着应用需求的多样化,在关系模型的基础上又发展出了多种扩展模型:
面向对象数据模型将面向对象编程中的核心概念引入数据库领域,支持在数据库中直接存储包含属性和方法的复杂对象,并支持类的继承和多态。这种模型适合管理工程设计数据、多媒体数据等结构复杂的应用场景。
对象关系数据模型在传统关系模型的基础上扩展了对象特性。PostgreSQL 中支持的复合类型、数组类型和 JSONB 类型就是对象关系思想的实际体现。这种折中方案既保留了关系模型成熟的查询优化机制,又增加了对复杂数据类型的处理能力。
6. DBMS 的内部组成与数据字典
6.1 DBMS 的主要功能模块
当用户向数据库提交一条 SQL 语句后,DBMS 内部需要经过多个功能模块的协同处理才能返回结果。理解这些模块的作用有助于后续学习查询优化和系统调优。
查询处理器是用户 SQL 语句进入 DBMS 后的第一个处理环节。它首先进行词法分析和语法分析,检查 SQL 语句是否符合语法规则。然后进行语义检查,验证查询中引用的表、列和用户权限是否有效。通过检查后,查询处理器将 SQL 语句转换为内部的关系代数表达式或查询执行计划。在这一过程中,查询优化器发挥着关键作用。优化器会根据数据库中维护的统计信息(如表的行数、列的值分布、可用索引等),评估多种等价的执行方案,并从中选择预估执行代价最低的方案。
存储管理器根据查询执行计划的指令,调用底层接口读取或写入数据页。如果查询条件涉及索引列,存储管理器会利用索引直接定位到目标数据页;否则需要全表扫描。
缓冲区管理器在内存中管理缓冲池,负责数据页的缓存和淘汰。当请求的数据页不在缓冲池中时,缓冲区管理器负责从磁盘读入该页,并可能需要根据页面置换策略淘汰某个当前不活跃的页面以腾出空间。
事务管理器负责保证事务的 ACID 特性。在并发访问场景下,通过封锁机制或多版本并发控制协调多个事务的执行顺序,防止出现数据不一致的问题。
日志与恢复管理器在所有数据修改操作执行之前,先将操作的相关信息(包括修改前的旧值和修改后的新值)记录到日志文件中。这种先写日志再写数据的策略称为预写式日志 (WAL)。当系统发生故障时,恢复管理器利用日志文件中的信息将数据库恢复到最近的一致状态。
6.2 数据字典 (Data Dictionary)
数据字典是 DBMS 内部维护的一组系统表,用于存储关于数据库结构本身的元数据 (Metadata)。元数据包括:数据库中有哪些表,每张表包含哪些列,列的数据类型和默认值,各种约束条件的定义,索引的定义,视图的定义,用户信息和权限设置,以及用于查询优化的统计数据等。
需要特别说明的是,数据字典中存储的是关于数据的数据,而不是业务数据本身。当数据库管理员执行 CREATE TABLE、ALTER TABLE 或 GRANT 等数据定义和数据控制操作时,本质上是在读写数据字典中的记录。对于查询优化器而言,数据字典中存储的统计信息(如各表的行数估计、索引的选择性等)是制定高效执行计划的重要依据。
从学习方法上说,数据字典也是理解数据库“自描述能力”的一个入口。一个成熟的数据库系统不仅保存业务记录,还保存自己如何被定义、如何被约束、如何被访问的说明书。正因为数据库能够描述自己,管理员才可以查询系统目录了解结构,优化器才可以基于统计信息选择计划,权限系统才可以判断用户是否有权访问某个对象。把数据字典理解为数据库的“结构档案馆”,比把它机械记成系统表集合更容易把握其价值。
