0

好的,这是一个很难解释的问题。

我正在创建一个具有 PAGES 的应用程序,目前我使用 PageID 作为 SEL 记录的键。

我现在遇到的问题是我希望用户能够编辑页面,但不会丢失前一页(出于历史记录、记录保存原因,例如更改日志或 wiki 页面历史记录)。

这让我觉得我需要 PAGE 表中的一个新字段作为 pageID,但不是每次添加行时自动递增的主键。

Google 文档有一个 DOCID:/Doc?docid=0Af_mFtumB56WZGM4d3Y3d2JfMTNjcDlkemRjeg

这样我就可以拥有多个具有相同文档 ID 的记录,并根据 dataAdded 字段显示历史更改日志。当用户想要查看该 DOCID 时,我只需拉出最近的一个。

想法?我感谢您的聪明想法为我指明了正确的方向!

4

6 回答 6

2

你在正确的轨道上。您需要的是历史记录或修订 ID,以及文档 ID。历史 id 将是主键,但您也将在文档 id 上有一个键用于查询目的。

使用历史跟踪,您会为您的应用程序增加一点复杂性。您必须注意文档的主视图显示当前的历史修订(即给定文档 ID 的最大历史 ID)。

同样,如果您要存储大型文档,则每次编辑本质上都会将文档的另一个副本添加到您的数据库中,并且表格将很快变得非常大。您可能需要考虑实现某种“差异”存储,在其中仅存储对文档的更改而不是全部内容,或者将历史编辑保存在单独的表中,仅用于历史搜索。

于 2009-12-30T20:09:12.750 回答
1

UUID() 创建一个随机生成的 128 位数字,例如 '6ccd780c-baba-1026-9564-0040f4311e29' 这个数字在几百万年内不会重复。

//注意大多数数字是基于时间戳和机器信息的,所以很多数字在重复调用时会相似,但它总是唯一的。

于 2009-12-30T20:29:54.217 回答
0

对我来说,这听起来像是两张桌子的好工作。你可能有一张page_header桌子和一张page_content桌子。标题表将保存静态信息,如标题、分类(无论如何),内容表将保存实际的可编辑内容。每次用户更新页面时,插入一条新page_content记录而不是更新现有记录。当您显示页面时,请确保您获取最新page_content记录。这是保留历史记录并在需要时回滚的简单方法。

祝你好运!

于 2009-12-30T20:30:59.957 回答
0

每个文档实际上都是一个修订版:

文档 - (doc_id)

修订版 -(rev_id、doc_id、version_num、名称、描述、内容、作者 ID、活动 tinyint 默认 1)

然后您可以仅使用 rev_id 打开任何内容:/view?id=21981

select * from revision r, doc d where r.rev_id = ? 和 r.doc_id = d.doc_id

于 2009-12-30T20:05:05.343 回答
0

保留一个包含更改历史记录的审计表。例如,如果您需要回滚更改或查看更改历史记录,这将允许您返回。

于 2009-12-30T20:06:08.633 回答
0

你可以这样建模:

  • 一个应用程序有多个页面,一个页面有多个版本(每个版本都有一些版本信息(例如,日期、编辑计数)和其页面的外键)
  • 查看页面显示最新版本
  • 保存编辑会创建一个新版本
于 2009-12-30T20:08:54.403 回答