程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> Yii良好的架構(schema)設計指南

Yii良好的架構(schema)設計指南

編輯:PHP基礎知識
 

首先 Yii 應用程序廣泛使用了 CActiveRecord, 設計的考慮主要圍繞優化使用而不是組成復雜的 SQL 語句. 實際上大多的設計是使用友好的 SQL 模式來解決實踐中的問題.

最常用的方式是創建易於被人閱讀和理解的代碼,例如使用命名來傳達意思,但是這很難做到.

特別當你在論壇或 '#yii' 頻道尋求幫助時,使用奇怪的名字意味著你會有一堆麻煩:解釋代碼是干什麼的。你的問題有時就不會得到有效解決.

一堆一致性問題.

然而這些只是准測而不是規則,你的代碼不遵循這些准則也照樣會工作,但是如果你遵循這些准則你的代碼將更加簡單.

使用單數而不是使用復數來命名表名


 

我們認為 SQL 表 包含很多記錄,一個模型(model) 只是其中的一個,在任何地方使用 $model = new Comments() 來表示再次定義關系時感覺非常奇怪.

命名您的表名為 comment 而不是 comments,invoice 而不是 invoices 等等。對於的模型(model)類名也是一樣(Comment,Invoice等等).

如果你不可以改變數據庫的模式,但至少在適當的情況下你可以改變 Yii 模型類(model class)的名稱,在這種不匹配的情況下你應該在代碼中添加一個額外的注釋 //COMMENT 來提醒用戶.

不要在字段名前面加上表名


 

下面的做法是在傳統 SQL 設計模式上非常常見的,但是它在於 ActiveRecord 結合時時冗長復雜的。在 category 表中:

-- 不可取                           -- 可取
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 中使用就不太方便了.

不要在模型類(model class)的類名中出現表名的前綴

Yii 支持表前綴,表前綴被用在 所有 應用放到共享的主機並且共享一個數據庫的環境中. 你的博客表前綴為 blog_,計時應用的表前綴為 time_等等. 它們存在於同一個數據庫中而互相不起沖突.

前綴 tbl_ 在很多教程和例子中經常看到。

但是類不需要包含這些前綴,因為沒有必要避免沖突:你的博客應用和你的計時應用時兩個不同的應用.

class TblComment extends CActiveRecord {       // 不可取
class Comment extends CActiveRecord {          // 可取

在代碼中看到無處不見的前綴使人們非常反感.

確保每個表的主鍵為 id


 

大多數表都有一個唯一主機,命名主鍵為 id(而不是 commentidpostid) 會使你的工作更加順手.

雖然無論你是否訪問數據庫 Yii 都可以通過讀取數據結構來得到它的主鍵,但是系統的其他部分可能不會這樣做,並且它們依賴的主鍵為 id.

例子:CArrayDataProvider 默認的主鍵為 id, 雖然你可以重寫它的屬性 'keyField', 但是把這放到第一位是很不方便的.

顯而易見,當使用復合主鍵時這將不能工作,但是這畢竟是少數.

避免特殊意義的主鍵名


 

一個經典的設計錯誤是創建的表的主鍵有實際意義. 在下面的列子中 用戶(user)表使用的用戶名(name)作為主鍵:

-- 不要這麼做!
CREATE TABLE user (
    name   VARCHAR(16) PRIMARY KEY,  -- bad idea
    email  VARCHAR...
    ...
)

這樣做引發了兩個問題:This presents two difficulties:  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved