在园子里也混了三年多,随笔200多,一开始只是想把本身的经验写一下,后来呢弄出来了一个“天然框架”,主要精力就放在了介绍天然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,可是只支持一级分组,不支持n级的。博客里也没有“栏目”这一类的设置。因此对于随笔的管理有有点力不从心了。有些兄弟看到个人博客,看到我说天然框架,而后就会很迷茫,天然框架究竟是什么?能作什么?若是想看看的话,从什么地方开始看,按照什么顺序来看?程序员
博客的这种形式就不大好解决这种需求了,固然也许是我对博客还不了解,没有用好吧。因此我想作一个网站,这个网站专门介绍天然框架。一开始只想作一个静态的,内容也很少嘛,作几个页面,介绍一下,把博客里的随笔整理一下作个目录便于阅读。可是试了一下才发现,静态页面好麻烦呀,也许是我太懒了吧,老是想简单一些。因而就想作一个简单的CMS,而后用这个CMS来作天然框架的介绍网站。数据库
您可能会说了,海洋又在重复制造轮子了,网上有一大堆现成的,有不少成熟的不去用,本身写什么呀?框架
首先呢,我是程序员(嘿嘿),我先想到的是我本身能不能作出来?别人能作我为何不行?我不是顾客,我也不是有钱人,处处去弄现成的。其次呢,作一个CMS也是一个练手的机会,同时也是天然框架的一个Demo,比较大的、完整的Demo。借此来讲明天然框架的使用方式,和在网页里的做用。最后就是想借此说一下个人设计数据库的思路。我以为个人设计数据库的思路仍是有点特点的。数据库设计
好了,开始进入正题。ide
首先是了解需求。一个网站会有什么?首页、新闻(图文形式的信息)、产品介绍、文件下载、图片浏览、在线视频等。这些都算是“内容”的几种形式吧,固然还能够有其余的形式。网站
这个需求比较简单,也比较简陋,暂时就以这个需求来进行设计吧。若是是按照面向对象的方式要如何设计呢?这个我不太清楚,也许是要画一个UML吧,也许要建模。尝试一下,画了一个UML不知道对不对,拿出来请你们批批。设计
【CMS的类图】视频
图很简单也没什么具体的属性,由于需求是变化的,如今也没有太具体的需求,因此属性就先设置几个主要的。另外俺英文很差,怕查出来的英文单词不正确产生歧义,因此直接用汉字了。可能您看着很别扭,可是至少不会产生什么歧义,理解起来也会比较容易吧,呵呵。对象
“内容”做为父类,其余的做为子类。内容是一种“抽象”,把各类形式的内容的共同部分提炼出来,好比标题、内容、添加人、添加日期、点击量等。子类负责各自特有的属性。blog
我以为这种提炼的方式比较好,在设计数据库表结构的时候能够借鉴一下。因而就有了这样的数据库设计。
【CMS ER图】
“内容”做为主体和中心,其余的都是为了这个中心(内容)来服务的。左面是对内容的限制,栏目至关于大分类,分类就是小分类(能够是n级的),类型就是内容的形式,好比图文、下载、视频、图片等。右面是扩展。扩展和类型是一一对应的。
这就造成了一个“骨架”,骨架是以“内容”为中心,ArticleID做为关联字段,能够增长扩展表,可是都要以ArticleID做为关联字段。至于有多少扩展表,那就能够根据实际需求来变化,表里的字段也是能够根据需求来增减。
设置这种“骨架”的好处:虽然扩展表、字段会有变化,可是“骨架”结构是不变的。这样一是可让结构清晰,抓住中心、重点;二是当需求变化的时候,对结构的影响降到最低;三是,若是对于这种“骨架”习惯、掌握了以后,在看到其余项目的设计就会很容易进入和读懂。关于第三点,之后你们就会理解的。
基本思路就是这样,抛砖引玉了。
ps:CMS的字段说明
表编号 | 字段编号 | 字段名 | 中文名 | 类型 | 大小 | 默认值 | 容许空 | 说明 |
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 | 主键,自增 |
5005 | 20 | ChannelID | 所属栏目 | int | 4 | 0 | 所属栏目 | |
5005 | 30 | Class | 文章分类 | nvarchar | 30 | 0 | 支持n级分类,也能够不分类 | |
5005 | 40 | ParentID | 父ID | int | 4 | 0 | 以备n级分类 | |
5010 | 0 | CMS_Article | 网站里的内容 | |||||
5010 | 10 | ArticleID | 主键 | int | 4 | 1 | 0 | 主键,自增 |
5010 | 30 | ChannelID | 所属栏目 | int | 4 | 1 | 0 | 所属栏目 |
5010 | 40 | ClassID | 分类 | int | 4 | 0 | 0 | 支持n级分类,也能够不分类 |
5010 | 50 | TypeID | 类型 | int | 4 | 0 | 0 | 1:新闻;2:下载;3:其余待定 |
5010 | 20 | Title | 标题 | nvarchar | 30 | 0 | 内容的标题 | |
5010 | 60 | Summary | 简介 | nvarchar | 30 | 0 | 内容的概要介绍 | |
5010 | 70 | Content | 内容 | ntext | 16 | 0 | 图文内容 | |
5010 | 80 | Hits | 人气 | int | 4 | 0 | 点击量 | |
5010 | 90 | SearchText | 搜索 | ntext | 16 | 0 | 搜索内容 | |
5010 | 100 | AddedDate | 添加日期 | smalldatetime | 4 | GetDate() | 0 | 记录添加日期 |
5010 | 110 | AddedPersonID | 添加人 | int | 4 | 1 | 0 | 添加人 |
5010 | 120 | UpdatedDate | 最后修改日期 | smalldatetime | 4 | GetDate() | 0 | 记录最后修改日期 |
5010 | 130 | UpdatedPersonID | 最后修改人 | int | 4 | 1 | 0 | 记录哪一个人最后修改的 |
5020 | 0 | CMS_DownLoad | 下载 | |||||
5020 | 10 | DownLoadID | 主键 | int | 4 | 1 | 0 | 主键,自增 |
5020 | 20 | ArticleID | 内容ID | int | 4 | 1 | 0 | 关联 “内容”表 |
5020 | 30 | Title | 标题 | nvarchar | 30 | 0 | 下载的说明,好比“本地下载”、“博客园下载” | |
5020 | 40 | DownURL | 下载地址 | nvarchar | 30 | 0 | 下载地址,能够是文件地址也能够是网页地址 | |
5020 | 50 | DownCount | 下载次数 | int | 4 | 1 | 0 | 下载/访问次数 |
5020 | 60 | AddedDate | 上传时间 | smalldatetime | 4 | GetDate() | 0 | 上传文件的时间 |
5020 | 70 | Version | 版本 | nvarchar | 30 | 0 | 文件的版本 |