LESSON 6.1 / DATABASE & STATE

为什么需要数据库

数据库让任务记录在进程结束和页面刷新后仍然存在。先把现实中的任务拆成字段、关系与约束,再选择表结构。

预计阅读约 25 到 40 分钟
完成结果画出任务、用户和分类的最小数据模型,并为每个字段说明类型、是否必填和约束理由。
本课目标
  • 画出任务、用户和分类的最小数据模型,并为每个字段说明类型、是否必填和约束理由。
  • 记录、表、字段、主键和关系
  • 完成为什么需要数据库后,应当画出任务、用户和分类的最小数据模型,并为每个字段说明类型、是否必填和约束理由,并保留查询结果、影响行数、迁移记录和缓存命中情况作为可重复检查的依据。
开始之前
  • 完成 5.6「把后端概念迁移到 Java / Spring Boot」
01

FOUNDATION

必须理解

内存数组会在进程重启时消失,文件也难以安全支持并发查询。数据库管理长期事实、查询、并发和约束,是产品从演示进入真实使用的关键。

本课依次讲清记录、表、字段、主键和关系、持久化、并发和数据一致性和结构化数据与图片文件的不同存储方式,最后通过“用三个用户问题检验模型能否回答”检查学习结果。

先建立整体直觉

内存像桌面便签,应用关闭就可能丢;数据库像有目录、规则和管理员的档案馆,多个人可以按编号查找,同时防止关键资料缺失。

贯穿本课的实际场景

任务应用把用户、任务和完成状态保存在数据库。用户刷新、换设备或服务器重启后,属于他的任务仍能按权限取回。

概念 1

记录、表、字段、主键和关系

先用白话理解

数据能在应用关闭、服务器重启后继续存在,这就叫持久化。数据库不只是一个大盒子,它还会处理索引、约束、事务和多人同时访问。

基础概念

记录是一件业务事物的一组数据,表组织同类记录,字段描述每条记录的属性,主键唯一识别记录,关系则通过标识把不同表中的记录连接起来。

进一步理解

一行任务记录可包含 id、title、done 与 ownerId;主键 id 让更新目标不依赖可能重复的标题,ownerId 连接到用户表。

数据模型从业务对象和规则出发,不从页面布局出发。一个页面可展示多类记录,同一记录也能出现在多个页面。

放进实际场景

User 与 Task 分表保存,一个用户对应多条任务;查询当前用户任务时通过 ownerId 建立归属边界。

容易混淆的地方

表不是电子表格页面,关系也不等于把完整用户对象复制到每条任务。通常保存稳定标识并在查询时连接。

这一小节记住:先识别业务实体、唯一身份和关系,再决定表与字段。

概念 2

持久化、并发和数据一致性

先用白话理解

数据模型是在回答“产品里有哪些真实东西,它们怎么关联”。任务有 id、标题、完成状态和所属用户,一个用户可以拥有很多任务。

基础概念

持久化表示数据在当前进程结束后仍然存在;并发表示多个操作可能同时发生;一致性表示数据在规则约束下保持可解释和有效。

进一步理解

内存数组随服务器重启消失,文件写入虽能保留,却难以安全处理多人同时修改、查询和约束。数据库提供事务、锁与约束来协调这些问题。

一致性不是所有副本每一瞬间绝对相同,而是系统明确允许什么状态、何时可见以及冲突如何解决。业务规则必须落实到合适的服务与数据库边界。

放进实际场景

两台设备同时完成同一任务时,数据库应以明确更新条件处理,避免后写请求把对方的新状态意外覆盖。

容易混淆的地方

把数据写进磁盘不等于拥有数据库保证;一个 JSON 文件持久存在,却可能在并发写入时损坏或丢失更新。

这一小节记住:数据库的价值不仅是保存,还包括在多人和失败环境中维护规则。

概念 3

结构化数据与图片文件的不同存储方式

先用白话理解

页面样式改坏了还能重新发布,生产数据删错了却可能找不回来。所以数据库修改要更谨慎,备份、权限和迁移测试都不能省。

基础概念

结构化数据具有稳定字段并需要筛选、关联与约束,适合关系型数据库;图片、视频等大文件通常存入对象存储,数据库保存文件标识、地址、类型和归属信息。

