當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>理解和利用 WordPress 中的數(shù)據(jù)關(guān)系

理解和利用 WordPress 中的數(shù)據(jù)關(guān)系

文本是《理解和利用 WordPress 中的數(shù)據(jù)(共9篇)》專題的第 2 篇。閱讀本文前,建議先閱讀前面的文章:

在本系列的第一部分,我給出了WordPress數(shù)據(jù)庫表的一個(gè)概覽,以及哪個(gè)表是用于存儲什么類型數(shù)據(jù)的介紹。在第二部分,將會介紹WordPress是如何管理數(shù)據(jù)之間的關(guān)系。

正如你看到的,WordPress使用了三種數(shù)據(jù)關(guān)系——一對一,一對多和多對多。我將會針對每一個(gè)進(jìn)行介紹,了解它們在你的WordPress站點(diǎn)中的意義。

一對一關(guān)系

一對一是所有關(guān)系中最簡單的——你可以簡單地認(rèn)為就是一條記錄只對應(yīng)另外一個(gè)。數(shù)據(jù)通常都保存在一張表中(盡管不全是這樣的,我們將會在該教程的后面看到)。

WordPress中一對一關(guān)系的例子如下:

  • 文章ID和文章內(nèi)容
  • 文章標(biāo)題和文章內(nèi)容
  • 文章ID和文章別名(slug)
  • 評論ID和評論內(nèi)容
  • 用戶ID和用戶名

還可以列舉出更多的例子,但主要想說明的是任何兩條由不同的子段構(gòu)成記錄在一張表的一里行存儲就是一對一的關(guān)系。

雖然,一對一關(guān)系是最無趣的一種數(shù)據(jù)庫關(guān)系。但是,如果沒有疑問的話讓我們繼續(xù)了解在WordPress使用廣泛的——一對多關(guān)系。

一對多關(guān)系

一對多關(guān)系是在數(shù)據(jù)庫中最常見的,這也使得它比“扁平的”表更強(qiáng)大,例如電子表格。當(dāng)一條記錄和不止一個(gè)記錄有關(guān)系時(shí)就會用到。

在WordPress中,大多數(shù)一對多關(guān)系都是用來連接兩個(gè)表的,并且通過一個(gè)唯一標(biāo)示來連接。例如:post_id就是每篇文章在表wp_posts中的唯一標(biāo)示,同時(shí)也是表wp_comments中每個(gè)評論的唯一標(biāo)示。這意味著每個(gè)post_id在表wp_posts中只出現(xiàn)一次,而在表wp_comments中可能出現(xiàn)多次或在根本沒有。

WordPress中的其他例子如下:

  • 文章和文章元數(shù)據(jù)
  • 文章和用戶
  • 用戶和用戶元數(shù)據(jù)
  • 分類法和分類項(xiàng)目

同樣地,還能繼續(xù)列舉。在 WordPress 中這是一個(gè)重要的話題,讓我們繼續(xù)了解一對多關(guān)系的細(xì)節(jié)吧。

涉及到文章的一對多關(guān)系

連接其他表最多的表是wp_posts,大多數(shù)關(guān)系都是一對多關(guān)系。

正如在下表中你看到的,wp_posts表連接了四個(gè)其他表:

多說一句啊,文章也可以和文章有一對多關(guān)系,在附件表單或在父頁面時(shí)就是這樣的。

文章和文章

正如上面解釋的,存儲在表wp_posts中的數(shù)據(jù)可以和相同表里的數(shù)據(jù)有一對多的關(guān)系;然而這個(gè)關(guān)系并不是你想象的和文章的關(guān)系,而是文章那個(gè)和附件或在頁面或者其他頁面的。總之,附件和頁面也是文章類型。

附件保存在表wp_posts中,并使用post_parent子段來關(guān)聯(lián)對應(yīng)的文章ID(抱歉重復(fù))。這就是一對多關(guān)系,因?yàn)橐粋€(gè)附件只能有一個(gè)父,而每篇文章可能有多個(gè)附件。就算你通過多媒體管理器把附件添加到別的文章中,它的父也是原始添加的文章。

當(dāng)一個(gè)頁面是另外一個(gè)頁面的父時(shí),文章還跟其他的文章有一對多的關(guān)系。子頁面的記錄中,post_parent字段的值就是父頁面的post_id字段。這就是一對多的關(guān)系,因?yàn)楦疙撁婵梢杂泻芏嗟淖禹撁娴亲禹撁嬷荒苡幸粋€(gè)父頁面。

