一、什么是数据库三层架构?
数据库建模是对现实世界进行抽象、归纳并找出内在联系的过程。为了将现实世界的业务逐步转化为计算机可存储的数据,数据库设计遵循"三级模式"架构,分为三个层层递进的阶段:
概念模型 → 逻辑模型 → 物理模型
这三层分别对应:现实世界的业务理解、信息世界的结构定义、计算机世界的物理实现。
二、概念模型(Conceptual Model):业务世界的抽象
2.1 定义与目标
概念模型是从现实世界到信息世界的第一层抽象,也称为"概念设计"或"ER建模"。它完全独立于任何数据库管理系统(DBMS),只关注业务需求本身。
核心任务:识别领域中的实体(Entity)、属性(Attribute)以及实体间的联系(Relationship)。
2.2 表示方法:E-R图(实体-联系图)
使用Peter Chen提出的E-R图表示法,包含三大要素:
-
实体(矩形):如"学生"、"课程"
-
属性(椭圆):如学生的"学号"、"姓名"
-
联系(菱形):如学生"选修"课程,标注联系类型(1:1、1:n、m:n)
2.3 设计要点
-
无视技术细节:不涉及具体的数据库类型(关系型/文档型)、数据类型、索引等
-
全局视角:整合所有用户视图,形成统一的全局E-R图
-
业务验证:用于与非技术人员确认需求理解是否正确
示例片段:
[学生]——<选修>——[课程]
| n:m |
学号 课程号
姓名 课程名
三、逻辑模型(Logical Model):结构化的转变
3.1 定义与目标
逻辑模型是将概念模型(E-R图)转化为特定数据模型的过程。在关系数据库占主导的当下,通常指转换为关系模型(Relational Model),即确定表结构、字段、主外键关系。
关键转换原则:遵循关系数据理论的范式要求(1NF、2NF、3NF等)。
3.2 E-R图向关系模型的转换规则
规则1:实体转换
每个实体型转换为一个关系模式(表),实体的属性成为表的字段,实体的码(主键)成为表的主键。
转换示例:
-
实体"学生(学号,姓名,性别)" → 表:
Student(SID, Name, Gender)
规则2:联系转换(核心难点)
联系的转换根据Cardinality(基数)不同而不同:
| 联系类型 | 转换策略 | 关系码(Key)确定 | 示例 |
|---|---|---|---|
| 1:1 (一对一) |
可独立成表,或合并到任一端 | 两端实体的码都成为候选码 (通常合并到一端,将另一端的主键作为外键) |
班长(1)管理班级(1) → 在班级表中加入"班长学号"外键 |
| 1:n (一对多) |
将联系并入n端,不独立建表 | n端实体的码作为关系的主键 (同时作为外键引用1端) |
班级(1)包含学生(n) → 学生表中加入"班级号"外键 |
| m:n (多对多) |
必须独立建表(关联表/中间表) | 两端实体码的组合 (联合主键) |
学生(m)选修(n)课程 → 新建SC表:(学号,课程号,成绩) |
规则3:特殊属性处理
-
多值属性(如员工的多个电话):单独建表,主键为"实体主键+多值属性"
-
复合属性(如地址细分为省市区):可 flattened 为多个简单字段,或保持复合
-
派生属性(如年龄可由出生日期计算):通常不在逻辑模型中存储
四、物理模型(Physical Model):面向机器的落地
4.1 定义与目标
物理模型是逻辑模型在具体DBMS(如MySQL、Oracle、PostgreSQL)上的物理实现方案,关注存储效率和访问性能。
4.2 核心设计内容
将逻辑表的定义转化为具体的数据库对象:
| 设计维度 | 具体内容 | 示例(MySQL) |
|---|---|---|
| 存储结构 | 文件组织、表空间、分区策略 | InnoDB行格式(Dynamic/Compact)、水平分表 |
| 字段定义 | 数据类型、长度、精度、约束 | DECIMAL(10,2)存金额,VARCHAR(255)存姓名 |
| 完整性约束 | 主键(Primary Key)、外键(Foreign Key)、唯一约束(Unique)、检查约束(Check) | ALTER TABLE ADD CONSTRAINT |
| 索引设计 | B+树索引、哈希索引、联合索引、覆盖索引 | CREATE INDEX idx_name ON table(column) |
| 其他对象 | 视图(View)、存储过程(Procedure)、触发器(Trigger)、默认值(Default) | 创建审计触发器记录数据变更 |
4.3 性能优化考虑
-
反规范化:适当冗余字段减少JOIN(如逻辑模型是3NF,物理模型可能降级为2NF)
-
分区表:对大表按时间或ID范围分区
-
读写分离:主库写、从库读的物理部署
五、三层模型对比速查表
| 维度 | 概念模型 | 逻辑模型 | 物理模型 |
|---|---|---|---|
| 抽象层级 | 现实世界 → 信息世界 | 信息世界 → 数据世界 | 数据世界 → 物理存储 |
| 使用者 | 业务分析师、产品经理 | 系统架构师、DBA | 数据库管理员、运维工程师 |
| 工具表示 | E-R图、UML类图 | 关系模式、表结构图 | DDL脚本、数据库设计工具 |
| 与DBMS关系 | 完全无关 | 特定于数据模型类型 (如关系型、文档型) |
特定于具体产品 (MySQL/Oracle/SQL Server) |
| 核心关注点 | 实体业务含义、业务规则 | 数据结构、完整性、规范化 | 存储空间、I/O效率、并发性能 |
| 修改成本 | 低(只需改图) | 中(影响应用逻辑) | 高(涉及数据迁移) |
六、完整案例:学生选课系统
通过一个贯穿三层的案例理解建模流程:
6.1 概念模型(E-R图)
识别出:
-
实体:学生、课程、教师
-
联系:
-
学生 选修 课程(m:n,属性:成绩)
-
教师 授课 课程(1:n)
-
6.2 逻辑模型(关系模式)
根据转换规则:
-
实体转表:
Student(SID, SName, Major),Course(CID, CName, Credit) -
m:n联系转表:
SC(SID, CID, Grade)—— 联合主键(SID,CID),外键分别引用Student和Course -
1:n联系合并:
Course表中加入TID(教师ID)作为外键
6.3 物理模型(MySQL实现)
-- 学生表:物理优化考虑索引和存储引擎
CREATE TABLE Student (
SID CHAR(10) PRIMARY KEY COMMENT '学号',
SName VARCHAR(50) NOT NULL COMMENT '姓名',
Major VARCHAR(30) COMMENT '专业',
INDEX idx_major (Major) -- 物理层添加索引优化按专业查询
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 选课表:体现逻辑层的m:n关系,物理层优化外键和索引
CREATE TABLE SC (
SID CHAR(10),
CID CHAR(8),
Grade DECIMAL(5,2) CHECK (Grade BETWEEN 0 AND 100),
PRIMARY KEY (SID, CID), -- 联合主键
FOREIGN KEY (SID) REFERENCES Student(SID) ON DELETE CASCADE,
FOREIGN KEY (CID) REFERENCES Course(CID),
INDEX idx_grade (Grade) -- 物理层为成绩查询优化
) ENGINE=InnoDB PARTITION BY RANGE (CID); -- 物理层分区策略
七、设计流程总结
数据库设计的黄金路径:
-
需求分析 → 收集业务规则
-
概念设计 → 画E-R图(与技术人员和业务人员确认)
-
逻辑设计 → 转换为关系表(规范化处理,消除冗余)
-
物理设计 → 针对具体DBMS优化(反规范化、索引、分区)
-
实施与维护 → 实施物理模型并监控调优
关键认知:三层模型不是可选项,而是必经阶段。跳过概念模型直接建表容易导致理解偏差;混淆逻辑模型与物理模型会在更换数据库时造成迁移困难。

