【问题标题】:Database design for text revisions文本修订的数据库设计
【发布时间】:2010-10-19 13:03:16
【问题描述】:

This question 包含一些关于如何为数字或多项选择字段等数据设计数据库历史/修订方案的精彩内容。

但是,对于大文本字段的讨论并不多,这在博客/问答/wiki/文档类型系统中很常见。

那么,在基于数据库的编辑系统中存储文本字段的历史记录被认为是一种好的做法?将其存储在数据库中是个好主意吗?

【问题讨论】:

  • 我假设您想嵌入一个链接(“此问题包含...”),所以请编辑您的帖子并包含它。

标签: database text versioning


【解决方案1】:

我开发了一个 wiki 引擎,页面/文章修订存储在数据库表中。每个版本都有一个连续的版本号,而“当前”版本用 -1 标记(只是为了避免 NULL)。

修订文本按原样存储,而不是差异或类似的东西。

我认为性能不是问题,因为您不太可能经常访问旧版本。

【讨论】:

  • 我做了同样的事情,到目前为止对我来说效果很好。该系统已经存在 2 年了。
【解决方案2】:

鉴于目前的 HDD 技术状态,尝试优化 文本 存储机制是不值得的:Document (ID, Name)DocumentRevision (ID, DocumentID, Contents) 表将完成这项工作。 DocumentRevision 中的 ID 也可以用作“存储库”范围的修订号。如果这不是您想要的行为,请为每个文档修订分配一个单独的 VersionID

【讨论】:

    【解决方案3】:

    通常,跟踪文档版本最明智的方法是跟踪对其所做的更改。然后,如果请求特定版本,则可以根据当前文档和部分更改集重新构建它。

    因此,如果您有一种描述文档更改类型的好方法(这在很大程度上取决于文档是什么以及它是如何使用的),那么请务必使用数据库来跟踪更改以及版本。

    【讨论】:

    • 仅存储修订之间的差异具有节省空间的优势,但它会减慢检索/重建特定修订的过程,并且还会增加数据损坏的可能性(如果修订丢失怎么办? )。
    • 是的,这些都是有效积分。最佳方法介于两者之间,我想对我认为的类型数据相当敏感。在有人更正一两个单词的拼写的情况下,再次存储整个文档似乎有点过头了。
    • @Dario 我同意并赞成你对这个问题的回答,但我不同意你在这里的评论。正如您自己指出的那样,担心从数据库中“丢失”数据并不是一个好的推理,减缓检索特定修订的过程也不是什么问题,因为您不太可能经常访问旧版本。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2011-11-19
    • 2011-02-10
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多