image

一、什么是数据库三层架构?

数据库建模是对现实世界进行抽象、归纳并找出内在联系的过程。为了将现实世界的业务逐步转化为计算机可存储的数据,数据库设计遵循"三级模式"架构,分为三个层层递进的阶段:
概念模型 → 逻辑模型 → 物理模型
这三层分别对应:现实世界的业务理解信息世界的结构定义计算机世界的物理实现

二、概念模型(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 逻辑模型(关系模式)

根据转换规则:
  1. 实体转表Student(SID, SName, Major)Course(CID, CName, Credit)
  2. m:n联系转表SC(SID, CID, Grade) —— 联合主键(SID,CID),外键分别引用Student和Course
  3. 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);  -- 物理层分区策略
 

七、设计流程总结

数据库设计的黄金路径:
  1. 需求分析 → 收集业务规则
  2. 概念设计 → 画E-R图(与技术人员和业务人员确认)
  3. 逻辑设计 → 转换为关系表(规范化处理,消除冗余)
  4. 物理设计 → 针对具体DBMS优化(反规范化、索引、分区)
  5. 实施与维护 → 实施物理模型并监控调优
关键认知:三层模型不是可选项,而是必经阶段。跳过概念模型直接建表容易导致理解偏差;混淆逻辑模型与物理模型会在更换数据库时造成迁移困难。