1 設計規範:
1.1 採用有意義的字段名
儘可能地把字段描述的清楚些。當然,也別做過頭了,比如CustomerShippingAddressStreetLine1 雖然很富有說明性,但沒人願意鍵入這麼長的名字,具體尺度就在你的把握中。
每個單詞的首個字母要求用大寫,不要用下劃線來連接每個單詞!!!
1.2 遵守3NF 標準3NF 規定:
A.表內的每一個值都只能被表達一次。
B.表內的每一行都應該被唯一的標識(有唯一鍵)。
C.表內不應該存儲依賴於其他鍵的非鍵信息。
1.3 小心保留詞
要保證你的字段名沒有和保留詞、數據庫系統或者常用訪問方法衝突,比如,寫的一個ODBC 連接程序裏有個表,其中就用了DESC 作爲說明字段名。後果可想而知!DESC 是DESCENDING 縮寫後的保留詞。表裏的一個SELECT *語句倒是能用,但我得到的卻是一大堆毫無用處的信息。
1.4 保持字段名和類型的一致性
在命名字段併爲其指定數據類型的時候一定要保證一致性。假如字段在某個表中叫做“AgreeMentNumber”,你就別在另一個表裏把名字改成“ref1”。假如數據類型在一個表裏是整數,那在另一個表裏可就別變成字符型了。記住,你幹完自己的活了,其他人還要用你的數據庫呢。
2 命名規則:
2.1 數據庫(Database)的定義
數據庫名稱 = 數據庫內容標識(首字大寫)
2.2 表(Table)的定義
命名應儘量反映存儲的數據內容。
表名前綴:以該表及與該表相關聯的一系列表的內容而得到一個代表統一的標識
表名稱 = 表名前綴 + 表內容標識(首字大寫)
如ClientInfo相關聯的一系的表以ci作爲前綴,
即有表名:ciHistory,ciContact,ciBusiness
2.25 字段(Field)的定義
字段是數據庫中的用途最廣泛的,它的類型非常多,所以必須加類型前綴來標示它的類型。
字段名稱 = 字段類型前綴 + 字段內容標識(首字大寫)
2.2視圖名
視圖的名稱 = "vw" + 視圖內容標識(首字大寫)
如 vUserPerm
2.3觸發器名
觸發類型觸發標識
-----------------------------------
Inserti
Deleted
Updateu
觸發名= "tr" + 觸發標識 + 相應的表名
如:triClient,trdClient。
2.4存儲過程名
存儲過程功能存儲過程功能前綴
----------------------------------------
添加a
更新u
刪除d
查詢或其它o
存儲過程名稱 = 存儲過程功能前綴 + 存儲過程內容標識(首字大寫)
如 spoChkUserPerm
2.5變量名
每個單詞的首個字母爲大寫,如@EmployeeName。
2.6命名中其他注意事項
禁止使用中文命名!!!!!
命名都不得超過30個字符的系統限制,變量名的長度限制爲29(不包括標識字符@)。
命名都採用英文字符,每個單詞的首個字母要大寫
2.7 SQL語句的編寫規範
數據庫中存儲過程和觸發器中涉及大量的SQL語句,對SQL語句的編寫規範如下:
關鍵字大寫:在SQL語句的編寫中,凡是SQL語句的關鍵字一律大寫,如:SELECT、ORDER BY、 GROUP BY、 FROM、WHERE、 UPDATE、 INSERT INTO、 SET、 BEGIN、 END ......
2.8 Rule
ru+Rule標識
2.9 主鍵
pk+表名+主鍵標識
2.10 外鍵
fk+表名+主表名+外鍵標識
2.11 索引
idx+字段標識
2.12 Default
df+Default標識
3 編程結構和描述
SQL SERVER系統中,一個批處理是從客戶傳給服務器的一個完整的包,可以包含若干條SQL語句。批處理中的語句是作爲一組去進行語法分析、編譯和執行的。觸發器、存儲過程等數據對象則是將批處理永久化的方法。
3.1註釋
註釋可以包含在批處理中。在觸發器、存儲過程中包含描述性註釋將大大增加文本的可讀性和可維護性。本規範建議:
1、註釋以英文爲主。
實際應用中,發現以中文註釋的SQL語句版本在英文環境中不可用。爲避免後續版本執行過程中發生某些異常錯誤,建議使用英文註釋。
2、註釋儘可能詳細、全面。
創建每一數據對象前,應具體描述該對象的功能和用途。
傳入參數的含義應該有所說明。如果取值範圍確定,也應該一併說明。取值有特定含義的變量(如boolean類型變量),應給出每個值的含義。
3、註釋語法包含兩種情況:單行註釋、多行註釋
單行註釋:註釋前有兩個連字符(--),最後以行尾序列(CR-LF)結束。一般,對變量、條件子句可以採用該類註釋。
多行註釋:符號/*和*/之間的內容爲註釋內容。對某項完整的操作建議使用該類註釋。
4、註釋簡潔,同時應描述清晰。
3.2函數註釋:
編寫函數文本--如觸發器、存儲過程以及其他數據對象--時,必須爲每個函數增加適當註釋。該註釋以多行註釋爲主,主要結構如下:
/*******************************************************************************************
* 存儲過程:讀取用戶所分配的操作模塊及具體權限
* 編 制 者 :saiko
* 修 改 人 :
* 編制日期:2004.11.27
* 輸入參數:共有2個參數
* @cUserNo:用戶編號
* @cUserPassword:驗證密碼
* 輸出參數:@eResult 1. 成功= 銷售@0001 2. 失敗 =Null 3.與 @eResult 無關 輸出是記錄集
* 調用例子:declare @eResult varchar(50)exec uChkUserPerm '0755' ,'123456', '銷售'
* 說 明:
*
******************************************************************************************/
CREATE PROCEDURE spoxxx
…
3.3條件執行語句if…else
條件語句塊(statenemt block,以 begin…end爲邊界)僅在if子句的條件爲真時才被執行。爲提高代碼的可讀性,建議嵌套不多於5層。還有,當嵌套層次太多時,應該考慮是否可以使用case語句。
3.4重複執行while和跳轉語句goto
需要多次執行的語句,可以使用while結構。其中,控制while循環的條件在任何處理開始之前需要先執行一次。循環體中的保留字break無條件的退出while循環,然後繼續處理後續語句;保留字continue重新計算while條件,如果條件爲真,則從循環開始處重新執行各語句。
使用跳轉語句goto和標籤label也可以方便地實現循環和其他更靈活的操作。SQL SERVER僅具有單通道語法分析器,因此不能解析對尚未創建的對象所做的前向參考。換言之,跳轉到某標籤的後續語句應該是可執行的(如不存在可能尚未創建的數據對象)。
3.5書寫格式
數據庫服務器端的觸發器和存儲過程是一類特殊的文本,爲方便開發和維護,提高代碼的易讀性和可維護性。規範建議按照分級縮進格式編寫該文本。
順序執行的各命令位於同一級;條件語句塊(statenemt block,以 begin…end爲邊界)位於下一級,類推。
SQL語句是該文本的主體。爲適應某些教複雜的用戶需求,SQL語句可能比較龐大。爲方便閱讀和維護,規範建議按照SQL語句中系統保留字的關鍵程度再劃分爲三級。具體分級請參照下表。其中,非系統保留字(如字段名、數據表名、標點符號)相對本級保留字再縮進一級。多個連續的非保留字可以分行書寫,也可以寫在同一行。當WHERE包含的條件子句教複雜時,應該每行只寫一個條件分句,併爲重要的條件字句填寫單行註釋。
在保證基本縮進格式的前提下,可以通過對齊某些重要關鍵字(如條件關鍵字AND、OR,符號 = 、 <> 等)來進一步提高文本的易讀性和可維護性。
相鄰兩級的縮進量爲10個空格。這也是ISQL編輯器默認的文本縮進量。另外,在ISQL編輯器中,一個TAB鍵也相當於10個空格。
注:按照功能,四類SQL語句(SELECT、INSERT、UPDATE、DELETE)的關鍵字可以劃分爲三類:主關鍵字、次關鍵字、一般關鍵字。如下表所示:
主關鍵字次關鍵字一般關鍵字
SELECTINSERT (INTO)UPDATEDELETE FROMWHEREVALUESINSERT…SELECT…FROM語句中的SELECT和FROMANDORBETWEENINLIKE
3.6字體
系統保留字應大寫,包括系統公共變量等。其他字符(如用戶自定義變量、用戶自定義數據對象名)小寫。
需要特殊強調的部分可以大寫。
一條完整註釋語句的首字符應大寫。對某變量、某條件字句的註釋可以全部使用小寫。
通過下一節中生成表r_a的刪除觸發器的實例可以部分說明對象命名、註釋、基本書寫格式和字符大小寫方面的一些注意事項。
4觸發器編程規範
4.1範例
下面通過一個例子,說明觸發器編程中應遵守的規範:
/* delete related r_a according to deleted table */
CREATE TRIGGER r_a_d ON r_a
FOR DELETE
AS
IF @@ROWCOUNT = 0 -no rows deleted
RETURN
/* delete r_b table related to deleted table */
DELETE r_b
FROM r_b b, deleted d
WHERE b.id=d.id
IF @@ERROR != 0
BEGIN
RAISERROR("Error occurred deleting related records", 16, 1)
ROLLBACK TRAN
END
RETURN
數據庫設計規範
A. 表命名規則
 數據庫中不論是表名還是字段名,都一律用英文,不準出現其它語言;且保留原來的字段名,保留它們的規範;
 爲了不增加數據庫當中的表名的長度,一般不允許出現如Form或者Table的字樣,如:記錄表:應爲Record,而不是RecordTable
 數據庫當中的表名的命名,一般不準出現空格,假如有幾個單詞出現的話,每個單詞之間不允許留有空格,用 ”_” 隔開如人事信息表:應爲Human_Info,而不是Human Info;每個單詞的第一個字母必須大寫;如果太長,爲了不增加編程的難度可採用縮寫的方式,每個單詞可取三到四個字母表示,也可根據實際情況,實際習慣進行縮寫
