课程地图 数据库与数据模型
场景库 术语表
M2 · Chapter 04

数据库与数据模型

理解软件如何保存、关联和查询数据。

7 个小节8 个业务案例5 类业务场景设计师视角
先看哪些场景

项目与协作、数据模型、数据看板、订单与支付、内容与媒体

它是什么

数据库是长期保存和组织业务数据的系统,数据模型定义对象、字段、关系和约束。

为什么需要

列表、详情、筛选、权限和流程都依赖数据结构,页面结构经常是数据模型的投影。

位于哪一层

位于业务逻辑之下,为后端提供持久化、查询和一致性能力。

和谁连接

表、主键、外键、关系、SQL、索引、事务、NoSQL、ORM 和 Migration。

项目里怎么出现

用户、项目、任务、订单、评论和权限都会映射为数据实体与关系。

Learning Outcomes

学完这一章,你应该能

  • 理解关系型数据库的基本结构
  • 从产品对象推导 1:1、1:N、N:N 关系
  • 理解 SQL、索引和事务的用途
  • 区分关系型、文档型、缓存和搜索系统
04.01

数据为什么需要数据库?

应用进程负责计算,数据库负责持久保存和可靠查询。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

项目与协作CASE 01

为什么刷新页面后项目仍然存在?

用户正在做什么

用户创建项目后关闭浏览器,第二天继续查看。

业务会出什么问题

只保存在前端内存中的数据会在刷新、换设备或程序重启后消失。

技术怎样介入

数据库负责持久化项目记录,定期备份用于误删和故障恢复。

产品与设计怎样落地

设计删除、恢复、历史记录和数据保留周期时,需要理解持久化与备份策略。

程序内存中的数据会随着进程重启消失。数据库把数据写入持久介质,并提供并发访问、权限、备份、约束和查询能力。

关系型数据库适合结构清晰、关系明确的业务数据。文件、缓存、搜索索引和日志可能交给其他专用系统。

Application Memory → Database Persistence
System View

应用内存

  • 速度快
  • 进程内使用
  • 重启会丢失

数据库

  • 长期保存
  • 多人并发访问
  • 支持查询、约束和备份
Designer Lens

设计“保存成功”时,要明确数据是否真正落库、是否允许撤销、何时与其他端同步。

PersistenceDatabaseBackup
04.02

Table、Row、Column 与数据类型

关系型数据库把同类对象组织成表。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

数据模型CASE 01

CRM 中一条客户记录如何落到数据库?

用户正在做什么

销售录入客户名称、行业、联系电话、跟进状态和创建时间。

业务会出什么问题

字段类型和约束不清,会出现空名称、错误日期或同一手机号重复录入。

技术怎样介入

Customer Table 定义 Column 与数据类型,每个客户是一行 Row,Constraint 保证必填、唯一和取值范围。

产品与设计怎样落地

表单字段、默认值、可空规则和校验提示应与数据约束保持一致。

Project 表包含 id、name、status、owner_id、created_at 等字段,每一行代表一个项目。字段类型限制可存内容,例如整数、文本、日期和布尔值。

约束可以要求名称必填、状态只能来自枚举、编号唯一。数据模型越明确,接口和页面状态越稳定。

Business Object → Table;Object Property → Column;Record → Row
System View
projects
┌────┬──────────────┬────────┬──────────┐
│ id │ name         │ status │ owner_id │
├────┼──────────────┼────────┼──────────┤
│ 12 │ AI 设计系统  │ active │ 8        │
└────┴──────────────┴────────┴──────────┘
Designer Lens

表单控件、格式提示和错误状态都应与字段类型和约束对齐。

TableRowColumnConstraint
04.03

Primary Key、Foreign Key 与关系

主键标识唯一对象,外键连接不同对象。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

项目与协作CASE 01

一个用户为什么能加入多个项目?

用户正在做什么

成员可以参与多个项目,一个项目也包含多名成员,并且每个成员有不同角色。

业务会出什么问题

把成员名单直接写进项目字段会难以查询、更新和保存角色信息。

技术怎样介入

User 和 Project 各自用 Primary Key 标识,通过 ProjectMember Join Table 保存双方 Foreign Key 与角色。

产品与设计怎样落地

成员管理页需要设计加入、移除、角色修改、重复邀请和离职后的资源处理。

Project.id 唯一标识项目,Task.project_id 指向所属项目。这样数据库可以查询某项目的全部任务,也能保证引用关系有效。

一对一适合用户与唯一档案,一对多适合项目与任务,多对多适合用户与项目成员关系,通常通过中间表实现。

Project 1 → N Task;User N ↔ N Project
System View
User
ProjectMember 中间表
Project
Task
Comment
Designer Lens

详情页中的关联列表、成员管理和筛选条件,本质上都来自实体关系。

Primary KeyForeign KeyJoin Table
04.04

SQL 与查询思维

SQL 用于选择、创建、更新、删除和关联数据。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

数据看板CASE 01

销售看板的“本月华东成交额”怎样算出来?

用户正在做什么

管理者筛选本月、华东地区和已成交订单,并按销售人员汇总。

业务会出什么问题

数据分散在订单、客户和员工表中,需要准确关联与聚合。

技术怎样介入

SQL 通过 WHERE 筛选、JOIN 关联多表、GROUP BY 汇总,形成页面需要的 Query 结果。

产品与设计怎样落地

设计指标时同步定义时间范围、状态口径、维度和空值规则。

SELECT 查询,INSERT 创建,UPDATE 修改,DELETE 删除,JOIN 把相关表连接起来。WHERE 负责筛选,ORDER BY 负责排序,LIMIT 负责分页。

