版本模型详解

版本模型详解

M-Doc 的版本管理采用三层模型:文档 → 版本 → 文章,支持类 Git 的版本控制能力。


三层模型

Document(文档)
├── DocumentVersion(版本)
│   ├── DocumentVersionArticle(版本-文章关联)
│   │   └── ArticleVersion(文章版本快照)
│   └── ...
├── DocumentVersion(另一个版本)
│   └── ...
└── default_version_id → 指向默认版本

Document(文档)

文档是最顶层的容器,归属于组织。

字段 说明
id 文档 ID
name 文档名称
slug URL 标识
organization_id 所属组织
default_version_id 默认版本
visibility 可见性

DocumentVersion(版本)

每个文档可以有多个版本,每个版本包含独立的文章树。

字段 说明
id 版本 ID
document_id 所属文档
name 版本名称(如 master, v1.0.0)
parent_id 父版本 ID(Fork 来源)
status 版本状态

Article(文章)

文章是逻辑实体,通过 stable_key 跨版本追踪。

字段 说明
id 文章 ID
document_id 所属文档
stable_key UUID,跨版本不变
title 文章标题

ArticleVersion(文章版本)

每次发布生成的内容快照。

字段 说明
id 文章版本 ID
article_id 所属文章
content Markdown 内容
commit_hash SHA1 哈希(40字符)
short_hash 短哈希(7字符)
commit_message 提交说明
parent_commit_hash 父版本哈希
status draft / published

DocumentVersionArticle(关联表)

连接版本和文章的中间表,定义文章在版本中的位置。

字段 说明
document_version_id 版本 ID
article_id 文章 ID
article_version_id 文章版本 ID
parent_article_id 父文章 ID(层级结构)
sort_order 排序序号

stable_key 跨版本追踪

stable_key 是文章的全局唯一标识(UUID),在 Fork 版本时保持不变。这使得系统能够:

  1. 识别同一文章:在不同版本中找到同一篇文章
  2. 支持合并:基于 stable_key 匹配源和目标文章
  3. 追踪变化:对比同一文章在不同版本中的内容差异
v1.0.0                          v2.0.0(Fork 自 v1.0.0)
├── 文章A (stable_key: abc)     ├── 文章A (stable_key: abc)  ← 同一篇
├── 文章B (stable_key: def)     ├── 文章B (stable_key: def)  ← 同一篇
└── 文章C (stable_key: ghi)     ├── 文章C (stable_key: ghi)  ← 同一篇
                                └── 文章D (stable_key: jkl)  ← v2.0.0 新增

版本 Fork 流程

Fork 操作的内部流程:

  1. 创建新的 DocumentVersion 记录
  2. 复制源版本的所有 DocumentVersionArticle 记录
  3. 保持相同的 article_idarticle_version_id
  4. 新版本与源版本共享文章实体和版本快照
  5. 后续编辑在新版本中创建独立的文章版本