mysql及php命名規範

ndblog發表於2016-09-01

一.mysql命名規範

1.設計原則

1) 標準化和規範化
資料的標準化有助於消除資料庫中的資料冗餘。標準化有好幾種形式,但 Third Normal Form(3NF)通常被認為在效能、擴充套件性和資料完整性方面達到了最好平衡。簡單來說,遵守3NF 標準的資料庫的表設計原 則是:“One Fact in One Place”即某個表只包括其本身基本的屬性,當不是它們本身所具有的屬性時需進行分解。表之間的關係通過外來鍵 相連線。它具有以下特點:有一組表專門存放通過鍵連線起來的關聯資料。
舉例:某個存放客戶及其有關定單的3NF 資料庫就可能有兩個 表:Customer和Order。Order表不包含定單關聯客戶的任何資訊,但表內會存放一個鍵值,該鍵指向Customer表裡包含該客戶資訊的那 一行。
事實上,為了效率的緣故,對錶不進行標準化有時也是必要的。
2) 資料驅動
採用資料驅動而非硬編碼的方式,許多策略變更和 維護都會方便得多,大大增強系統的靈活性和擴充套件性。
舉例,假如使用者介面要訪問外部資料來源(檔案、XML 文件、其他資料庫等),不妨把相應的連線 和路徑資訊儲存在使用者介面支援表裡。還有,如果使用者介面執行工作流之類的任務(傳送郵件、列印信箋、修改記錄狀態等),那麼產生工作流的資料也可以存放在 資料庫裡。角色許可權管理也可以通過資料驅動來完成。事實上,如果過程是資料驅動的,你就可以把相當大的責任推給使用者,由使用者來維護自己的工作流過程。
3) 考 慮各種變化
在設計資料庫的時候考慮到哪些資料欄位將來可能會發生變更。
舉例,姓氏就是如此(注意是西方人的姓氏,比如女性結婚後從夫姓 等)。所以,在建立系統儲存客戶資訊時,在單獨的一個資料表裡儲存姓氏欄位,而且還附加起始日和終止日等欄位,這樣就可以跟蹤這一資料條目的變化。

2. 資料庫涉及字元規範

採用26個英文字母(區分大小寫)和0-9這十個自然數,加上下劃線`_`組成,共63個字元.不能出現其他字元(注 釋除外).
注意事項:
1) 以上命名都不得超過30個字元的系統限制.變數名的長度限制為29(不包括標識字元@).
2) 資料 物件、變數的命名都採用英文字元,禁止使用中文命名.絕對不要在物件名的字元之間留空格.
3) 小心保留詞,要保證你的欄位名沒有和保留詞、資料 庫系統或者常用訪問方法衝突
5) 保持欄位名和型別的一致性,在命名欄位併為其指定資料型別的時候一定要保證一致性.假如資料型別在一個表裡是整 數,那在另一個表裡可就別變成字元型了.

3.資料庫命名規範

資料庫,資料表一律使用字首

正式數 據庫名使用小寫英文以及下劃線組成,儘量說明是那個應用或者系統在使用的.比如:

web_19floor_net
web_car

備 份資料庫名使用正式庫名加上備份時間組成,如:

web_19floor_net_20070403
web_car_20070403

4. 資料庫表命名規範

資料表名使用小寫英文以及下劃線組成,儘量說明是那個應用或者系統在使用的.
相關應用的資料表使用同一字首,如 論壇的表使用cdb_字首,部落格的資料表使用supe_字首,字首名稱一般不超過5字
比如:

web_user
web_group
supe_userspace

備 份資料表名使用正式表名加上備份時間組成,如:

web_user_20070403
web_group_20070403
supe_userspace_20070403

5. 欄位命名規範

欄位名稱使用單片語合完成,首字母小寫,後面單詞的首字母大寫,最好是帶表名字首.
如 web_user 表的字 段: 

userId
userName
userPassword

表與表之間的相關聯欄位要用統一名稱,
如 web_user 表 裡面的 userId 和 web_group 表裡面的 userId 相對應

6.欄位型別規範

規則:用盡量少的儲存空間來存 數一個欄位的資料.
比如能用int的就不用char或者varchar
能用tinyint的就不用int
能用 varchar(20)的就不用varchar(255)
時間戳欄位儘量用int型,如created:表示從 `1970-01-01 08:00:00`開始的int秒數,採用英文單詞的過去式;gmtCreated:表示datetime型別的時間,即形如 `1980-01-01 00:00:00`的時間串,Java中對應的型別為Timestamp

7.資料庫設計文件規範

所 有資料庫設計要寫成文件,文件以模組化形式表達.大致格式如下:

