1. 什么是“三级模式”?(数据库的三层阶级)
假设公司有一套极其庞大的【员工信息数据库】。为了保证安全、高效、不乱套,数据库被严格划分成了三个阶级:
外模式 (External Schema)
- 通俗解释: 这是给外部具体干活的人看的。不同岗位的人,能看到的“数据视图”是完全不一样的。
- 生动比喻: 门口保安大叔的屏幕上,只能看到员工的:
[照片,姓名,所在部门](用来核对身份)。 - 财务部小姐姐的屏幕上,只能看到员工的:
[姓名,银行卡号,基本工资,绩效](用来发工资)。 - 核心特点: 它是数据库的局部逻辑结构。也就是上一题我们说的“视图 (View)”。它不仅屏蔽了无关数据,还极大地保证了数据的安全性(保安绝不可能看到你的工资)。
概念模式 (Conceptual Schema)
- 通俗解释: 也叫逻辑模式,简称“模式”。这是整座大楼的总设计图,是数据库的“灵魂主体”。
- 生动比喻: 公司的数据库总管(DBA)手里握着一张超级大表,里面包含了全公司所有员工的所有信息:
[学号,姓名,照片,部门,工资,家庭住址,身份证号...]。同时,这里还规定了约束条件(比如“工资不能为负数”、“身份证号是主键”)。 - 核心特点: 它是数据库的全局逻辑结构。所有外模式(保安看的、财务看的),都是从这个超级大表里挑出一部分拼出来的。
内模式 (Internal Schema)
- 通俗解释: 它根本不在乎数据代表的是“工资”还是“照片”,它只关心这些数据在电脑的硬盘上到底是怎么塞进去的。
- 生动比喻: 公司的底层 IT 运维人员(或者机器本身)。他们负责把这个超级大表变成一堆二进制代码
010101,存进 C 盘还是 D 盘?要不要压缩?照片是用什么格式存的?要不要建索引(目录)来加快查询速度? - 核心特点: 它是数据库的物理存储结构。一个数据库只能有一个内模式(因为真正在硬盘上存的物理实体只有一份)。
2. 为什么要搞这么麻烦?
它们带来了数据库里一个特性:数据独立性。
所谓独立性,就是“不管别人怎么折腾,我都不用改代码”。
外模式 / 模式映像 —— 保证【逻辑独立性】
- 它的位置: 挡在“保安/财务(外模式)”和“DBA(概念模式)”之间。
- 有什么用? 假设公司今年业务扩大,DBA 在“全局大表(概念模式)”里新增了一列
[血型],甚至把大表拆成了两张小表。 - 神奇的效果: 因为有这个“翻译官”在中间协调转换,保安和财务的电脑程序完全不需要修改,连停机都不用,他们看到的依然是原来的画面。这就叫逻辑独立性(全局表结构怎么大改,都不影响外面的应用程序)。
模式 / 内模式映像 —— 保证【物理独立性】
- 它的位置: 挡在“DBA(概念模式)”和“硬盘(内模式)”之间。
- 有什么用? 假设 IT 部门觉得原来的机械硬盘太慢了,买了一批最顶级的固态硬盘,并且改变了数据的压缩算法和存储位置(内模式变了)。
- 神奇的效果: 因为有底层的“翻译官”帮忙重新定位路径,DBA 手里的“全局大表”完全不需要做任何修改。外面的程序员更是一点感觉都没有。这就叫物理独立性(底层硬件和存储方式怎么大改,都不影响逻辑表结构)。
终端用户 A (保安) 终端用户 B (财务) <-- 看不到全局,只看自己该看的
| |
【外模式 A】 【外模式 B】 <-- 局部视图
| |
==== (外模式/模式映像) ==== 屏蔽表结构变动 (逻辑独立性)
|
【概念模式】 <-- 唯一的全局大总管,所有表的定义
|
==== (模式/内模式映像) ==== 屏蔽硬盘/存储变动 (物理独立性)
|
【内模式】 <-- 冰冷的硬盘、索引、压缩包
