幾乎所有的 yii 的應用程式都是建立在資料庫之上,雖然 yii 可以非常靈活的運算元據庫,但有些時候一些設計的選擇可以使它更便於使用.
首先 yii 應用程式廣泛使用了 cactiverecord, 設計的考慮主要圍繞優化使用而不是組成複雜的 sql 語句. 實際上大多的設計是使用友好的 sql 模式來解決實踐中的問題.
最常用的方式是建立易於被人閱讀和理解的**,例如使用命名來傳達意思,但是這很難做到.
特別當你在論壇或 '#yii' 頻道尋求幫助時,使用奇怪的名字意味著你會有一堆麻煩:解釋**是幹什麼的。你的問題有時就不會得到有效解決.
一堆一致性問題.
然而這些只是準測而不是規則,你的**不遵循這些準則也照樣會工作,但是如果你遵循這些準則你的**將更加簡單.
我們認為sql 表包含很多記錄,乙個模型(model)只是其中的乙個,在任何地方使用$model = new comments()
來表示再次定義關係時感覺非常奇怪.
命名您的表名為comment
而不是comments
,invoice
而不是invoices
等等。對於的模型(model)類名也是一樣(comment
,invoice
等等).
如果你不可以改變資料庫的模式,但至少在適當的情況下你可以改變 yii 模型類(model class)的名稱,在這種不匹配的情況下你應該在**中新增乙個額外的注釋//comment
來提醒使用者.
下面的做法是在傳統 sql 設計模式上非常常見的,但是它在於 activerecord 結合時時冗長複雜的。在category
表中:
[sql]
-- 不可取 -- 可取
create table category ( create table category(
category_id integer ..., id integer ...,
category_name varchar ..., name varchar ...,
category_value integer value integer
); );
// 不友好的 // 友好的
$model->category_id $model->id
$model->category_name $model->name
$model->category_value $model->value
雖然使用這種long
方式生稱的 sql 語句容易理解一些,但是在 activerecord 中使用就不太方便了.
yii 支援表字首,表字首被用在 所有 應用放到共享的主機並且共享乙個資料庫的環境中. 你的部落格表字首為blog_
,計時應用的表字首為time_
等等. 它們存在於同乙個資料庫中而互相不起衝突.
字首tbl_
在很多教程和例子中經常看到。
但是類不需要包含這些字首,因為沒有必要避免衝突:你的部落格應用和你的計時應用時兩個不同的應用.
[php]
class tblcomment extends cactiverecord
注意: 有很多人喜歡用id
或_id
來代替id
.這只是個人愛好問題,意義是一樣的.
繼續我們的主題一致性和**易於閱讀,關係應當在名稱上體現它們代表的為單數還是複數.
注意: 對於返回乙個陣列的關係,它們可能只包含乙個模型,但事實上它們是通過複數名稱方式認證來的陣列
你只需要通過看關係的名稱就會知道它返回的是乙個陣列還是乙個模型:
$model->post
$model->comments
$model->author
$model->members
如果你必須通過檢視**才會知道,那這將會讓你的**更加難以閱讀和維護. 快速理解OpenTSDB的Schema設計
在時序資料庫中,time series是乙個基礎概念。我們先來看看wiki中關於time series的定義 time series是一組按照時間發生先後順序進行排列的資料點序列。通常一組時間序列的時間間隔為一恆定值 如1秒,5分鐘,1小時等 我們可以這樣命名乙個time series webser...
Yii中CGridView禁止列排序的設定方法
yii中cgridview的功能是用來顯示的資料列表。它支援排序,分頁,和ajax資料請求。下面的 演示了cgridview禁止列排序的設定方法 columns array array class ccheckboxcolumn selectablerows abaryqkdba 2 value d...
基於REST架構的Web Service設計
先前我曾經介紹過利用apache axis實現基於soap的web service實現技術和相關 總的來說,soap的web service解決方案雖然較為成熟,且安全性較好,但是使用門檻較高,在大併發情況下會有效能問題,在網際網路上使用不太普及,因此並不太適合web 2.0 服務使用,目前大量的w...