就像這樣,在考慮文章之間的關(guān)系時(shí),考慮WordPress的數(shù)據(jù)處理時(shí)很重要的,文章不是你可能認(rèn)為的那樣被引用。它們包括頁面,附件和其他類型的,所有都是保存在wp_posts表中。

文章和文章元數(shù)據(jù)

文章的元數(shù)據(jù)保存在它自己的表wp_postmeta中。這個(gè)表只有4個(gè)字段——post_id,meta_id,還有鍵值對。一篇文章可以關(guān)聯(lián)很多元數(shù)據(jù),但是每個(gè)元數(shù)據(jù)記錄只能關(guān)聯(lián)到一篇文章中。

文章和評論

評論也有自己的表wp_comments。每個(gè)評論只能關(guān)聯(lián)到一篇文章,但是一篇文章卻可以有很多評論。就像所有的其他表關(guān)聯(lián)到wp_posts一樣,post_id字段就是用來作關(guān)聯(lián)的(wp_comments中的comment_post_id字段)。

默認(rèn)情況下wp_comments有15個(gè)字段,保存了作者,作者的郵件(email)地址,以及評論自身的內(nèi)容和它的批準(zhǔn)狀態(tài)。它還關(guān)聯(lián)到了表wp_users,具體內(nèi)容我們會在下一個(gè)章節(jié)中介紹到。

評論也有它自己的的元數(shù)據(jù),存儲在其他表中,我很快會介紹到。

文章和用戶

每篇文章通過user_id字段關(guān)聯(lián)到wp_users表,保存在表wp_posts的post_author字段中。這是一對多的關(guān)系,因?yàn)槊科恼轮挥幸粋€(gè)作者,但是每個(gè)用戶可以有多篇文章。

文章和用戶之間的關(guān)系是不同于文章和評論或在元數(shù)據(jù)的,因?yàn)楹茏匀坏兀粋€(gè)用戶可以有多篇文章,但一篇文章有多個(gè)評論或者元數(shù)據(jù)不同。這就是為什么使用user_id字段而不是post_id來進(jìn)行關(guān)聯(lián)的原因。

不涉及文章的一對多關(guān)系

還有三個(gè)一對多的關(guān)系,但是和文章沒關(guān)系。其中的兩個(gè)是有元數(shù)據(jù)有關(guān)系——評論和它對應(yīng)的元數(shù)據(jù),用戶和它對應(yīng)的元數(shù)據(jù)。

用戶和用戶元數(shù)據(jù)

WordPress把用戶附加的元數(shù)據(jù)信息保存到wp_usermeta表中。這通常用戶非標(biāo)準(zhǔn)的用戶信息,例如在一個(gè)多站點(diǎn)版本中的超級管理員和管理員對用戶的顏色設(shè)置信息。

用戶的大多數(shù)數(shù)據(jù)保存在表wp_users中。這兩個(gè)表是通過user_id字段和用戶擁有多個(gè)元數(shù)據(jù)盡心關(guān)聯(lián)的,每個(gè)元數(shù)據(jù)都會設(shè)置到一個(gè)用戶上。

評論和評論元數(shù)據(jù)

同樣地,有關(guān)評論自身的大多數(shù)數(shù)據(jù)都保存在表wp_comments中。但是wp_commentmeta表用來保存附加的元數(shù)據(jù)的,例如插件Akismet創(chuàng)建的數(shù)據(jù)。這個(gè)關(guān)系就像用戶和用戶元數(shù)據(jù)的關(guān)系一樣。

評論和用戶

最后的一對多關(guān)系是評論和用戶的。 表wp_comments包括user_id字段,當(dāng)一個(gè)已經(jīng)登陸的用戶添加一條評論后就會把用戶的ID保存進(jìn)去。記住,這個(gè)字段不適用于沒有登陸的用戶。

多對多關(guān)系

數(shù)據(jù)庫中的最后一種類型是多對多關(guān)系,也就是說在兩邊都有連接。在WordPress中只用了一次,在分類系統(tǒng)中(包括分類和標(biāo)簽都是簡單的分類方法)。一篇文章可以有很多分類而且一個(gè)分類也可以用到多篇文章中。

