zoukankan      html  css  js  c++  java
  • 【自然框架】CMS之数据库设计

      在园子里也混了三年多,随笔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 文件的版本

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/jyk/p/1721778.html
Copyright © 2011-2022 走看看