You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.3 KiB
4.3 KiB
项目数据库扩展计划
版本:v1.0
日期:2025-01-14
状态:✅ 已完成
背景
前端 client/src/types/project.ts 定义了影视项目的核心元数据字段(内容类型、画幅比例、时长、故事梗概等),但后端数据库设计中缺少这些字段。为保证前后端数据结构一致性,需要扩展 projects 表。
目标
- 在
projects表中新增 7 个影视项目元数据字段 - 创建必要的 ENUM 类型和索引
- 更新后端数据模型和 Schema 定义
- 保持向后兼容(所有新字段均为可选)
新增字段清单
| 字段名 | 类型 | 说明 | 前端对应字段 |
|---|---|---|---|
content_type |
project_content_type |
项目内容类型 | contentType |
aspect_ratio |
aspect_ratio_type |
画幅比例 | aspectRatio |
planned_duration |
INTEGER |
计划总时长(秒) | plannedDuration |
actual_duration |
INTEGER |
实际总时长(秒) | actualDuration |
tagline |
TEXT |
一句话概括 | tagline |
synopsis |
TEXT |
故事梗概 | synopsis |
style_and_characters |
TEXT |
风格和角色描述 | styleAndCharacters |
ENUM 类型定义
project_content_type
CREATE TYPE project_content_type AS ENUM (
'ad', -- 广告片
'movie', -- 电影
'series', -- 剧集
'anime', -- 动画
'short', -- 短视频
'concept' -- 概念片
);
aspect_ratio_type
CREATE TYPE aspect_ratio_type AS ENUM (
'16:9', -- 标准宽屏
'9:16', -- 竖屏(手机)
'4:3', -- 传统电视
'21:9', -- 超宽屏
'1:1', -- 正方形
'2.35:1', -- 电影宽银幕
'2.39:1' -- 电影超宽银幕
);
索引策略
| 索引名 | 字段 | 类型 | 用途 |
|---|---|---|---|
idx_projects_content_type |
content_type |
B-tree | 按内容类型筛选 |
idx_projects_aspect_ratio |
aspect_ratio |
B-tree | 按画幅比例筛选 |
idx_projects_planned_duration |
planned_duration |
B-tree | 按计划时长排序 |
idx_projects_actual_duration |
actual_duration |
B-tree | 按实际时长排序 |
idx_projects_tagline_trgm |
tagline |
GIN | 全文搜索 |
idx_projects_synopsis_trgm |
synopsis |
GIN | 全文搜索 |
影响范围
✅ 无破坏性变更
- 所有新字段均为
NULL可选 - 不影响现有数据和查询
- 向后兼容
📝 需要后续配合
-
后端 API:
- 更新
ProjectCreate和ProjectUpdateSchema - 在 API 响应中返回新字段
- 添加按
content_type、aspect_ratio筛选的查询参数
- 更新
-
前端表单:
- 添加内容类型选择器
- 添加画幅比例选择器
- 添加 tagline、synopsis、style_and_characters 输入框
-
数据迁移(可选):
- 如果
settings中已存储相关数据,可编写脚本迁移到新字段
- 如果
实施记录
已完成
- ✅ 更新
docs/需求/backend/04-services/project/project-service.md- 新增 ENUM 类型定义
- 扩展
projects表结构 - 新增 7 个字段和 6 个索引
- 更新字段注释
- ✅ 更新 Python 数据模型(
Project类)- 新增
ProjectContentType和AspectRatioType枚举 - 新增 7 个字段定义
- 新增
- ✅ 更新 Pydantic Schema
ProjectCreate:支持创建时传入新字段ProjectUpdate:支持更新新字段ProjectResponse:返回新字段
后续建议
- 优先级 P0:更新后端 API 实现,支持新字段的 CRUD
- 优先级 P1:前端表单集成新字段输入
- 优先级 P2:添加按内容类型和画幅比例的筛选功能
- 优先级 P3:全文搜索支持 tagline 和 synopsis
文档版本:v1.0
最后更新:2025-01-14