wordpress源碼解析-數據庫表結構(2)

如果是一個普通的用戶,不需要了解wordpress數據庫的結構。但是,如果你正在寫一個插件,你應該會對wordpress如何處理它的數據和關係感興趣。如果你已經嘗試使用已經存在的wordpress api 去訪問你需要的數據,但不直接訪問數據庫的情況下,這是不可能的,WordPress的提供WPDB的類,使這項任務變得簡單。

WordPress數據庫的11個數據表分別是:

表名(點擊表名查看詳細介紹)

描述
wp_commentmeta 文章評論額外信息表
wp_comments 文章評論信息表
wp_links 鏈接信息表
wp_options 基本配置信息表,通常通過get_option來操作,該表通常作爲插件存儲數據的一個地方。
wp_postmeta 文章額外數據表,例如文章瀏覽次數,文章的自定義字段等都存儲在這裏。
wp_posts 文章信息表,包括了日誌、附件、頁面等等信息。是WordPress最重要的一個數據表。
wp_terms 文章分類、鏈接分類、標籤的信息表。
wp_term_relationships 分類與文章信息表(wp_posts)、鏈接表(wp_links)的關聯表。
wp_term_taxonomy 分類信息表,區分wp_terms信息的分類類型,有category、link_category和tag三種分類類型。
wp_usermeta 用戶額外信息表
wp_users 用戶基本信息表。存放系統所有用戶基本信息。

WordPress數據庫表之間的關係是什麼呢?

要搞明白這個問題以及對WordPress數據表之間的關係有更加深刻的理解,讓我們先來想想WordPress博客系統的功能,默認安裝的WordPress2.6.2版本博客系統涉及的數據信息主要包括了用戶信息、分類信息、鏈接信息、文章信息、文章評論信息、基本配置信息這6類信息。

用戶信息:系統中所有註冊用戶的帳號信息。

分類信息:包括了文章分類、鏈接分類、標籤這3中分類信息。

鏈接信息:就是博客系統中的友情鏈接信息。

文章信息:博客系統中的日誌、日誌產生的附件、頁面等信息。

文章評論信息:對具體日誌或者附件的評論信息。

基本配置信息:系統中的基本配置信息,例如博客名稱,博客地址等等。

WordPress數據庫的11個數據表就是爲了存儲以上6類數據信息而設計,這些表之間的總體關係結構如下圖所示:


從上圖可以看出WordPress博客系統6類數據信息分別所涉及的數據表及關係如下表所示:

信息類型 涉及數據表及關聯關係
用戶信息 數據表:wp_users、wp_usermeta,關聯關係:wp_users.ID->wp_usermeta.user_id
分類信息 數據表:wp_terms、wp_term_taxonomy關聯關係:wp_terms.term_id->wp_term_taxonomy.term_id
鏈接信息

數據表:wp_links、wp_term_relationships、wp_terms、wp_term_taxonomy、 wp_users、wp_usermeta關聯關係:

一,確定鏈接所屬分類 (1)wp_links.link_id->wp_term_relationships.object_id, (2)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id
(該關係還要取決與wp_term_taxonomy表中的taxonomy分類類型爲“link_category”) (3)wp_terms.term_id->wp_term_taxonom.term_id

二、確定鏈接所有者 (4)wp_links.link_owner->wp_users.ID(5)wp_users.ID->wp_usermeta.user_id

文章信息

數據表:wp_posts、wp_postmeta、wp_comments、wp_term_relationships、wp_terms、 wp_term_taxonomy、wp_users、wp_usermeta關聯關係:一、確定文章信息 (1)wp_posts.ID->wp_postsmeta.post_id

二、確定文章評論 (2)wp_posts.ID->wp_comments.comment_post_id

三、確定文章評論的作者 (3)wp_comments.comment_author->wp_users.ID

(4)wp_users.ID->wp_usermeta.user_id

四、確定文章所屬分類

(5)wp_posts.ID->wp_term_relationships.object_id,

(6)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id
(該關係還要取決與wp_term_taxonomy表中的taxonomy分類類型爲“category”或者“tag”)

(7)wp_terms->term_id->wp_term_taxonomy

五、確定文章作者

(8)wp_posts.author->wp_users.ID;

(9)wp_users.ID->wp_usermeta.user_id

文章評論信息 數據表:wp_comments、wp_posts、wp_users、wp_usermeta關聯關係:
一、確定評論的文章 (1)wp_comments.comment_post_id->wp_posts.ID
二、確定評論的作者 (2)wp_comments.comment_author->wp_users.ID(3)wp_users.ID->wp_usermeta.user_id
基本配置信息 數據表:wp_options沒有關聯關係
 

