基于.NET的CMS数据库的两种设计方法

开发基于.NET的内容管理系统时,在理论上你有许多建立数据库的方法。然而,在绝大多数情况下,只有我们即将讨论的这两种方法中的某一种才管用。第一种是固定数据模型,在这种方式下,你所显示出来的内容总是包含相同的数据内容。如果你为某份报纸或者杂志建立CMS(内容管理系统),这种方法无疑是很好的一种。在第二种方法中,数据模型是一种模板驱动(template-driven)系统,数据是否被选中基于网页模板是否被选中。这种系统提供了更多的灵活性。

固定数据模型

由于你需要确保你的CMS所需的所有数据都齐全了,所以在使用固定数据模型之前你还需要做一些前期工作,即数据收集。当这一步完成后,建立逻辑数据库就很简单明了了。图A给出了一个CMS的固定数据模型的例子。

图A

固定数据模型的核心就是内容表;它包含了你的CMS中的所有内容实体。在我的新闻站点上,这些内容实体(报纸的模型)就是标题栏、来源、副标题、导言、正文和标志行。

由于我希望该系统支持基于角色(role-based)的工作流程,这样,为了处理内容的变化过程,内容表跟踪所有的帐户。内容的工作流(workflow)包括编写、编辑、批准(发行)和显示。

你可能还希望拥有控制版本的能力。我用了一种简单的方法实现了这个功能,即在数据库中保存各个版本的全部内容。你可以试一试仅仅保存版本之间变化的内容这种方法。

对数据库的设计为保存帐户的数据提供了灵活性。它仅为帐户表中的帐户保存它所需要的数据。然后,它为其它信息以该帐户ID的属性的方式保存下来。通过这样的方式,你可以为该用户在数据库中添加任何信息。例如,在你的帐户下添加电话号码,你可以给帐号ID的“家庭电话”属性赋值800-55-1234(或者任何其它电话号码)到帐户属性表中。

在本文的例子中,每一个帐户有多个角色。如,某个帐户既可以是编著者也可以是编辑。当为我们这个简单的CMS加上工作流之后,我们就可以使用这些角色。不过,过一会儿你就希望你的工作流基于角色而不是帐户,因为帐户的角色会随着时间而改变。

该数据库的另一个优点就是Notes(消息)功能。由于作者和编辑可能位于不同的大洲上,通信变得比较困难。(相信我,不同的时区会造成很大的麻烦!)Notes功能使得工作流上不同角色的通信变得简单起来。内容Notes与内容ID是相联系的,但是忽略内容的版本。

本设计允许在网站的多个栏目上显示相同的内容。但是,如果你的栏目很少,该功能也就没有什么作用了。同样的内容可以在不同的时间出现在不同的栏目里。例如,你可能希望即时新闻栏中的新闻保持时间不超过一天,但又希望新闻的保持时间稍久一些,那么上述功能就有了用武之地了。

如果你使用模板数据模型,内容实体可以在日后需要实现的时候确定。它也没有固定数据模型那样为内容实体而进行的艰难编码过程。不过,模板数据模型与固定数据模型还是有许多共同之处的,你可以在B中看到这一点。

表B

模板数据模型

这两个模型的最大共同之处就是它们处理帐户(也就是用户)的方式。它们工作方式完全相同。对模板数据模型来说,这是模板建立者的附加角色(附加任务),但是对固定数据模型来说,就是对数据库内容而不是数据库本身的附加。

在这两个模型中内容表都是数据库的基础,这也是它们的共同点。但是,模板数据模型的内容表与固定数据模型有着很大的不同,在模板数据模型中,内容表扮演了在网页模板、内容实体、Notes和显示栏目之间的枢纽角色。

在本设计中,模板建立者又一个新的角色。该角色设计网页,然后在内容实体所要出现的栏目上加入位置标志符。模板的建立工作流对应着内容实体的建立工作流,即编著、编辑、批准发行和显示。

我们已经提到,内容实体已经无需存到内容表中;内容实体将有一个自己的表(名为ContentNode)。在本模型中,你可以把相同的内容放到多个网页的模板中,这就提高了可重用性。由于每个内容实体(节点)都是自包含的(self-contained)而且有着自己的工作流,所以多个作者、多个编辑同时对同一个网页进行操作的情形是被允许的。不过,批准发行过程常常是基于整个网页而不是单个节点的——尽管这一点并不是必须的。

下面是建立模板数据模型网页的基本步骤:

  • 创建、编辑、批准发行网页。
  • 作者选择包含适当的模板(该模板包含若干正确类型的内容节点)去处理网页文章。
  • 作者创建所有内容节点。
  • 编者编辑内容节点。
  • 当所有的内容节点都准备好之后,它们可以作为一个已完成的内容页(即模板、内容节点和内容控制器)批准发行。
  • 当批准发行后,内容页就显示出来。
小结

