WordPress已經到了3.2.1版了,再也不單純是一個博客系統了,逐步走向了CMS方向。這樣一個功能強大的程序,數據僅僅只有10個表,可見WordPress深厚的功底。 php
我對WordPress的數據庫表作了一個簡單的分析,版本是3.2.1,簡單的分享一下。 sql
WordPress官方有一個關於數據庫的說明文檔: 數據庫
http://codex.wordpress.org/zh-cn:數據庫描述 瀏覽器
WordPress操做數據庫主要是經過一個封裝好的DB類來實現的,具體能夠查看includes目錄下的wp-db.php文件。 app
良好的頭部註釋習慣: wordpress
/**
* WordPress DB Class
*
* Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)}
*
* @package WordPress
* @subpackage Database
* @since 0.71
*/ post
WordPress核心的數據庫表包括下面10個: 網站
wp_comments | wp_links | wp_options | wp_postmeta | wp_posts |
wp_term_relationships | wp_term_taxonomy | wp_terms | wp_usermeta | wp_users |
若是有使用WordPress自帶的防Spam插件akismet的話,會自動建立一個wp_commentmeta表,關於垃圾評論的相關「案底」都是這在這表中,這個表不屬於基本表的範圍。 spa
按照表存儲的信息類型,能夠分爲如下幾類: .net
用戶信息表wp_users和wp_usermeta,主要存儲系統用戶的相關信息,兩個表是經過user的id進行關聯的。wp_users主要存儲的內容包括:登陸名、密碼、暱稱、Email、URL、用戶狀態、用戶顯示名稱等,應該說是最最基本的一些信息。wp_usermeta主要是存儲用戶自定義的相關資料,如權限等,全部經過網站後臺:用戶->個人我的資料路徑設置的信息都存儲在這個表中。
連接信息表wp_links,存儲友情連接的相關資料,是最簡單的一個表,與其餘表基本沒有什麼關聯。
文章信息表,是WordPress的核心,網站的全部文章都是保存在這幾個表中wp_posts、wp_postmeta、wp_comments,分別是文章內容,文章屬性,文章評論。
wp_posts是文章內容表,不過須要注意的是,這個表中存儲的內容不單單是發表的博文內容,還包括公告、導航菜單、單頁面、文章附件等內容,是經過post_type這個字段來進行區分的,目前所知的有以下幾種類型:post-博文、page-單頁面、nav_menu_item-導航菜單項、attachment-文章附件、bulletin-公告。固然,自動保存的那些文章也是在這裏面了,經過post_status字段進行標識,publish表示公開的文章,draft表示文章草稿,inherit表示繼承,通常用於附件。
wp_postmeta存儲的是文章的一些屬性,表結構很簡單,只有4個字段,其中meta_key是用來標識這個屬性的用途,包括附件、插件、文章等等不少的屬性。這個表也是很容易產生冗餘的一個表,如meta_key爲 '_edit_lock' 或者 '_edit_last' 或者 '_wp_old_slug' ,建議按期清理,清理的sql語句以下:
wp_comments存儲的是文章的評論內容,其實WordPress自身將不少基礎的信息都存儲下來了,例如評論者瀏覽器、IP等,全部後期若是有相關的插件直接調用便可,評論表中有個字段是「user_id」,通常若是爲0,即爲非網站用戶留言,不爲0,則是對應用戶表中的id。還有比較重要的兩個字段是 comment_post_ID 和 comment_approved,前一個用來指示這條評論隸屬於哪一篇文章,後一個用來記錄審覈情況。
關係最爲複雜的三個表是wp_terms,wp_term_relationships和wp_term_taxonomy。在 WordPress 2.2 及之前的版本中是沒有這三個表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 這三個表。對數據庫進行從新設計的緣由是,在 2.2 版和以前的版本,post 和 link 和 category 的關係都是經過各自單獨的表來記錄的。而在 2.3 版中加入了 tag 的支持,WordPress 把 post、link、tag 的分類都抽象成了統一的形式,用新的三個表來記錄這些信息。
wp_terms用於存儲標籤、文章分類、連接分類的基本信息,如名稱、簡寫等。
wp_term_taxonomy是對wp_terms的補充,如某一個term的類型,由taxonomy字段進行標識,link_category表示的是連接分類,category表示文章分類,post_tag表示文章標籤。還有相關的信息,如父節點、統計信息、描述等。
wp_term_relationships是一張映射表,object_id是與不一樣的對象關聯,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是關聯wp_term_taxonomy中的term_taxonomy_id。
這樣能夠看到,標籤、分類的查詢是很是耗時的,主要是由於關係比較複雜,涉及到三張表。
wp_options就比較簡單了,就是一些全局的設置項,如主題、插件狀態等信息。
實體數據庫中的基本表就是上述10個表,若有不正確的地方敬請指正。