WordPress創(chuàng)建這個(gè)關(guān)系和其他數(shù)據(jù)創(chuàng)建多對多關(guān)系一樣:通過一個(gè)關(guān)系表來連接兩個(gè)表。就是wp_term_relationships表,連接了表wp_posts和wp_term_taxonomy表。

備注:這個(gè)表也連接了表 wp_links 和 wp_term_taxonomy,這種連接的方法和連接文章的一樣——我很快就會介紹到。

通過查看這兩個(gè)表最容易解釋。表wp_posts包含每篇文章的數(shù)據(jù),表wp_term_taxonomy包含每個(gè)分類的數(shù)據(jù),包括分類和它自身的ID。

為了創(chuàng)建表wp_term_taxonomy和表wp_posts的文章,WordPress在表wp_term_relationships中添加了一條記錄,包含post_id和term_id(保存在表wp_term_relationships的object_id字段和term_taxonomy_id字段中)。這意味著表wp_term_relationships能夠包含多條文章記錄和多條分類記錄,也就是多對多的關(guān)系。

下圖展示了它是如何運(yùn)行的:

working-with-data-in-wordpress-terms-to-posts-relationships

在上面的例子,文章有下面的分類:

  • 文章 1 有分類 1 和 3
  • 文章 2 有分類 2
  • 文章 3 有分類 4
  • 文章 4 有分類 1 和 3

你也可以從另外一個(gè)角度來看——例如,分類3關(guān)聯(lián)了文章1和4.

然而,還沒有結(jié)束。還有第四個(gè)表,wp_terms。這里保存了每個(gè)分類,命名,和分類描述的數(shù)據(jù)。每個(gè)分類在表wp_terms中只有一條記錄,它和表wp_term_txonomy是真正的一對一關(guān)系。理論上講,這個(gè)數(shù)據(jù)沒有理由保存在表wp_term_taxonomy中,但不是這樣的。

有關(guān)鏈接需要注意的

鏈接或者友情鏈接,這個(gè)WordPress的特色已經(jīng)不如以前那么重要了。事實(shí)上,從3.5版本鏈接在后臺就已經(jīng)被默認(rèn)關(guān)閉了;然而,它們還有自己的表wp_links。

它相對于wp_posts表來說是很簡單的。畢竟,鏈接這種內(nèi)容類型相對文章來說非常簡單,它同樣和分類有多對多的關(guān)系。

總結(jié)

正如我們看到的,WordPress有11個(gè)表中的10個(gè)表都有連接關(guān)系。唯一沒有提到的表就是wp_options,因?yàn)樗推渌矶紱]有關(guān)系,它只是簡單地保存關(guān)于站點(diǎn)而不是內(nèi)容的數(shù)據(jù)。我將會在該系列的后續(xù)部分介紹它的細(xì)節(jié)。

通過理解WordPress中的一對一,一對多,和多對多關(guān)系,可以幫助你修改數(shù)據(jù)以及在你的主題或者插件中寫自定義的查詢語句。

在該系列的下一個(gè)部分中,我將會更加詳細(xì)地介紹內(nèi)容類型,查找WordPress數(shù)據(jù)庫中保存的內(nèi)容類型,比較它們之間的相同點(diǎn)和不同點(diǎn)。

原文出自:http://code.tutsplus.com/tutorials/understanding-and-working-with-relationships-between-data-in-wordpress–cms-20632

由 surenpi.com@wordpress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
WordPress開發(fā)

理解和利用 WordPress 中的數(shù)據(jù)(介紹)

2016-4-10 10:22:50

WordPress開發(fā)

理解和利用 WordPress 中的內(nèi)容類型

2016-4-15 10:10:52

0 條回復(fù) A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

来宾市| 于都县| 渝中区| 九江市| 萝北县| 满洲里市| 上饶市| 介休市| 伊宁市| 盐津县| 伊通| 称多县| 凌源市| 且末县| 浮梁县| 韶关市| 余姚市| 遂川县| 漯河市| 青河县| 鲁山县| 玛曲县| 石家庄市| 墨竹工卡县| 扶余县| 嘉善县| 普定县| 安达市| 叶城县| 睢宁县| 青龙| 瑞昌市| 万宁市| 海兴县| 平乡县| 四子王旗| 广东省| 轮台县| 宝鸡市| 措美县| 双流县|