mysql及php命名規范
一.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) 避免使用觸發器
觸發器的功能通??梢杂闷渌绞綄崿F.在調試程序時觸發器可能成為干擾.假如你確實需要采用觸發 器,你最好集中對它文檔化.
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.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯系冬天里的一把火
浙公網安備 33010602011771號