`——————————————-
`    表 名:    web_user
`    作者:    Aeolus(傻魚)
`    日期:    2007-04-11
`    版 本:    1.0
`    描述:    儲存使用者資料
`    具體內容:
`    UserID int,自動增量 使用者 程式碼
`    UserName char(12) 使用者名稱字
`    ……
`——————————————–

8. 索引使用原則:

1) 邏輯主鍵使用唯一的成組索引,對系統鍵(作為儲存過程)採用唯一的非成組索引,對任何外來鍵列採用非成組索引.考慮數 據庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用作讀寫.
2) 大多數資料庫都索引自動建立的主鍵欄位,但是可別忘了索引外來鍵,它們也 是經常使用的鍵,比如執行查詢顯示主表和所有關聯表的某條記錄就用得上.
3) 不要索引blob/text等欄位,不要索引大型欄位(有很多字 符),這樣作會讓索引佔用太多的儲存空間.
4) 不要索引常用的小型表
不要為小型資料表設定任何鍵,假如它們經常有插入和刪除操作就更別 這樣作了.對這些插入和刪除操作的索引維護可能比掃描表空間消耗更多的時間.

9.sql語句規範

所有sql關鍵詞全部大 寫,比如SELECT,UPDATE,FROM,ORDER,BY等,所有的表名和庫名都要用“包含
如:
SELECT COUNT(*) FROM `cdb_members` WHERE `userName` = `aeolus`;

10.其他設計技巧

1) 避免使用觸發器
觸發器的功能通常可以用其他方式實現.在除錯程式時觸發器可能成為干擾.假如你確實需要採用觸發 器,你最好集中對它文件化.
2) 使用常用英語(或者其他任何語言)而不要使用編碼或者拼音首字母縮寫
在建立下拉選單、列表、報表時最好 按照英語名排序.假如需要編碼或者拼音首字母縮寫,可以在旁邊附上使用者知道的英語.
3) 儲存常用資訊
讓一個表專門存放一般資料庫資訊非 常有用.在這個表裡存放資料庫當前版本、最近檢查/修復(對Access)、關聯設計文件的名稱、客戶等資訊.這樣可以實現一種簡單機制跟蹤資料庫,當客 戶抱怨他們的資料庫沒有達到希望的要求而與你聯絡時,這樣做對非客戶機/伺服器環境特別有用.
4) 包含版本機制
在資料庫中引入版本控制 機制來確定使用中的資料庫的版本.時間一長,使用者的需求總是會改變的.最終可能會要求修改資料庫結構.把版本資訊直接存放到資料庫中更為方便. 
5) 編 制文件
對所有的快捷方式、命名規範、限制和函式都要編制文件.
採用給表、列、觸發器等加註釋的資料庫工具.對開發、支援和跟蹤修改非常有 用.
對資料庫文件化,或者在資料庫自身的內部或者單獨建立文件.這樣,當過了一年多時間後再回過頭來做第2 個版本,犯錯的機會將大大減少。
6) 測 試、測試、反覆測試
建立或者修訂資料庫之後,必須用使用者新輸入的資料測試資料欄位.最重要的是,讓使用者進行測試並且同使用者一道保證選擇的資料型別 滿足商業要求.測試需要在把新資料庫投入實際服務之前完成。
7) 檢查設計
在開發期間檢查資料庫設計的常用技術是通過其所支援的應用程式 原型檢查資料庫.換句話說,針對每一種最終表達資料的原型應用,保證你檢查了資料模型並且檢視如何取出資料。

二.php命名規則

就一般約定而言,類、函式和變數的名字應該是能夠讓程式碼閱讀者能夠容易地知道這些程式碼的作用,應該避免使用凌磨兩可的命名。 

1.類命名

使用大寫字母作為詞的分割,其他的字母均使用小寫。

名字的首字母使用大寫。

不要使用下劃線(`_`)。

如:Name、SuperMan、BigClassObject。 

2.類屬性命名

屬性命名應該以字元‘m’為字首。

字首‘m’後採用與類命名一致的規則。

‘m’總是在名字的開頭起修飾作用,就像以‘r’開頭表示引用一樣。

如:mValue、mLongString等 

3.方法的命名

方法的作用都是執行一個動作,達到一個目的。所以名稱應該說明方法是做什麼的。一般名稱的字首都是有第一規律的,如is(判斷)、get(得到),set(設定)。

方法的命名第一個單詞的首字母小寫,其後單詞的首字母大寫。。如:

class StartStudy{                       //設定類

        $mLessonOne = “”;               //設定類屬性

        $mLessonTwo = “”;               //設定類屬性

        function getLessonOne(){        //定義方法,得到屬性mLessonOne的值

            …

    }

4.方法中引數命名

第一個字元使用小寫字母。

在首字元後的所有字元都按照類命名規則首字元大寫。

如:

class EchoAnyWord{

    function echoWord($firstWord,$secondWord){

        …

    }

5.引用變數

引用變數要帶有‘r’字首。如:

class Example{

    $mExam = “”;

    funciton setExam(&$rExam){

        …

    }

    function getExam(){

        …

    }

6.變數命名

所有字母都使用小寫。

使用‘_’作為每個詞的分界。

如:$msg_error、$chk_pwd等。

臨時變數通常被取名為i,j,k,m和n,它們一般用於整型;c,d,e,s 它們一般用於字元型。

例項變數前面需要一個下劃線, 首單次小寫,其餘單詞首字母大寫。 

7.全域性變數

全域性變數應該帶有字首‘g’。如:global $gTest。 

8.常量、全域性常量

常量、全域性常量,應該全部使用大寫字母,單詞之間用‘_’來分割。如

define(`DEFAULT_NUM_AVE`,90);

define(`DEFAULT_NUM_SUM`,500); 

9.靜態變數

靜態變數應該帶有字首‘s’。如:

state $sStatus = 1; 

10.函式命名

所有的名稱都使用小寫字母,多個單詞使用‘_’來分割。如:

function this_good_idear(){

    …

以上的各種命名規則,可以組合一起來使用,如:

class OtherExample{

    $msValue = “”;        //該引數既是類屬性,又是靜態變數

就一般約定而言,類、函式和變數的名字應該是能夠讓程式碼閱讀者能夠容易地知道這些程式碼的作用,應該避免使用凌磨兩可的命名。

 1.  類命名

  • 使用大寫字母作為詞的分割,其他的字母均使用小寫。
  • 名字的首字母使用大寫。
  • 不要使用下劃線(`_`)。
  • 如:Name、SuperMan、BigClassObject。

2. 類屬性命名

  • 屬性命名應該以字元‘m’為字首。
  • 字首‘m’後採用與類命名一致的規則。
  • ‘m’總是在名字的開頭起修飾作用,就像以‘r’開頭表示引用一樣。
  • 如:mValue、mLongString等

3. 方法的命名

  • 方法的作用都是執行一個動作,達到一個目的。所以名稱應該說明方法是做什麼的。一般名稱的字首都是有第一規律的,如is(判斷)、get(得到),set(設定)。
  • 方法的命名第一個單詞的首字母小寫,其後單詞的首字母大寫。。如:
1
2
3
4
5
6
7
class StartStudy{                       //設定類
        $mLessonOne "";               //設定類屬性
        $mLessonTwo "";               //設定類屬性
        function getLessonOne(){        //定義方法,得到屬性mLessonOne的值
            ...
    }
}

4. 方法中引數命名

  • 第一個字元使用小寫字母。
  • 在首字元後的所有字元都按照類命名規則首字元大寫。
  • 如:
1
2
3
4
5
class EchoAnyWord{
    function echoWord($firstWord,$secondWord){
        ...
    }
}

5. 引用變數

  • 引用變數要帶有‘r’字首。如:
1
2
3
4
5
6
7
8
9
class Example{
    $mExam "";
    funciton setExam(&$rExam){
        ...
    }
    function getExam(){
        ...
    }
}

6. 變數命名

  • 所有字母都使用小寫。
  • 使用‘_’作為每個詞的分界。
  • 如:$msg_error、$chk_pwd等。
  • 臨時變數通常被取名為i,j,k,m和n,它們一般用於整型;c,d,e,s 它們一般用於字元型。
  • 例項變數前面需要一個下劃線, 首單次小寫,其餘單詞首字母大寫。

7. 全域性變數

  • 全域性變數應該帶有字首‘g’。如:global $gTest。

8. 常量、全域性常量

  • 常量、全域性常量,應該全部使用大寫字母,單詞之間用‘_’來分割。如
1
2
define(`DEFAULT_NUM_AVE`,90);
define(`DEFAULT_NUM_SUM`,500);

9. 靜態變數

  • 靜態變數應該帶有字首‘s’。如:
1
state $sStatus = 1;

10. 函式命名

  • 所有的名稱都使用小寫字母,多個單詞使用‘_’來分割。如:
1
2
3
function this_good_idear(){
    ...
}

 以上的各種命名規則,可以組合一起來使用,如:

1
2
3
class OtherExample{
    $msValue "";        //該引數既是類屬性,又是靜態變數
}

 

作者:Tyler Ning

出處:http://www.cnblogs.com/tylerdonet/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,如有問題,可以通過以下郵箱地址williamningdong@gmail.com
 聯絡我,非常感謝。


相關文章