文章
主题域模型-概念模型-逻辑模型-物理模型的理解
理解数据建模从主题域模型→概念模型→逻辑模型→物理模型的演进过程,可以类比为城市规划的四个阶段。通过这个比喻,结合具体示例,可以轻松掌握各层模型的核心要点。
1. 主题域模型:划分城市功能区
比喻:
就像城市规划先划分「商业区」「住宅区」「工业区」等大板块,主题域模型是对企业数据的「高空俯视图」。
关键点:
- 做什么:识别数据的「大分类」
- 核心输出:用业务语言描述的高层数据分组
- 示例(以电商为例):

如何理解:
- 用户、订单、商品、支付是电商最核心的「主题域」
- 不关心具体字段,只明确「订单与用户有关联」这种高层关系
2. 概念模型:设计区域蓝图
比喻:
像绘制每个功能区的建筑类型(商场/学校/公园),概念模型定义每个主题域下的「核心实体」及其关系。
关键点:
- 做什么:明确「谁」和「谁」有什么关系
- 核心输出:实体关系图(ERD)
- 示例:

如何理解:
- 用户(USER)可以下多个订单(ORDER)
- 订单包含多个订单项(ORDER_ITEM)
- 每个订单项对应一个商品(PRODUCT)
3. 逻辑模型:制定建筑规范
比喻:
像规定「住宅楼限高50米」「商场需配200个车位」,逻辑模型定义数据的详细规则,但不管具体用什么材料建造。
关键点:
- 做什么:设计表结构、字段、约束
- 核心输出:数据库无关的表设计
- 示例(订单逻辑表):
表名 | 字段 | 类型 | 约束 |
---|---|---|---|
USER | user_id (PK) | VARCHAR(20) | NOT NULL |
ORDER | order_id (PK) | BIGINT | 关联USER.user_id |
ORDER_ITEM | item_id (PK) | INT | 关联ORDER.order_id |
如何理解:
- 明确user_id是字符串,order_id是数字
- 定义主外键关系,但不说用MySQL还是Oracle实现
4. 物理模型:施工图纸
比喻:
像最终确定「用钢筋混凝土」「空调型号XX」,物理模型是具体的数据库实现方案。
关键点:
- 做什么:优化存储和性能
- 核心输出:带技术参数的DDL语句
- 示例:
CREATE TABLE `order` (
`order_id` BIGINT PRIMARY KEY,
`user_id` VARCHAR(20) NOT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_user` (`user_id`) -- 为用户查询添加索引
) ENGINE=InnoDB PARTITION BY RANGE (YEAR(create_time));
如何理解:
- 选择InnoDB引擎、按年分区、为user_id建索引
- 这些决策会影响实际查询速度
5. 四层模型快速对比
阶段 | 核心问题 | 类比 | 工具示例 | 是否依赖技术选型 |
---|---|---|---|---|
主题域模型 | 数据有哪些大类? | 城市功能区规划 | 思维导图 | 否 |
概念模型 | 实体间如何关联? | 区域蓝图 | ER图 | 否 |
逻辑模型 | 数据详细规则是什么? | 建筑规范 | Excel表设计 | 否 |
物理模型 | 如何高效存储和查询? | 施工图纸 | SQL DDL | 是 |
6. 实际案例串联(电商系统)
- 主题域:确定有「用户」「订单」「商品」三大块
- 概念模型:画ER图表示用户可下多个订单
- 逻辑模型:设计USER表、ORDER表及其字段
- 物理模型:决定ORDER表用MySQL分库分表
记忆口诀:
- 主题域:分大类(What)
- 概念模型:画关系(Who with Who)
- 逻辑模型:定规则(How to Define)
- 物理模型:搞落地(How to Implement)
通过这种分层理解,既能避免过早陷入技术细节,又能确保最终落地可行性。就像城市规划不能直接跳到选建材,数据建模也需要逐层细化。