最近在家里無(wú)聊突然有個(gè)想法,使用java開(kāi)發(fā)一個(gè)wordpress的博客系統暫且就起個(gè)名字叫J-blog系統(爪哇閣)有興趣的朋友可以一起加入這個(gè)項目哈!首先要來(lái)分析下wordpress的數據庫結構 找了一下午的資料終于看見(jiàn)個(gè)比較合適的就拿來(lái)了。
數據表的總體結構如下圖(為了節約篇幅,這里僅列出了主鍵、外鍵及某些字段):

wordpress僅僅用了 10 個(gè) Table就實(shí)現了這么強大的系統,讓我欽佩:
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_terms
wp_usermeta
wp_users
下面我們按照它們之間的關(guān)系來(lái)介紹一下這幾個(gè)表:
按照功能大致分為五類(lèi)。
- user: 用戶(hù)信息,包括wp_users表和wp_usermeta表。
- link:鏈接信息,包括wp_links表。
- post: 文章及評論信息,包括wp_posts、wp_postmeta、wp_comments。
- category,link_category,tag:這個(gè)是比較復雜的信息模塊,它包含了對分類(lèi),鏈接分類(lèi),標簽的管理,包括wp_term,wp_term_relationships和wp_term_taxonomy表。
- option: 全局設置信息,包括wp_options表。
wp_posts
作為一個(gè)博客系統,最核心的當然是博主發(fā)表的一些“文章”了,這些“文章”存放的地方就是這個(gè) wp_posts 表了。注意,這里所說(shuō)的“文章”是加引號的,因為這個(gè)表里存放的除了普通的文章之外,還有附件和頁(yè)面(page)的一些信息。表里面的 post_type 這個(gè)字段就是用來(lái)標示類(lèi)型的。還有一點(diǎn)需要注意的就是,這個(gè)表里一些字段是針對于 post_type 的特定類(lèi)型的,比如 menu_order 這個(gè)字段是“頁(yè)面(page)”特有的,用來(lái)指定“頁(yè)面”的順序。post_mime_type 是針對附件的,來(lái)指定附件的類(lèi)型。
wp_postmeta
每篇文章的屬性是不可能僅僅用 wp_posts 表里的那幾個(gè)字段來(lái)完全標示的,往往還有一些因人而異的屬性:寫(xiě)這篇文章時(shí)候的心情,地點(diǎn)等等。這些屬性的名稱(chēng)和值類(lèi)型都是不確定的,因此,Wordpress 采用了元信息(meta)來(lái)表示它們。這個(gè)表很簡(jiǎn)單,只有 meta_id, post_id, meta_key, meta_value 這四個(gè)字段。post_id 是相關(guān) post 的 id。我們注意到 meta_value 是 longtext 類(lèi)型的,這里僅是用來(lái)存儲值,至于值的確切類(lèi)型,需要程序員來(lái)關(guān)心。
在撰寫(xiě)文章的時(shí)候,我們可以發(fā)現編輯框下面有一個(gè) Custom Fields 的選項,我們可以在這里添加 post 的 meta 信息。
wp_comments
用戶(hù)評論。除了評論的內容以外,還記錄了評論用戶(hù)的名字,郵箱,網(wǎng)址,瀏覽器類(lèi)型等信息。比較重要的兩個(gè)字段是 comment_post_ID 和 comment_approved,前一個(gè)用來(lái)指示這條評論隸屬于哪一篇文章,后一個(gè)用來(lái)記錄審核狀況。還有一個(gè)比較有意思的是這個(gè) commnet_agent 字段,我們可以利用這個(gè)字段來(lái)統計一下用戶(hù)瀏覽器類(lèi)型。
wp_users
用戶(hù)賬號表。存儲用戶(hù)名、密碼還有一些用戶(hù)的基本信息。
wp_usermeta
類(lèi)似上面的 wp_postmeta,存儲一些因人而異的用戶(hù)信息。(比如QQ?ICQ?)
wp_options
用來(lái)記錄 Wordpress 的一些設置和選項。里面有一個(gè) blog_id 字段,這個(gè)應該是用在 MU 版里面來(lái)標示不同的 Blog 的。
wp_links
用來(lái)存儲 Blogroll 里面的鏈接。
wp_terms
wp_term_relationships
wp_term_taxonomy
這三個(gè)表是這里面關(guān)系最復雜的了,在 Wordpress 2.2 及以前的版本中是沒(méi)有這三個(gè)表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 這三個(gè)表。對比這兩個(gè)版本我們可以發(fā)現:在 2.2 版和之前的版本,post 和 link 和 category 的關(guān)系都是通過(guò)各自單獨的表來(lái)記錄的。而在 2.3 版中加入了 tag 的支持,Wordpress 把 post、link、tag 的分類(lèi)都抽象成了統一的形式,用新的三個(gè)表來(lái)記錄這些信息。
wp_terms
記錄分類(lèi),鏈接分類(lèi),標簽的一些簡(jiǎn)要信息,包括名稱(chēng),縮寫(xiě)。
wp_term_taxonomy
是對wp_terms中的信息的關(guān)系信息補充,有所屬類(lèi)型(category,link_category,tag),詳細描述,父類(lèi),所擁有文章(鏈接)數量。
wp_term_relationships
關(guān)系表,多對多的,object_id是與不同的對象關(guān)聯(lián),例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是關(guān)聯(lián)wp_term_taxonomy中的term_taxonomy_id。
還有一些字段我還不太清楚是有什么用的,例如:
wp_term_relationships中的term_order;
wp_terms中的term_group,wp_option中的一些值作用等等,在以后學(xué)習的過(guò)程中再作詳細的講解吧,如果大家知道的,也可以告訴我。
在其他的文章中我看到有說(shuō)虛表的,而且我在wpdb這個(gè)類(lèi)中也看到了這樣的聲明:// Our tables
var $posts;
var $users;
var $categories;
var $post2cat;
var $comments;
var $links;
var $options;
var $postmeta;
var $usermeta;
var $terms;
var $term_taxonomy;
var $term_relationships;
var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',
'postmeta', 'terms', 'term_taxonomy', 'term_relationships');不知道上面的'categories', 'post2cat','link2cat'是不是虛表,還是為了兼容以前的版本用的,大家有什么看法的都盡管說(shuō)說(shuō)吧。

