数据库系统的三级模式与两级映像:数据独立性的基石
数据库系统的三级模式(外模式、概念模式、内模式)和两级映像(模式 / 内模式映像、外模式 / 模式映像)是实现数据独立性的核心架构,也是关系型数据库保持灵活性和稳定性的关键设计。这一体系结构将数据的抽象层次分离,使得用户操作、逻辑结构和物理存储可以独立演化。
三级模式结构:数据的三个抽象层次
三级模式从抽象到具体,分别对应用户视角、系统逻辑视角和物理存储视角,每一层都有明确的职责和描述对象。
外模式(External Schema):用户眼中的数据
- 定义:又称 “用户模式” 或 “子模式”,是特定用户或应用程序所能看到和使用的数据结构描述。它是概念模式的子集,只包含用户关心的部分数据。
- 特点:
- 一个数据库可以有多个外模式(不同用户 / 应用可能需要不同的数据视图)。
- 外模式屏蔽了无关数据,简化了用户操作,同时保障数据安全(用户只能访问被授权的外模式)。
- 对应数据库对象:视图(View)。视图是外模式的具体实现,用户通过视图操作数据,无需关注底层表结构。
- 描述语言:外模式 DDL(数据定义语言),用于定义用户视图的结构。
概念模式(Conceptual Schema):系统的逻辑结构
- 定义:又称 “模式”,是数据库中全体数据的逻辑结构和特征的总描述,反映了数据之间的内在联系(如关系、约束、规则等)。
- 特点:
- 概念模式是数据库的核心,独立于硬件(存储方式)和软件(应用程序)。
- 它既不涉及数据的物理存储细节,也不针对具体用户的需求,而是从全局角度描述数据的逻辑组织。
- 对应数据库对象:基本表(Table)。基本表是概念模式的物理载体,体现了数据的逻辑结构(如字段、类型、主键、外键等)。
- 描述语言:模式 DDL,用于定义表结构、关系和约束(如 SQL 中的
CREATE TABLE)。
内模式(Internal Schema):数据的物理存储
- 定义:又称 “存储模式”,是数据在数据库内部的物理存储结构和存储方式的描述。
- 包含内容:
- 数据的存储方式(如顺序存储、B 树索引、哈希存储)。
- 物理记录的结构(如块大小、压缩方式、是否加密)。
- 索引、聚簇、分区等物理优化手段。
- 特点:
- 内模式直接与硬件相关,由数据库管理系统(DBMS)负责管理。
- 用户和应用程序无法直接访问内模式,只能通过概念模式间接操作。
- 对应数据库对象:存储文件(Data File)。存储文件是数据在磁盘上的实际存在形式(如 MySQL 的
.ibd文件、Oracle 的.dbf文件)。 - 描述语言:内模式 DDL,通常由 DBMS 自动生成或通过配置文件设置(用户无需手动编写)。
两级映像:实现数据独立性的桥梁
两级映像连接了三个抽象层次,确保了 “物理独立性” 和 “逻辑独立性”,使得数据的物理存储或逻辑结构变化时,应用程序无需修改。
模式 / 内模式映像:保障物理独立性
- 定义:存在于概念模式与内模式之间,定义了逻辑结构与物理存储之间的对应关系(如 “概念表中的
id字段对应物理文件的第 1-4 字节”)。 - 物理独立性:当数据的物理存储方式改变时(如更换存储设备、修改索引类型、调整块大小),只需修改模式 / 内模式映像,概念模式和外模式保持不变,因此依赖外模式的应用程序无需修改。
示例:
若将表的存储方式从 “堆文件” 改为 “B 树索引”,DBMS 只需更新模式 / 内模式映像中 “表与存储结构” 的对应关系,应用程序仍通过 SELECT 语句查询表,感知不到底层变化。
外模式 / 模式映像:保障逻辑独立性
- 定义:存在于外模式与概念模式之间,定义了用户视图与逻辑结构之间的对应关系(如 “视图
v_user的name字段对应表user的username字段”)。 - 逻辑独立性:当数据的逻辑结构改变时(如增加字段、修改表关系、拆分表),只需修改外模式 / 模式映像,外模式保持不变,因此依赖外模式的应用程序无需修改。
示例:
若在表 user 中增加 email 字段,而用户视图 v_user 只包含 id 和 name,只需确保外模式 / 模式映像中 v_user 与原字段的对应关系不变,应用程序查询 v_user 时仍能正常工作,无需修改代码。
三级模式与两级映像的意义
- 数据独立性:
- 物理独立性:物理存储变化不影响应用程序。
- 逻辑独立性:逻辑结构变化不影响应用程序。
这是数据库系统区别于文件系统的核心优势之一,大幅降低了系统维护成本。
- 数据共享与安全:
- 概念模式统一管理全局数据,支持多用户共享。
- 外模式限制用户访问范围,防止未授权操作(如通过视图隐藏敏感字段)。
- 抽象与简化:
- 屏蔽了底层复杂的物理存储细节,用户只需关注数据的逻辑使用。
- 分离了逻辑设计与物理设计,便于数据库管理员(DBA)和开发人员分工协作

v1.3.10