在園子裡也混了三年多,随筆200多,一開始隻是想把自己的經驗寫一下,後來呢弄出來了一個“自然架構”,主要精力就放在了介紹自然架構的思路上面了。随筆多了就發現一個問題:有點亂。雖然部落格有分組,但是隻支援一級分組,不支援n級的。部落格裡也沒有“欄目”這一類的設定。是以對于随筆的管理有有點力不從心了。有些兄弟看到我的部落格,看到我說自然架構,然後就會很迷茫,自然架構到底是什麼?能做什麼?如果想看看的話,從什麼地方開始看,按照什麼順序來看?
部落格的這種形式就不大好解決這種需求了,當然也許是我對部落格還不了解,沒有用好吧。是以我想做一個網站,這個網站專門介紹自然架構。一開始隻想做一個靜态的,内容也不多嘛,做幾個頁面,介紹一下,把部落格裡的随筆整理一下做個目錄便于閱讀。但是試了一下才發現,靜态頁面好麻煩呀,也許是我太懶了吧,總是想簡單一些。于是就想做一個簡單的CMS,然後用這個CMS來做自然架構的介紹網站。
您可能會說了,海洋又在重複制造輪子了,網上有一大堆現成的,有很多成熟的不去用,自己寫什麼呀?
首先呢,我是程式員(嘿嘿),我先想到的是我自己能不能做出來?别人能做我為什麼不行?我不是顧客,我也不是有錢人,到處去弄現成的。其次呢,做一個CMS也是一個練手的機會,同時也是自然架構的一個Demo,比較大的、完整的Demo。借此來說明自然架構的使用方式,和在網頁裡的作用。最後就是想借此說一下我的設計資料庫的思路。我覺得我的設計資料庫的思路還是有點特色的。
好了,開始進入正題。
首先是了解需求。一個網站會有什麼?首頁、新聞(圖文形式的資訊)、産品介紹、檔案下載下傳、圖檔浏覽、線上視訊等。這些都算是“内容”的幾種形式吧,當然還可以有其他的形式。
這個需求比較簡單,也比較簡陋,暫時就以這個需求來進行設計吧。如果是按照面向對象的方式要如何設計呢?這個我不太清楚,也許是要畫一個UML吧,也許要模組化。嘗試一下,畫了一個UML不知道對不對,拿出來請大家批批。
【CMS的類圖】

圖很簡單也沒什麼具體的屬性,因為需求是變化的,現在也沒有太具體的需求,是以屬性就先設定幾個主要的。另外俺英文不好,怕查出來的英文單詞不正确産生歧義,是以直接用漢字了。可能您看着很别扭,但是至少不會産生什麼歧義,了解起來也會比較容易吧,呵呵。
“内容”作為父類,其他的作為子類。内容是一種“抽象”,把各種形式的内容的共同部分提煉出來,比如标題、内容、添加人、添加日期、點選量等。子類負責各自特有的屬性。
我覺得這種提煉的方式比較好,在設計資料庫表結構的時候可以借鑒一下。于是就有了這樣的資料庫設計。
【CMS ER圖】
“内容”作為主體和中心,其他的都是為了這個中心(内容)來服務的。左面是對内容的限制,欄目相當于大分類,分類就是小分類(可以是n級的),類型就是内容的形式,比如圖文、下載下傳、視訊、圖檔等。右面是擴充。擴充和類型是一一對應的。
這就形成了一個“骨架”,骨架是以“内容”為中心,ArticleID作為關聯字段,可以增加擴充表,但是都要以ArticleID作為關聯字段。至于有多少擴充表,那就可以根據實際需求來變化,表裡的字段也是可以根據需求來增減。
設定這種“骨架”的好處:雖然擴充表、字段會有變化,但是“骨架”結構是不變的。這樣一是可以讓結構清晰,抓住中心、重點;二是當需求變化的時候,對結構的影響降到最低;三是,如果對于這種“骨架”習慣、掌握了之後,在看到其他項目的設計就會很容易進入和讀懂。關于第三點,以後大家就會了解的。
基本思路就是這樣,抛磚引玉了。
ps:CMS的字段說明
表編号
字段編号
字段名
中文名
類型
大小
預設值
允許空
說明
5000
CMS_Channel
網站欄目
10
ChannelID
主鍵
int
4
1
主鍵,自增
20
channelName
欄目名稱
nvarchar
30
_
Sort
排序
小号在前
40
URL
欄目的網址
50
新聞内容
5005
CMS_ArticleClass
内容的n級分組
ClassID
所屬欄目
Class
文章分類
支援n級分類,也可以不分類
ParentID
父ID
以備n級分類
5010
CMS_Article
網站裡的内容
ArticleID
分類
TypeID
1:新聞;2:下載下傳;3:其他待定
Title
标題
内容的标題
60
Summary
簡介
内容的概要介紹
70
Content
内容
ntext
16
圖文内容
80
Hits
人氣
點選量
90
SearchText
搜尋
搜尋内容
100
AddedDate
添加日期
smalldatetime
GetDate()
記錄添加日期
110
AddedPersonID
添加人
120
UpdatedDate
最後修改日期
記錄最後修改日期
130
UpdatedPersonID
最後修改人
記錄哪個人最後修改的
5020
CMS_DownLoad
下載下傳
DownLoadID
内容ID
關聯 “内容”表
下載下傳的說明,比如“本地下載下傳”、“部落格園下載下傳”
DownURL
下載下傳位址
下載下傳位址,可以是檔案位址也可以是網頁位址
DownCount
下載下傳次數
下載下傳/通路次數
上傳時間
上傳檔案的時間
Version
版本
檔案的版本