Files

8.4 KiB
Raw Permalink Blame History

数据库现状与维护规范 V1

文档状态:当前有效
基线日期:2026-07-15
唯一结构真相:backend/prisma/schema.prismabackend/prisma/migrations/

1. 当前事实

  • 数据库:MySQL。
  • ORMPrisma 6。
  • Model69 个。
  • Prisma Enum0 个。
  • 已部署迁移:40 个。
  • 迁移状态:审计时全部已部署。
  • 状态字段主要是字符串,存在历史值漂移风险。

本文只解释领域结构和维护规则,不复制所有字段。字段、索引、默认值和约束以 Prisma schema 为准。

2. 领域分组

2.1 用户、项目与偏好

  • User
  • UserModelPreference
  • Project
  • ProjectPipelineConfig
  • ProjectCreativePattern
  • CreativePattern

2.2 小说与 Agent

  • NovelSource
  • NovelChapter
  • NovelReadingProgress
  • NovelBookmark
  • NovelAnnotation
  • NovelGenerationPlan
  • NovelChapterVersion
  • NovelContextMemory
  • NovelQualityReport
  • NovelVersionSnapshot
  • NovelDerivativeJob
  • AgentPrompt
  • AgentRun

2.3 故事、世界观与版权

  • CopyrightRecord
  • StoryBible
  • WorldBible

2.4 角色与 IP 资产

  • Character
  • StoryCharacter
  • CharacterExtractionVersion
  • GlobalCharacter
  • GlobalCharacterAsset
  • CharacterProviderBinding
  • GlobalCharacterLookVersion
  • CharacterImage
  • CharacterImageQualityReview
  • CharacterMemory
  • CharacterDesignVersion
  • CharacterPromptVersion
  • CharacterPromptReview
  • CharacterPromptOptimizationLesson
  • CharacterState
  • ActorProfile
  • ProjectVisualAsset

2.5 剧集与媒体生产

  • Episode
  • EpisodeScript
  • StoryboardShot
  • ShotGenerationPlan
  • ShotImage
  • VideoClip
  • PlotMemory
  • PlotThread
  • ContinuityCheck

2.6 素材、任务与 Provider

  • Asset
  • RenderTask
  • ProviderConfig
  • ModelCapabilityVersion
  • ModelParameterSchemaVersion
  • ModelPricingVersion
  • ProviderLog

2.7 计费、审核与运营

  • Order
  • QuotaAccount
  • QuotaLog
  • RevisionRequest
  • ContentReview
  • CaseShowcase
  • HitAnalysisCase
  • HitAnalysisSegment
  • AnalyticsEvent
  • SystemConfig
  • OperationLog

2.8 S+ 生产合同

  • ProductionSourceSnapshot
  • ProductionContract
  • ProductionContractReview

Project.engine_version 隔离历史写路径与 splus_v1 新内核;Project.production_lifecycle 记录当前生产阶段。数据库默认值保持 legacy_v1 / legacy_snapshot,避免迁移把历史项目误标为新项目;应用层只为普通新项目明确写入 splus_v1

3. 关键关系

User
└── Project
    ├── NovelSource -> NovelChapter -> ChapterVersion/Quality/Memory
    ├── StoryBible / WorldBible
    ├── Character / ProjectVisualAsset
    ├── Episode -> EpisodeScript -> StoryboardShot
    │                               ├── ShotGenerationPlan
    │                               ├── ShotImage
    │                               └── VideoClip
    ├── Asset
    ├── RenderTask
    └── ProductionSourceSnapshot
        └── ProductionContract -> ProductionContractReview

ProviderConfig -> ModelCapabilityVersion/ModelParameterSchemaVersion/ModelPricingVersion
ShotGenerationPlan -> 三类不可变模型注册表版本 -> ShotImage/VideoClip/RenderTask
ProviderConfig -> ProviderLog -> Asset/业务对象
GlobalCharacter -> LookVersion/Asset/CharacterProviderBinding -> Project Character/ActorProfile

全局角色与项目角色不是同一层:全局角色用于复用演员母版,项目角色承载本项目身份、服装、状态和授权范围。

生产合同按类型、范围和版本追加写入;已确认版本不原地覆盖。来源快照保存正文与哈希,合同保存父版本、输入哈希、来源引用、质量结果和下游放行状态。

ProviderConfig 是允许运营调整的工作配置,不作为历史执行凭证。每次 S+ 镜头冻结前,系统按规范化内容哈希发布或复用三类不可变注册表版本,并把版本 ID 和内容快照写入 ShotGenerationPlan。能力、参数 Schema 或价格发生变化时创建下一修订,不更新旧修订。

