前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【自然框架】CMS之数据库设计

【自然框架】CMS之数据库设计

作者头像
用户1174620
发布2018-02-26 15:50:18
2K0
发布2018-02-26 15:50:18
举报
文章被收录于专栏:更流畅、简洁的软件开发方式

  在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个“自然框架”,主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。博客里也没有“栏目”这一类的设置。所以对于随笔的管理有有点力不从心了。有些兄弟看到我的博客,看到我说自然框架,然后就会很迷茫,自然框架到底是什么?能做什么?如果想看看的话,从什么地方开始看,按照什么顺序来看?

  博客的这种形式就不大好解决这种需求了,当然也许是我对博客还不了解,没有用好吧。所以我想做一个网站,这个网站专门介绍自然框架。一开始只想做一个静态的,内容也不多嘛,做几个页面,介绍一下,把博客里的随笔整理一下做个目录便于阅读。但是试了一下才发现,静态页面好麻烦呀,也许是我太懒了吧,总是想简单一些。于是就想做一个简单的CMS,然后用这个CMS来做自然框架的介绍网站。

  您可能会说了,海洋又在重复制造轮子了,网上有一大堆现成的,有很多成熟的不去用,自己写什么呀?

  首先呢,我是程序员(嘿嘿),我先想到的是我自己能不能做出来?别人能做我为什么不行?我不是顾客,我也不是有钱人,到处去弄现成的。其次呢,做一个CMS也是一个练手的机会,同时也是自然框架的一个Demo,比较大的、完整的Demo。借此来说明自然框架的使用方式,和在网页里的作用。最后就是想借此说一下我的设计数据库的思路。我觉得我的设计数据库的思路还是有点特色的。

  好了,开始进入正题。

  首先是了解需求。一个网站会有什么?首页、新闻(图文形式的信息)、产品介绍、文件下载、图片浏览、在线视频等。这些都算是“内容”的几种形式吧,当然还可以有其他的形式。

  这个需求比较简单,也比较简陋,暂时就以这个需求来进行设计吧。如果是按照面向对象的方式要如何设计呢?这个我不太清楚,也许是要画一个UML吧,也许要建模。尝试一下,画了一个UML不知道对不对,拿出来请大家批批。

【CMS的类图】

  图很简单也没什么具体的属性,因为需求是变化的,现在也没有太具体的需求,所以属性就先设置几个主要的。另外俺英文不好,怕查出来的英文单词不正确产生歧义,所以直接用汉字了。可能您看着很别扭,但是至少不会产生什么歧义,理解起来也会比较容易吧,呵呵。

  “内容”作为父类,其他的作为子类。内容是一种“抽象”,把各种形式的内容的共同部分提炼出来,比如标题、内容、添加人、添加日期、点击量等。子类负责各自特有的属性。

  我觉得这种提炼的方式比较好,在设计数据库表结构的时候可以借鉴一下。于是就有了这样的数据库设计。

【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

文件的版本

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-04-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档