当前项目的 backend/prisma/schema.prisma 已经基本代表了当前数据库的稳定结构,可以视为第一版数据库模型。但仓库中的 backend/prisma/migrations 目录存在以下问题:
20260628050000_add_customer_follow_content 依赖 customer 表存在,却早于 20260628120000_add_customer_table。20260628173000_add_template_used_count 是后补增量,而用户已经手动执行过对应 SQL。用户希望把现在这一版数据库正式收敛为“第一个稳定版本”,后续新功能再继续追加新的 migration。
本次调整后,需要满足以下目标:
schema.prisma 继续作为当前稳定数据库结构的唯一事实来源。backend/prisma/migrations 目录只保留一条 v1 baseline migration。v1 baseline 继续追加新的增量 migration。以下内容不在本次范围内:
schema.prisma 回退到旧版本状态。做法:
init_v1 作为“以后认这个版本”的基线。优点:
缺点:
做法:
schema.prisma 与数据库设计,新增一条 init_v1。优点:
缺点:
采用 方案 B:删除全部旧 migration,只保留一个新的 baseline。
调整后,backend/prisma 的目标结构如下:
backend/prisma/
schema.prisma
migrations/
20260628_init_v1/
migration.sql
要求:
20260628050000_add_customer_follow_content20260628120000_add_customer_table20260628173000_add_template_used_countmigrations 目录内只保留一个 init_v120260628_init_v1 表示当前项目第一版稳定数据库结构。
它不是增量修改脚本,而是一个完整初始化脚本,语义是:
baseline migration 的 SQL 内容必须与以下两处保持一致:
backend/prisma/schema.prismabackend/docs/数据库设计.md其中:
schema.prisma 是代码层的事实来源。数据库设计.md 用于校验字段注释、表注释和索引注释是否完整。至少包含当前稳定版本中的全部核心表:
hairstylist_usercustomercustomer_treatment_recordai_hair_simulationai_hair_simulation_taskhair_templatehair_template_make_tasksystem_config并包含:
hair_template.used_count当前开发环境数据库已经存在,且用户已手动执行过部分 SQL。此时不能把新的 init_v1 当成一条要“重新执行建表”的 migration 直接运行到现有数据库上,否则会和已有表冲突。
本次设计把处理分成两层:
20260628_init_v1/migration.sqlv1 baseline 状态原则上,现有开发库不需要重建,也不需要重新执行 baseline SQL。
需要做的是:
schema.prisma 一致20260628_init_v1 已经是“已应用状态”本次重置 migration 历史时,不允许顺手修改当前数据库结构定义。schema.prisma 中现有的稳定结构应保持不变。
因为用户对 SQL 质量有明确要求,所以 baseline SQL 必须保留:
不能只生成“无注释的最小 SQL”。
一旦 init_v1 建立完成,后续新增字段或表时:
init_v1除非未来再次明确决定整体重置数据库基线。
如果 migration.sql 漏了字段或索引,新环境初始化会和当前开发环境不一致。
规避方式:
schema.prisma 和 数据库设计.md 做逐项校验。如果在已有数据库上直接执行 init_v1,会因为表已存在而失败。
规避方式:
如果未来继续把字段直接改进 init_v1,新的迁移历史会再次失真。
规避方式:
init_v1 只代表第一版稳定结构。本次完成后,应满足以下验收标准:
backend/prisma/migrations 中只剩一个 20260628_init_v1 目录。migration.sql 能完整表达当前稳定数据库结构。migration.sql 包含 used_count 等当前稳定字段。schema.prisma 与 baseline SQL 一致。v1 baseline 之上继续新增 migration。