CharacterProviderBinding 保存平台角色与供应商长期角色资产之间的真实绑定。当前字段覆盖供应商与元素 ID、元素类型、源视频、外观版本、声线、质检分、审批状态、主版本和绑定修订。正式生成只读取 approved 绑定;镜头冻结后,所用元素 ID 会复制进入 ShotGenerationPlan.element_plan_json,后续修改角色主元素不会污染旧计划。

4. 数据快照

审计时主要数据量:

数据 数量
用户 2
项目 20
小说源 10
小说章节 256
故事圣经 13
项目角色 87
全局角色 14
分集 87
单集剧本 21
分镜 114
素材 977
任务 748
Provider 配置 114
Provider 调用日志 1002
模型能力版本 156
参数 Schema 版本 156
价格版本 114
角色供应商绑定 0
内容审核记录 0
操作审计记录 44

该表是 2026-07-15 快照,不应作为实时运营数据使用。实时数量应从数据库只读查询或管理后台获得。

5. 状态治理

当前 Prisma 没有数据库 Enum,状态由字符串常量和业务代码约束。已发现 RenderTask 中存在历史 completed,而当前代码使用 success

后续要求:

  1. 每个业务域建立唯一状态字典。
  2. API 入参、Service、前端展示和 Worker 共用同一组状态语义。
  3. 删除状态前先提供兼容读取和数据迁移。
  4. 未知历史状态必须显示为“需迁移”,不能静默当成功或失败。
  5. 新状态需更新数据库文档、API 契约和测试。

6. JSON 字段规则

JSON 适合保存:

  • Provider 原始参数和归一结果。
  • Prompt、质量报告和调用快照。
  • 非核心扩展元数据。

以下信息不应只存在 JSON

  • 需要频繁筛选、排序或唯一约束的核心字段。
  • 业务主状态。
  • 资产、角色、分镜和 Provider 的主外键。
  • 财务扣减所需的金额和流水关系。

JSON 结构发生兼容性变化时,应写入 schema_version 或提供读时迁移。

7. 迁移流程

每次 schema 变更必须遵循:

  1. 说明业务目的、影响表和回滚策略。
  2. 在备份或可恢复环境验证数据量和锁表风险。
  3. 修改 schema.prisma 并生成命名清晰的迁移。
  4. 审阅 SQL,禁止无意删除列、索引或生产数据。
  5. 更新受影响的 DTO、Service、测试和前端类型。
  6. 运行 Prisma 校验、构建和相关测试。
  7. 先部署兼容代码,再执行破坏性清理。
  8. 更新 CHANGELOG.md、本文件和状态文档。

禁止手工改生产表后不补迁移。

8. 备份与恢复

当前数据库和素材都在单机,备份应成对管理:

  • MySQL 逻辑备份或一致性快照。
  • storage/private 增量备份。
  • schema、迁移和部署版本标识。
  • 备份校验和、保留期和异地副本。

恢复演练必须验证:

  1. 数据库可恢复并通过迁移检查。
  2. Asset.storage_key 对应文件存在。
  3. 视频可 Range 播放,图片和音频可下载。
  4. RenderTask、ProviderLog 和业务资产关系没有断链。
  5. 用户权限和密钥配置不从文档包恢复。

9. 隐私与敏感信息

  • Work 只上传模型名称、表名、字段职责和聚合统计。
  • 不上传用户邮箱、手机号、JWT、API Key、密码哈希或私有素材 URL。
  • Provider 原始响应进入日志前需屏蔽鉴权头和签名参数。
  • 删除用户或项目时,必须明确数据库记录、素材对象和外部任务的处理策略。

10. 当前问题

  1. 状态字段自由字符串较多。
  2. completed 等历史状态未迁移。
  3. 本地素材和数据库缺少已验证的成套恢复流程。
  4. ContentReview 为 0 条,需要确认正式审核是否绕过该模型。
  5. 成本字段存在历史币种/口径差异。
  6. 69 个 Model 尚无自动生成的数据字典和关系图。

11. 下一阶段

  • 建立状态字典和历史状态迁移。
  • 增加数据库与素材每日备份脚本及恢复演练记录。
  • 增加注册表待发布差异预览、管理员确认和回滚到旧修订的操作审计。
  • 从 Prisma 自动生成不含敏感值的数据字典。
  • 为核心关系增加删除策略和孤儿资产检查。
  • 统一 Provider 成本币种、精度和财务流水口径。