2009-12-30 60 views
0

好吧,这是一个棘手的解释。MySQL - 为每个记录创建一个唯一密钥,而不是主键

我创建一个应用程序,将有网页,我目前使用PAGEID为重点,以SEL记录。

我现在遇到的问题是,我希望用户能够编辑网页,但不会失去以前的网页(历史记录保留的原因,像更新日志或wiki页面的历史)。

这让我觉得我需要充当的pageID页表一个新的领域,但不是主键是自动递增每次添加一个行时间。

谷歌文档有DOCID:/文件文档ID = 0Af_mFtumB56WZGM4d3Y3d2JfMTNjcDlkemRjeg

这样我可以有相同的文件ID的多个记录,并给出一个对dataAdded领域的历史变更记录。当用户想要查看该DOCID时,我只需拖动最近的一个。

想法?我感谢你的聪明才智,指引我走向正确的方向!

+0

或者我应该使用parentID?递归? – AnApprentice 2009-12-30 19:58:47

回答

0

每个文档是一个真正的修订:

DOC - (DOC_ID)

修订 - (rev_id,DOC_ID,VERSION_NUM,名称,描述,内容,AUTHOR_ID,积极TINYINT默认1)

那么你可以只用rev_id打开任何内容:/视图id = 21981

SELECT * FROM修订R,DOC d其中r.rev_id =?和r.doc_id = d.doc_id

+0

非常有趣......那么哪个是DB中的主键? – AnApprentice 2009-12-30 20:29:53

+1

是的,这听起来像是你在寻找和我一样的东西。 http://stackoverflow.com/questions/1933929/database-table-setup-for-revision-tracking-with-orm – Xeoncross 2009-12-30 20:34:16

+0

rev_id是pk – jspcal 2009-12-31 01:12:45

0

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

+0

Wiki或任何应用程序做到这一点吗? – AnApprentice 2009-12-30 23:03:59

0

你可能会喜欢这一点,型号:

  • 的应用程序有多个页面,一个页面有多个版本(每个有一些版本信息(例如,日期,编辑次数),以及一个外键,它的页面)
  • 查看页面显示最新版本
  • 保存编辑创建一个新版本
2

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

随着历史记录的跟踪,你的应用程序增加了一点复杂性。您必须小心,文档的主视图显示当前历史修订(即给定文档ID的最大历史记录ID)。

同样,如果你存储大量的文件,每个编辑基本上要到文档的另一副本添加到您的数据库,该表将很快变得非常大。您可能需要考虑实施某种“差异”存储,其中只存储对文档的更改而不存储所有内容,或者将历史编辑保存在单独的表中,仅用于历史记录搜索。

+0

任何简单的做DIFF存储的方法?我想更好地了解您的Revision_ID,Doc_ID。你能提供一些记录的例子吗?/table? – AnApprentice 2009-12-30 23:05:44

1

UUID()创建一个随机生成的128位数字,比如 “6ccd780c-巴巴1026-9564-0040f4311e29” ,此号码不会在数百万年前被重复。

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

0

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

祝你好运!

+0

这就是维基百科完成这项工作的原因吗? – AnApprentice 2009-12-30 21:45:03

相关问题