B. 列命名規則
表中的字段名的命名方式與表名的命名方式一致,只是不需要模塊的前綴,但是爲了編程的方便性,可在前面加上字段類型的前綴,一般取用類型的三個字母,但是不需要下化線,而且這三個字母必須小寫;如姓名字段爲字符型的話就應該爲chrName;嘗用字段類型的縮寫可參考下面的表格:
縮寫 類型
chr char
nvr nvarchar
num numeric
flt float
dtm datetime
int Int(integer)
mny money
img image
txt text
rel real
ntx ntext
C. 數據庫對象命名規則
命名規則爲 :對象類型 + 變量的含義
數據庫對象命名可歸納如下:
對象 前綴 示例
表 無 Sales_Reps
列 數據類型 intAuthorId
視 圖 [View] vw vwContractAuthors
存儲過程 [Store Procedure] prc prDeleteTerminatedReps
規 則 [Rules] rl rlZipCheck
默 認 [Default] df dfStandardQuanity
用戶自定義數據類型 dt dtAddressLine
用戶自定義功能 fn fnParser
索引(聚集) ic icAuthorFullName
索引(非聚集) in inClientStateCity
主鍵(聚集) pc pcCustomerId
主鍵(非聚集) pk pnSstateLookupId
外 鍵 [Foreign Key] fk fkRepCompanyId
觸發器 [Trigger] tr trStoreDelete
遊標 [Cursor] cr crTables
D. 特殊規則
 在字段的類型上面,爲了不因爲系統的設置而造成編程上面的問題,所以只要是日期類型,一般都用字符型來代替,其長度不應該小於10位,而且存儲格式統一,如2002-07-15 。
 爲了避免在以後的編程以及字體差異方面帶來不利,因此只要是能下拉的字段一般都指定統一的編碼,可以取用數字型來代替,但必須著名每個數字代表的意思;如性別字段:可以採用數字代替的方式,1:代表男,0:代表女;而且要在字段後面的備註欄中填寫清楚。