2010年2月22日 星期一

CakePHP教學 on OSX(七)Blog練習:(2)Blog資料庫設計

RoRy框架中有一個"資料遷移(mirgate)"物件,可以用Ruby語法透過自動地在資料庫中產生對應的資料庫架構(schema),學習上的好處是可以省去花在資料庫設計與結構查詢語言(SQL)上的功夫,只要專心熟悉Ruby語法即可。

而CakePHP則是相反地,是透過讀取一個既有的(通常是MySQL)資料庫架構,來產生相對的資料模型、控制器與視圖程式碼。因此預先設計並建立好一個資料庫,對於應用CakePHP框架來說非常重要,也比較符合PHP開發者原有的習慣。

Blog資料庫
首先應用之前“Todo”練習建立資料庫的方法,透過phpMyAdmin建立一個“blog”資料庫,以及同名的使用者“blog”並設定權限與密碼。

Blog資料表設計
跟之前“Todo”練習的資料庫只有一個資料表不同,Blog的資料必須分別使用多個資料表來儲存,並透過資料庫的關連功能來取得相關的資料。

第一個是“users”資料表的SQL:
CREATE TABLE  `users` (
 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(100) DEFAULT NULL ,
 `email` VARCHAR(150) DEFAULT NULL ,
 `firstname` VARCHAR(60) DEFAULT NULL ,
 `lastname` VARCHAR(60) DEFAULT NULL ,
 `created` DATETIME DEFAULT NULL ,
 `modified` DATETIME DEFAULT NULL ,
 PRIMARY KEY (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
依照CakePHP的命名慣例,“users”資料表名稱必須是複數名詞,主鍵(PRIMARY KEY)名稱是“id”。

第二個是“posts”資料表的SQL:
CREATE TABLE  `posts` (
 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `title` VARCHAR(255) DEFAULT NULL ,
 `content` TEXT,
 `user_id` INT(11) DEFAULT NULL ,
 `created` DATETIME DEFAULT NULL ,
 `modified` DATETIME DEFAULT NULL ,
 PRIMARY KEY (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
依照CakePHP的命名慣例,“posts”資料表名稱也必須是複數名詞,主鍵(PRIMARY KEY)名稱也是“id”。為了避免混淆並指定關連的資料表,這裡以“user_id”欄位與“users”資料表建立關連性。注意,這裡“user_id”欄位是單數詞。還有跟書上的不同,這裡還是用“created”跟“modified”兩個魔術欄位來自動儲存製作與修改日期。

“users”跟“posts”兩個資料表的關係是所謂的“一對多”,也就是每一位“user”有很多篇的“posts”,但每一篇“post”只屬於一位“user”所有。用RoR框架開發時,要在資料模型程式中指明“user”跟“posts”兩個物件的關係,然後RoR會自動地在資料庫中產生相對的資料表。而用CakePHP開發時,CakePHP則是透過分析“user”跟“posts”兩個資料表,來產生資料模型程式的範本。


上一篇下一篇:

沒有留言:

張貼留言