本项目的数据库管理采用 "Schema as Code" 模式,由 Flyway 和 SQLAlchemy 共同管理。 AI 在执行任何涉及数据库结构(Schema)的变更时,必须严格遵循以下流程。
🚫 禁止行为:
models 代码而不创建 SQL 迁移脚本(这会导致代码与数据库不一致)。V 开头的 SQL 文件(历史记录不可篡改)。当用户提出需求(如:“给用户表加一个手机号字段”)时,AI 需按顺序执行以下步骤:
sql/ 文件夹。V4__xxx.sql)。V5)。在 sql/ 目录下创建新文件。
命名规则:V{Version}__{Description}.sql
V 大写。__)。sql/V2__add_phone_column.sql内容规范:
-- 示例内容
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20) DEFAULT NULL COMMENT '用户手机号';
-- 如果是创建表
CREATE TABLE IF NOT EXISTS new_table (...);
修改后端代码以匹配新的数据库结构。
backend/app/models/user.py),添加或修改对应的 Column 定义。
# backend/app/models/user.py
class User(Base):
# ... 原有字段
phone_number = Column(String(20), nullable=True, comment="用户手机号") # 新增
如果该字段需要通过 API 暴露或接收,需同步修改 Schema。
backend/app/schemas/UserBase 或 UserCreate/UserUpdate 模型中添加字段。用户指令:
"帮我增加一个功能,记录用户的最后登录IP。"
AI 应执行的操作:
sql/,发现最新是 V1__init.sql。创建文件:sql/V2__add_last_login_ip.sql。
ALTER TABLE users ADD COLUMN last_login_ip VARCHAR(50) DEFAULT NULL;
backend/app/models/user.py。
python
last_login_ip = Column(String(50), nullable=True)
修改 Schema:backend/app/schemas/user.py (视情况而定)。
回复用户:
"已为您创建了数据库迁移脚本
V2并更新了后端模型。请执行docker-compose up -d以应用变更。"
如果 Flyway 启动失败(校验和错误):
uap_migration 容器手动运行 flyway repair,或者在开发环境中清理 flyway_schema_history 表中的失败记录。