database.md 1.4 KB

数据库结构与迁移

VOKO 使用独立 MySQL 8.4 库(本地默认 voko),不连接 shadiao-2d 的 idearun / idearun_visual_game / visual_game_stage。时间列 DATETIME(3) 存 UTC,列名与字段统一 snake_case。

结构事实源

  • packages/*/src/db/tables/*.cjs:当前完整结构,apps/voko-server/src/db/schema.js 汇总为 vokoTargetTables。
  • apps/voko-server/src/db/migrations/*.js:已存在的库如何从一个版本变到下一个版本。历史表 voko_schema_migrations。
  • 服务启动不执行 DDL。改表必须同时改 tables/*.cjs 和新增一个 migration。

命令

目的 命令 只能用于
新空库建表 pnpm --filter @voko/server db:init 确认没有任何表的空库
执行未执行的 migration pnpm --filter @voko/server db:migrate 已 init 的库
查看状态 pnpm --filter @voko/server db:status 已 init 的库

三个命令都读取 apps/voko-server/.env 的 DATABASE_URL,或用 --env <文件> 指定;都未设置时连本地开发库 voko。

纪律

  • migration 只在合入主干之后,才允许在 stage / 生产等共享库执行;开发只连本地库。
  • 唯一性、非空、状态与字段组合一律写成 DB 约束(UNIQUE / NOT NULL / CHECK),不在应用层先查再写。
  • 禁止对共享库执行 init;禁止在共享库上手工改结构。