Starter 应用
数据库与迁移
安全使用 PostgreSQL、Drizzle schema、测试数据库和生产迁移执行器。
已与启动模板提交
7d452a6同步。
模板使用 PostgreSQL 与 Drizzle。src/db/schema.ts 是 schema 的唯一事实来源,src/db/migrations/ 中已提交的 SQL 是可部署历史。只有 src/models/** 可以调用 db()。
本地流程
pnpm setup 会创建独立的开发库和测试库。测试数据库名必须包含 test,否则安全保护会拒绝清空数据。
修改 schema 后运行:
pnpm db:generate
pnpm db:migrate
pnpm test:db:setup
pnpm test:db将生成的 SQL 和 meta/_journal.json 与代码一起提交,不要修改已部署的迁移。
生产流程
应用部署不会自动执行迁移:
pnpm db:check:prod
pnpm db:migrate:prod生产执行器非交互运行,使用 PostgreSQL advisory lock 并校验 migration checksum。先备份,并采用 expand/contract 变更,使旧代码和新代码都能在 schema 与应用分开发版期间工作。
数据约定
- 数字
id仅供内部使用,公开 API 使用uuid。 - 金额用最小货币单位的整数和币种保存。
- 租户数据含
org_uuid,模型查询必须按组织限定。 - 幂等键与交易号有数据库唯一约束。
- 模板有意避免大范围外键耦合,因此删除顺序和引用检查由服务与生命周期策略管理。
- 预约还使用 PostgreSQL exclusion constraint 防止已确认或保留时段重叠。
修改生产数据契约前,请阅读模板内的 docs/database.md 与 DEPLOYMENT.md。