【问题标题】:MySQL - Coming up with a Unique Key for each record, not the primary KeyMySQL - 为每条记录提供唯一键,而不是主键
【发布时间】:2009-12-30 19:57:32
【问题描述】:

好的,这很难解释。

我正在创建一个包含 PAGES 的应用,目前我使用 PageID 作为 SEL 记录的键。

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

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

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

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

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

【问题讨论】:

  • 或者我应该使用 parentID?递归?

标签: mysql primary-key key uniqueidentifier identification


【解决方案1】:

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

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

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

【讨论】:

  • 有什么简单的 DIFF 存储方法吗?我想更好地了解您的 Revision_ID、Doc_ID。你能提供一些记录的例子吗? / 表?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • Wiki 或任何应用程序会这样做吗?
    【解决方案4】:

    你可以这样建模:

    • 一个应用有多个页面,一个页面有多个版本(每个版本都有一些版本信息(例如,日期、编辑计数)和页面的外键)
    • 查看页面会显示最新版本
    • 保存编辑会创建一个新版本

    【讨论】:

      【解决方案5】:

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

      doc - (doc_id)

      revision - (rev_id, doc_id, version_num, name, description, content, author_id, active tinyint default 1)

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

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

      【讨论】:

      【解决方案6】:

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多