2011年7月14日 星期四

關於Drupal新增content時的資料表變動

目前後台的部分是使用 Drupal 作開發,而行動裝置抓取資料必需直接向資料庫要求,所以對於 Drupal 新增 content 時相關的資料表做了一些觀察。

觀察的環境為 TWAMP 的安裝包,使用版本為 6.22 版,並且安裝了 CCK 及 Views 這兩個基本的模組,所以資料庫的結構上就是依照這樣的安裝所產生的,總共的資料表數量為61個,觀察的資料表為 content 以及 node 這兩個字串為開頭的資料表。



  • 新增 content 類型
首先來看,新增一個 content 類型後,在 node_type 中會新增一筆資料,這筆資料代表的就是剛剛新增的 content 類型,並且此類型的相關設定都會存放在這。



  • 新增 field
接著在此 content 類型中新增一個 field ,新增完這個 field 後,資料庫中會新增一個資料表,資料表的名稱為 content_type_"ContentType名稱" ,而裡面暫時不會有值,至於會有哪些欄位就視不同的 field type 而不同,最基本的欄位會有 nid 及 vid 。

譬如新增的 field type 是 Node reference 的話,那會多一個 field_"連結的node名稱"_nid 的欄位,記錄著連結到哪個 node,而有些 type 則會在未來新增內容時才做動作。

除此之外 content_node_field 及 content_node_field_instance 這兩個資料表,也會新增一筆與 field 設定相關的紀錄,而這兩個的差別在於 content_node_field 像是物件導向概念裡的類別,而 content_node_field_instance 則是經由類別創建出的實例,content_node_field 紀錄的是一般的設定,此設定可套用到其他的 content 類別,content_node_field_instance 則是與某個 content 類別綁住的獨有的設定。



  • 新增 content 內容
接下來新增一個 content 內容,類型為剛剛所創建的 content 類型,在資料庫中會在 node 資料表中寫入一筆記錄,包含了創建的相關訊息,但不包括創建內容;node_comment_statistics 資料表中會有一筆統計紀錄;node_revisions 資料表會存放未來如果有變更的資訊。而實際內容會放在以 content 字串開頭的資料表中,像是前面提到的 Node reference 類型的 field 則會將內容資料放在 content_type_"ContentType名稱" 中,而如果是 text 類型的 field 則會 新增一個專門存放內容的資料表,資料表名稱像是 content_field_name。


以上是我對於新增 content 的流程所做的觀察,但這部分會因為不同的模組及設定而有所不同,不過如果只是要從 Drupal 所建立的資料庫中尋找到自己所需的資料來說,相信已經足夠,由上面可看出,實際內容存放的地方以 content 開頭的資料表為最主要,尤其是 content_type 和 content_field,接下來與建立內容相關的統計資料為 node_comment_statis 資料表,並且可以利用 nid 或是 vid 的值去比對出所需資料。

1 意見:

匿名 提到...

在Drupal用CCK建立一個資料表之後,會在MySQL資料庫中建立的相關Table有五個:
content_type_athlete(nid,vid,field_athlete_id_value,…)
history(uid,nid,timestamp)
node(nid,vid,title,created,changed,…)
node_comment_statistics(nid,last_comment_timestamp,…)
node_revisions(nid,vid,title,…)

有這樣的基本認識,才能撰寫程式存取Drupal後台的資料庫。祝大家測試順利!

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger