数据库设计:跟踪修订版之间的标记更改

时间:2009-10-05 14:49:21

标签: mysql database-design tags versioning

我正在构建类似于the one Stack Overflow has的修订系统,有一件事我无法理解,在多个版本之间标记差异的最佳方法是什么?

我能想到的最简单的方法是我们有3个表,修订版,标签和另外两个链接这两个表。

每个版本都有自己的一组标签,唯一的问题是当你想要显示所有版本时,需要重新比较标签,找出差异,即使它们没有改变。

也许可以添加额外的一两个字段来标记已在先前版本中添加或删除的标记。

有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

不要过度复杂化您的架构,也不要过早优化。修订标签的成对比较是非常便宜的操作(前提是你在内存中有所有数据),并且可以在准备视图模型时完成。

答案 1 :(得分:0)

我说你走在正确的轨道上

T1: Revisions
|Item ID|revision ID|more...|

T2: Tags
|Tag ID|Tag fields...|

T3: Tags Per Revision
|Item ID|revision ID|Tag ID|  /* This will have multiple rows, 1 per tag) */

要查找标签差异,只需检索最后2个版本的标签,并使用您喜欢的任何语言的最喜欢的哈希图进行比较,或者您的语言可以有效地实现设置差异。