我是为我们的公共网站建立新的内容管理系统的团队的一部分.我试图找到最简单和最好的方式来建立一个修订控制机制.对象模型是非常基本的.我们有一个抽象的“BaseArticle”类,其中包含版本独立/元数据的属性,如“标题”& “由…制作”.一些继承自此的类,例如“DocumentArticle”,它具有作为文件路径的属性“URL”. “WebArticle”也从“BaseArticle”继承,并包含“FurtherInfo”属性和“Tabs”对象的集合,其中包含“Body”,它将保存要显示的
HTML(Tab对象不从任何东西派生). “NewsArticle”和“JobArticle”继承自“WebArticle”.我们有其他派生类,但这些提供了足够的例子.
我们提出了两个应用程序来持续进行版本控制.我称之为“Approach1”和“Approach2”.我使用sql Server做一个基本的图:
使用Approach1,计划将通过数据库更新来持久保留文章的新版本.将为更新设置触发器,并将旧数据插入到xxx_Versions表中.我认为一个触发器需要在每个表上配置.这种方法的优点是,每个文章的“头”版本只保存在主表中,旧版本被关闭.这样可以轻松地将文件的头版从开发/暂存数据库复制到Live.
使用方法2,该计划将新增的文章版本插入数据库.文章的头版将通过意见来确定.这似乎具有更少的表和更少的代码(例如不是触发器)的优点.
请注意,使用这两种方法,该计划将调用Upsert存储过程,将映射到相关对象的表(我们必须记住处理要添加的新文章的情况).这个陈述存储过程将调用它从其导出的类. upsert_NewsArticle将调用upsert_WebArticle等
我们正在使用sql Server 2005,虽然我认为这个问题是独立于数据库的风格.我已经做了一些广泛的互联网拖网,并找到了这两种方法的参考.但是我没有发现任何比较两者并且显示一个或另一个更好的东西.我认为世界上所有的数据库书籍,这种选择的方法必须在之前出现.
我的问题是:哪些方法是最好的,为什么?