我使用MS SQL Server2005年。

什么是最好的架构Wiki-像系统吗?在用户编辑/修订一个提交和系统跟踪这些提议。

可以说我们正在做一个简单的wiki为基础的系统。将继续跟踪每个修订的加景和最新活动的每一个版本。在其他屏幕,该系统将列出"最新的提交书"和"大多数观察",再加上按标题搜索.

我的电流模式(并且我知道它坏)是使用一个单一的表格。当我需要看到的"最新提交"我的"LatestActivity",由"DocumentTitle",然后采取的第一个N的记录。我想了很多的分组(特别是分组上限)是坏消息。列名的大多数看我也做相同的:排序的意见、组的名称,采取的第一个N的记录。大部分时间,我也将做一个"文档在哪里LIKE'%查询这里%'".

我当前的架构"的版本1",详情如下:alt文本http://www.anaimi.com/junk/schemaquestion.png

我假定这是不可接受的。所以我试图找出另/更高效设计。如何版本2的声音吗?在两个版本,我获得优势的组在WikiHeadId这一数-我假设分组在一个号码是更好的比限.

或极端的情况下,这是第3版,在那里我会做没有分组的,但是有几个缺点,例如重复的价值观,维护这些价值观在代码等。

是否有更好的/已知的架构为这样的系统?

谢谢。

(从ServerFault-我认为它是一个发展问题比这个问题)

有帮助吗?

解决方案

首先(和出于好奇)如何在当前的架构指出目前的版本是什么?你只是有多个'WikiDocument'项目,同DocumentTitle?

我也不清楚为什么你需要一个'LastActivity'在一个版本的水平。我怎么没看到'LastActivity'适合的概念'Version'--在 大多数 维基,'版本是一次写:如果修改版本,然后你在创建一个 新的 版本,所以这一概念的最后一次更新的类型的价值的版本是毫无意义的--这真的只是'datecreated'.

真的,'自然'架构的设计是#2.就个人而言,我有点风扇的老DB公理的'正常化,直到它伤害,那么非规范化,直到它的工作'.#2是一个更清洁、更好的设计(简单,没有重复),并且如果没有迫切原因非规范化,第3版,我不会打扰。

最后,这归结为:你在担心'更高性能的设计,因为你已经观察到的性能问题,或者是因为你的假设 可能会 有一些?有没有真正的原因#2不应该执行。分组,不一定是坏消息在SQL服务器--事实上,如果有适当的复盖指数查询的,它可以执行的非常好,因为它可以浏览到特定水平的指数,以发现组合的价值,然后使用其余的列的索引可以使用以MIN/MAX/无论。分组的权限并不是特别糟糕的--如果它没有观察到的一个问题,不要担心它,虽然(非二进制)的排序规则可以使它有点棘手的--但是,在第2版,在那里你要集团通过你可以通过WikiHeadId,对吗?

一件事,可能使生活更加容易,如果你做了很多操作上的目前的版本(如同我假设你会),增加一个FK回头表的身表,表示目前的版本。如果你想看的 目前的版本 最高的点击次数,#2,因为它代表现在它可能是:

SELECT TOP ...
FROM WikiHead
INNER JOIN 
  (SELECT WikiHeadId, MAX(WikiBodyVersion) /* or LastUpdated? */ AS Latest 
   FROM WikiBody GROUP BY WikiHeadId) AS LatestVersions
INNER JOIN WikiBody ON 
  (Latest.WikiHeadId = WikiBody.WikiHeadId)
  AND (WikiBody.WikiBodyVersion = LatestVersions.Latest)
ORDER BY 
  Views DESC

或者或者

...
INNER JOIN WikiBody ON 
  (WikiHead.WikiHeadId = WikiBody.WikiHeadId)
  AND (WikiBody.WikiBodyVersion = 
    (SELECT MAX(WikiBodyVersion) FROM WikiBody WHERE WikiBody.WikiHeadId = WikiHead.WikiHeadId)
...

这两者都是恶心.如果WikiHead保持一个指向目前的版本中,它只是

...    
INNER JOIN WikiBody ON 
  (WikiHead.WikiHeadId = WikiBody.WikiHeadId)
  AND (WikiHead.Latest = WikiBody.WikiBodyVersion)
...

或者,它可能是一个有用的非正规化,只是因为它使你的生活变得更容易,不是为表现。

其他提示

检查的进行。

这是数据库模式的mediawiki ,什么维基百科是基于。

这看起来相当有据可查的,并会为你一个有趣的阅读。

从这个

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top