【天然框架】CMS之數據庫設計


  在園子裏也混了三年多,隨筆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 文件的版本
相關文章
相關標籤/搜索