页面上的搜索、筛选、排序和分页最终会变成查询条件。复杂报表可能需要聚合、分组和统计。

UI Filter → API Query → SQL WHERE / ORDER / LIMIT
System View
SELECT p.id, p.name, u.name AS owner
FROM projects p
JOIN users u ON p.owner_id = u.id
WHERE p.status = 'active'
ORDER BY p.created_at DESC
LIMIT 20;
Designer Lens

设计筛选器时同时考虑字段类型、组合规则、默认值和无结果状态。

SQLJOINQuery
04.05

Index 与性能

索引让数据库快速定位数据,同时增加写入和存储成本。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

订单与支付CASE 01

订单列表按订单号搜索,为什么有时一秒有时十秒?

用户正在做什么

客服在上亿条订单中查询某个订单号和用户手机号。

业务会出什么问题

没有合适 Index 时数据库可能执行 Full Table Scan,数据越多越慢。

技术怎样介入

为高频查询字段建立索引,并通过 Query Plan 检查数据库是否使用索引。

产品与设计怎样落地

搜索交互要与真实查询能力匹配,避免提供无法高效支持的任意组合筛选。

没有索引时,数据库可能扫描整张表。索引像按字段建立的快速查找结构,适合高频筛选、排序和关联字段。

索引不是越多越好。每次新增和更新数据都要维护索引,错误索引也可能无法改善查询。性能优化需要结合真实查询和执行计划。

Frequent Query Field → Index → Faster Lookup
System View

无索引

  • 可能全表扫描
  • 大数据量变慢
  • 写入成本低

有合适索引

  • 快速定位
  • 适合筛选与排序
  • 增加存储和写入成本
Designer Lens

当大型列表搜索很慢时,问题可能来自查询和索引,也可能来自接口、网络或前端渲染。

IndexFull Table ScanQuery Plan
04.06

Transaction 与一致性

事务把多个数据操作组织成一个完整单元。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

订单与支付CASE 01

创建订单成功、扣库存失败时怎么办?

用户正在做什么

用户提交订单,系统需要创建订单、扣减库存并使用优惠券。

业务会出什么问题

其中一步失败会产生“有订单但没库存”或“优惠券被扣却没有订单”等半完成状态。

技术怎样介入

数据库 Transaction 把相关操作放在一起;全部成功后 Commit,任一步失败就 Rollback。

产品与设计怎样落地

提交期间展示处理中,失败后恢复优惠券和库存状态,不把中间状态暴露给用户。

转账需要同时减少一个账户余额并增加另一个账户余额。事务保证这些操作共同成功或共同回滚,避免只完成一半。

事务提供原子性、一致性、隔离性和持久性。跨多个微服务时,传统数据库事务难以覆盖全部系统,需要事件、补偿或其他一致性方案。

Begin → Multiple Writes → Commit / Rollback
System View
开始事务
检查条件
写入 A
写入 B
全部成功提交
任一步失败回滚
Designer Lens

涉及支付、库存、名额和审批状态时,要设计处理中、失败恢复和最终结果。

TransactionCommitRollback
04.07

NoSQL、ORM 与 Migration

不同数据系统解决不同访问问题,ORM 和迁移工具帮助代码管理数据库。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

内容与媒体CASE 01

内容平台的文章结构经常变化,为什么可能用 NoSQL?

用户正在做什么

不同文章包含段落、图片、引用、视频和自定义模块,结构差异大。

业务会出什么问题

固定关系表频繁变更字段会增加开发和迁移成本。

技术怎样介入

文档型 NoSQL 可以保存灵活的内容结构,同时核心用户和订单仍可留在关系型数据库。

产品与设计怎样落地

灵活结构也需要版本、校验和编辑器兼容策略。

项目与协作CASE 02

给项目增加“风险等级”字段,线上旧数据怎么办?

用户正在做什么

新版项目详情需要新增 risk_level,开发代码也要读取和写入它。

业务会出什么问题

直接修改线上表可能导致旧版本代码报错或历史数据为空。

技术怎样介入

Migration 以可追踪步骤修改 Schema;ORM 把代码对象映射到数据库字段。

产品与设计怎样落地

上线前要定义旧数据默认值、渐进发布和回滚方式。

MongoDB 以文档组织灵活数据,Redis 提供高速内存访问,Elasticsearch 专注全文搜索。关系型数据库仍然常作为核心业务数据源。

ORM 让开发通过对象和方法访问数据库;Migration 记录表结构如何从一个版本变化到下一个版本,便于团队和环境同步。

Application Model ↔ ORM ↔ SQL Database;Schema Version → Migration
System View
PostgreSQL:核心关系数据
MongoDB:文档数据
Redis:高速缓存与临时状态
Elasticsearch:全文检索
ORM:代码访问数据
Migration:结构版本管理
Designer Lens

看到技术选型时先问数据形态、访问方式、一致性和规模,不要只看工具流行度。

NoSQLORMMigration
Chapter Recap

本章小结

  • 01
    数据库负责持久化、查询、约束和并发访问。
  • 02
    主键、外键和中间表建立数据关系。
  • 03
    页面筛选、排序和分页会映射成 SQL 查询。
  • 04
    索引、事务、NoSQL、ORM 和 Migration 分别解决性能、一致性、专用数据与工程协作。
Practice

把认知变成一张图

为一个课程产品设计 User、Course、Lesson、Enrollment 四张表,标出主键、外键和关系。

Quick Check

随堂检查

QUESTION 01
Project 与 Task 通常是什么关系?
一个项目通常包含多个任务。
QUESTION 02
数据库索引的主要用途是什么?
索引用额外存储和写入成本换取查询速度。