现在你应该有了设计数据库的基本概念了。记住,如果你有固定数量的内容节点,你可以使用固定数据模型;如果节点数量很大或者文档与文档间的内容节点数是变化的,模板数据模型可能是一个更好的选择。

在我的下一篇文章中,我将讨论如何用ADO.NET去访问数据库中的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMS数据库设计 在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个"自然框架",主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。博客里也没有"栏目"这一类的设置。所以对于随笔的管理有有点力不从心了。有些兄弟看到我的博客,看到我说自然框架,然后就会很迷茫,自然框架到底是什么?能做什么?如果想看看的话,从什么地方开始看,按照什么顺序来看?   博客的这种形式就不大好解决这种需求了,当然也许是我对博客还不了解,没有用好吧。所以我想做一个网站,这个网站专门介绍自然框架。一开始只想做一个静态的,内容也不多嘛,做几个页面,介绍一下,把博客里的随笔整理一下做个目录便于阅读。但是试了一下才发现,静态页面好麻烦呀,也许是我太懒了吧,总是想简单一些。于是就想做一个简单的CMS,然后用这个CMS来做自然框架的介绍网站。   您可能会说了,海洋又在重复制造轮子了,网上有一大堆现成的,有很多成熟的不去用,自己写什么呀?   首先呢,我是程序员(嘿嘿),我先想到的是我自己能不能做出来?别人能做我为什么不行?我不是顾客,我也不是有钱人,到处去弄现成的。其次呢,做一个CMS也是一个练手的机会,同时也是自然框架的一个Demo,比较大的、完整的Demo。借此来说明自然框架的使用方式,和在网页里的作用。最后就是想借此说一下我的设计数据库思路。我觉得我的设计数据库思路还是有点特色的。   好了,开始进入正题。   首先是了解需求。一个网站会有什么?首页、新闻(图文形式的信息)、产品介绍、文件下载、图片浏览、在线视频等。这些都算是"内容"的几种形式吧,当然还可以有其他的形式。 CMS数据库设计全文共5页,当前为第1页。  这个需求比较简单,也比较简陋,暂时就以这个需求来进行设计吧。如果是按照面向对象的方式要如何设计呢?这个我不太清楚,也许是要画一个UML吧,也许要建模。尝试一下,画了一个UML不知道对不对,拿出来请大家批批。 CMS数据库设计全文共5页,当前为第1页。 【CMS的类图】   图很简单也没什么具体的属性,因为需求是变化的,现在也没有太具体的需求,所以属性就先设置几个主要的。另外俺英文不好,怕查出来的英文单词不正确产生歧义,所以直接用汉字了。可能您看着很别扭,但是至少不会产生什么歧义,理解起来也会比较容易吧,呵呵。   "内容"作为父类,其他的作为子类。内容是一种"抽象",把各种形式的内容的共同部分提炼出来,比如标题、内容、添加人、添加日期、点击量等。子类负责各自特有的属性。   我觉得这种提炼的方式比较好,在设计数据库表结构的时候可以借鉴一下。于是就有了这样的数据库设计CMS数据库设计全文共5页,当前为第2页。【CMS ER图】 CMS数据库设计全文共5页,当前为第2页。   "内容"作为主体和中心,其他的都是为了这个中心(内容)来服务的。左面是对内容的限制,栏目相当于大分类,分类就是小分类(可以是n级的),类型就是内容的形式,比如图文、下载、视频、图片等。右面是扩展。扩展和类型是一一对应的。   这就形成了一个"骨架",骨架是以"内容"为中心,ArticleID作为关联字段,可以增加扩展表,但是都要以ArticleID作为关联字段。至于有多少扩展表,那就可以根据实际需求来变化,表里的字段也是可以根据需求来增减。   设置这种"骨架"的好处:虽然扩展表、字段会有变化,但是"骨架"结构是不变的。这样一是可以让结构清晰,抓住中心、重点;二是当需求变化的时候,对结构的影响降到最低;三是,如果对于这种"骨架"习惯、掌握了之后,在看到其他项目的设计就会很容易进入和读懂。关于第三点,以后大家就会理解的。 CMS数据库设计全文共5页,当前为第3页。  基本思路就是这样,抛砖引玉了。 CMS数据库设计全文共5页,当前为第3页。 CMS数据库设计全文共5页,当前为第4页。ps:CMS的字段说明 CMS数据库设计全文共5页,当前为第4页。 表编号 字段编号 字段名 中文名 类型 大小 默认值 允许空 说明 5000 0 CMS_Channel 网站栏目           5000 10 ChannelID 主键 int 4 1 0 主键,自增 5000 20 channelName 栏目名称 nvarchar 30 _ 0 栏目名称 5000 30 Sort 排序 int 4 10 0 小号在前 5000 40 URL 栏目的网址 nvarchar 50 _ 0 新闻内容     5005 0 CMS_ArticleClass 内容的n级分组           5005 10 ClassID 主键 int 4 1 0 主键,自增
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值