进一步理解

把大文件直接塞进普通业务表会放大备份、查询和传输成本。对象存储擅长保存二进制内容,数据库擅长管理谁拥有它、如何查找和是否有效。

选择不是按扩展名机械决定。小型二进制有时可入库,JSON 也可能存数据库;关键是访问模式、大小、事务需求和生命周期。

放进实际场景

任务附件上传到对象存储,TaskAttachment 表保存 key、文件名、大小、上传者和 taskId;删除任务时按策略清理对应对象。

容易混淆的地方

对象存储地址不应自动公开。即使文件不在数据库,下载授权、删除规则和生命周期仍要由应用明确管理。

这一小节记住:内容本体与描述内容的元数据,可以由不同存储各取所长。

02

AI COLLABORATION

AI 如何参与

在为什么需要数据库这一课,AI 负责根据真实材料解释记录、表、字段、主键和关系并指出遗漏,学习者负责控制范围、执行修改和核对查询结果、影响行数、迁移记录和缓存命中情况。

推荐协作顺序

  1. 1

    把产品需要长期保留的事实列给 AI,让它先分实体。

  2. 2

    用几条真实查询反推字段和关系,删除只为页面排版存在的数据。

  3. 3

    让 AI 找出敏感字段、唯一性和删除影响,再决定模型。

可直接使用的 Prompt
这是产品 Brief 和三组真实示例数据。请先找实体、字段、关系和约束,再给最小表结构。不要提前加入推测功能。对每个字段说明来源,并列出三条会被拒绝的坏数据。
应该得到什么

说明数据库解决的是持久化与一致性问题,不把它简化为更大的数组;关系图应明确主键和归属;为什么需要数据库的人工验收必须回到真实页面、请求、终端、测试或数据结果,不能用 AI 的文字说明代替。

人工检查清单

  • 确认模型没有把密码明文保存,也没有用可变标题作为唯一身份。
  • 让 AI 从真实用户操作反推实体、字段、关系与约束,并逐项说明存在理由。
  • 用创建、查询、并发修改和服务器重启四种场景验证模型,而不是只看表图好不好看。
03

COMMON TRAPS

常见误区

下面三类问题会让任务看似完成,却经不起刷新、错误输入或真实环境检查。先看现象,再找原因和修正方法。

误区 1

按页面长相设计表

你会看到
界面一改,数据结构也被迫重做
为什么发生
界面是可替换的展示方式,数据库需要表达长期事实及其约束。
怎样纠正
从长期事实和业务规则出发
误区 2

用标题当主键

你会看到
同名任务无法稳定区分
为什么发生
标题允许重复和修改,引用它会让关联记录失去稳定目标。
怎样纠正
使用独立且稳定的标识
误区 3

允许所有字段为空

你会看到
数据库保存了无法使用的任务
为什么发生
数据库接受缺少必要信息的记录后,应用只能在更晚的位置失败。
怎样纠正
为必要事实设置非空与合理约束
04

HANDS-ON

动手任务

画出任务、用户和分类的最小数据模型,并为每个字段说明类型、是否必填和约束理由。

准备条件
  • 完成 5.6「把后端概念迁移到 Java / Spring Boot」

跟着做

  1. 01

    列出任务应用需要跨刷新保留的事实。

  2. 02

    把事实分为 User 与 Task 两类实体。

  3. 03

    为每类写字段、类型、是否必填和唯一性。

  4. 04

    画出一个用户拥有多条任务的关系。

  5. 05

    用三个用户问题检验模型能否回答。

完成标志

画出任务、用户和分类的最小数据模型,并为每个字段说明类型、是否必填和约束理由。

加餐挑战

加入任务标签,比较把标签写成逗号字符串与建立关系表的优缺点。

离开本课前,自问四件事

  • 记录、表、字段、主键和关系如何描述一条任务?
  • 持久化、并发和一致性分别解决什么问题?
  • 为什么一个能保存 JSON 的文件仍不等于数据库?
  • 任务附件的文件内容与元数据应如何分工存储?
完成本课了吗?

确认完成后,会同步更新学习中心的课程学习进度。