Wp-config.php中關於數據庫的設置。

     <?php  
    /*wp-config.php */  
      
    // ** MySQL 設置 - 具體信息來自您正在使用的主機 ** //  
    /** WordPress 數據庫的名稱 */  
    define('DB_NAME', SAE_MYSQL_DB);  
      
    /** MySQL 數據庫用戶名 */  
    define('DB_USER', SAE_MYSQL_USER);  
      
    /** MySQL 數據庫密碼 */  
    define('DB_PASSWORD', SAE_MYSQL_PASS);  
      
    /** MySQL 主機 */  
    define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT);  
      
    /** 創建數據表時默認的文字編碼 */  
    define('DB_CHARSET', 'utf8');  
      
    /** 數據庫整理類型。如不確定請勿更改 */  
    define('DB_COLLATE', '');  
      
    define('WP_USE_MULTIPLE_DB', true);  
      
    $db_list = array(  
            'write'=> array(  
                array(  
                    'db_host' => SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,  
                    'db_user'=> SAE_MYSQL_USER,  
                    'db_password'=> SAE_MYSQL_PASS,  
                    'db_name'=> SAE_MYSQL_DB,  
                    'db_charset'=> 'utf8'  
                    )  
                ),  
            'read'=> array(  
                array(  
                    'db_host' => SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,  
                    'db_user'=> SAE_MYSQL_USER,  
                    'db_password'=> SAE_MYSQL_PASS,  
                    'db_name'=> SAE_MYSQL_DB,  
                    'db_charset'=> 'utf8'  
                    )  
                ),  
            );  
    $global_db_list = $db_list['write'];  
      
    /**#@+ 
     * 身份密匙設定。 
     * 
     * 您可以隨意寫一些字符 
     * 或者直接訪問 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私鑰生成服務}, 
     * 任何修改都會導致 cookie 失效,所有用戶必須重新登錄。 
     * 
     * @since 2.6.0 
     */  
    define('AUTH_KEY',         hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_KEY', SAE_SECRETKEY ));  
    define('SECURE_AUTH_KEY',  hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_KEY', SAE_SECRETKEY ));  
    define('LOGGED_IN_KEY',    hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_KEY', SAE_SECRETKEY ));  
    define('NONCE_KEY',        hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_KEY', SAE_SECRETKEY ));  
    define('AUTH_SALT',        hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_SALT', SAE_SECRETKEY ));  
    define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_SALT', SAE_SECRETKEY ));  
    define('LOGGED_IN_SALT',   hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_SALT', SAE_SECRETKEY ));  
    define('NONCE_SALT',       hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_SALT', SAE_SECRETKEY ));  
      
    /**#@-*/  
      
    /** 
     * WordPress 數據表前綴。 
     * 
     * 如果您有在同一數據庫內安裝多個 WordPress 的需求,請爲每個 WordPress 設置不同的數據表前綴。 
     * 前綴名只能爲數字、字母加下劃線。 
     */  
    $table_prefix  = 'wp_';  
      
    /** 
     * WordPress 語言設置,默認爲英語。 
     * 
     * 本項設定能夠讓 WordPress 顯示您需要的語言。 
     * wp-content/languages 內應放置同名的 .mo 語言文件。 
     * 要使用 WordPress 簡體中文界面,只需填入 zh_CN。 
     */  
    define ('WPLANG', 'zh_CN');  
      
    /** 
     * 開發者專用:WordPress 調試模式。 
     * 
     * 將這個值改爲“true”,WordPress 將顯示所有開發過程中的提示。 
     * 強烈建議插件開發者在開發環境中啓用本功能。 
     */  
    define('WP_DEBUG', false);  
      
    /* 好了!請不要再繼續編輯。請保存該文件。 */  
      
    /** WordPress 目錄的絕對路徑。 */  
    if ( !defined('ABSPATH') )  
        define('ABSPATH', dirname(__FILE__) . '/');  
      
    /** 設置 WordPress 變量和包含文件。 這個文件內容很多啊,分析較困難*/  
    require_once(ABSPATH . 'wp-settings.php');  

wp-db.php 包含一個wpdb的類,是數據庫操作API 。產生一個$wpdb的全局變量,是wpdb類的一個對象。挺長的,貼在文章裏太臃腫了。


參考:

http://wenku.baidu.com/view/6448da5bbe23482fb4da4c94.html?from_page=view&from_mod=download

http://codex.wordpress.org/Database_Description

http://codex.wordpress.org/Function_Reference/wpdb_Class

http://www.jakc.net/post/272



發佈了32 篇原創文章 · 獲贊 50 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章