Skip to content

数据库表设计 × AI ​

表为 API 服务:列与响应字段可追溯;脚本可重复执行;seed 先查再插。

AI CODING · 场景三 · 数据模型

先服务主路径只读。用户系统、权限大表一律后置。把「可重复」写进给 AI 的 Prompt,否则 AI 很容易写出只能跑一次的脚本。

表 2seed 幂等时间 半晚~一晚
开始本节 →
本节要点
  • meal_scenes / dishes 最小表与列 ↔ JSON 对照
  • 幂等 seed 模式 + 可粘贴 Prompt
  • 空库执行两次 seed 的验收剧本

最小表 ​

表关键列说明
meal_scenesid PK, label用餐场景字典
dishesid PK, scene_id FK/索引, title, summary, body, reason, tip菜品内容

ER 文字版 ​

text
meal_scenes 1 ──< dishes
  id                scene_id
  label             title / summary / body / reason / tip

列 ↔ API 对照 ​

列API JSON说明
meal_scenes.idid与前端 MealSceneId 字符串一致
meal_scenes.labellabel展示名
dishes.scene_idsceneId命名转换写进代码一层
dishes.bodybody详情正文;列表用 summary
reason / tipreason / tip与前端 Mock 对齐;若曾用 notice/hint,在对照表写死映射
常见翻车 前端 sceneIds: []、库表单 scene_id、API 又输出 scene——三套名字。Prompt 必须贴对照表。

建表示意(SQL 草案,按引擎调整) ​

sql
CREATE TABLE IF NOT EXISTS meal_scenes (
  id TEXT PRIMARY KEY,
  label TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS dishes (
  id TEXT PRIMARY KEY,
  scene_id TEXT NOT NULL,
  title TEXT NOT NULL,
  summary TEXT NOT NULL,
  body TEXT NOT NULL,
  reason TEXT NOT NULL,
  tip TEXT NOT NULL
);

CREATE INDEX IF NOT EXISTS idx_dishes_scene
  ON dishes(scene_id);

Seed 幂等模式 ​

text
for each row:
  if exists by id → skip
  else insert

禁止「每次 truncate 全表」作为默认教学路径(演示环境可另说,但要写明)。

seed 至少覆盖:solo 场景 + dish-tomato-egg(或你合同里的默认菜),保证主路径 curl 非空。

跟做步骤 ​

  1. 确认上一页内存 API curl 已绿。
  2. 贴下方给 AI 的 Prompt;先看 ER + seed 样例行。
  3. 确认后落表 / 迁移 / seed;API 改读库。
  4. 空库跑两次 seed,行数不翻倍。
  5. 再跑 dishes curl;全绿进 部署。

给 AI 的 Prompt ​

给 AI · Prompt · 表 + 迁移 + seed + 接 API
text
【目标】落 meal_scenes / dishes 表;seed 覆盖主路径;三个只读 API 改读库。

【约束】
- 建表/迁移可重复执行
- seed 可重复;业务主键不重复插入
- 附列 ↔ JSON 对照表
- 分层:repository 读库,service 组装响应,路由保持薄

【不要】用户表、权限表、上微服务、换数据库引擎(除非仓库已定)
【不要】stages / recommendations 旧表名(本切片是用餐场景 / 菜品)

【请你】
1. ER 说明 + 建表草案
2. seed 样例 2 行(我看结构)
3. 确认后再落文件并改读取路径
4. 给出:空库执行两次 seed 的预期

验收剧本 ​

bash
# 1) 按 README 建表
# 2) seed 第一次
# 3) seed 第二次 —— 行数不应翻倍
curl -s "http://127.0.0.1:8000/api/dishes?scene=solo" | python -m json.tool | head
curl -s http://127.0.0.1:8000/api/dishes/dish-tomato-egg | python -m json.tool | head
  • [ ] 空库一次成功;再执行一次不炸、不翻倍
  • [ ] 过滤与详情字段与合同一致
  • [ ] README 写清「如何重置本地库」(可选,教学友好)

纠错 ​

现象话术
第二次 seed 主键冲突「改成先查再插;不要裸 insert。」
API 仍读内存「指出仍用内存的文件,改成走 repository。」
JSON 仍是 snake_case「在 service 做映射,路由层不要散落 rename。」
表名又变回 stages「本切片表名 meal_scenes / dishes,与合同一致。」

下一页:部署上线。

晨悦 AI 实践手册