SQL代碼規范


1.  建表規約

1)   表中字段名稱

a)    表達是否概念的字段,必須使用is_xxx的方式命名,數據類型是bit

b)    小數類型為decimal,禁止使用float和double。

說明:float和double在存儲的時候,存在精度損失的問題,很可能在值得比較時,得到不正確的結果。如果存儲的數據范圍超過decimal的范圍,建議將數據拆成整數和小數分開存儲。

c)   字段允許適當的冗余,以提高性能,但是必須考慮數據同步的情況

冗余字段應遵循:

n  不是頻繁修改的字段。

n  不是varchar超長字段,更不能是text字段

 

2)   主鍵索引名為pk_字段名;唯一索引名為uk_字段名;普通索引名則為idx_字段名。

說明:pk_即primary key,uk_即unique key;idx_即index的簡稱。

 

2.  SQL規約

1)   不要使用count(列名)或count(常量)來替代count(*),count(*)是SQL92 定義的 標准統計行數的語法,跟數據庫無關,跟 NULL 有關。

說明:count(*)會統計值為NULL的行,而count(列名)不會統計此列為NULL值的行。

 

2)   使用ISNULL()來判斷是否為NULL值。

注意:NULL與任何值的直接比較都為 NULL。

說明:

1)NULL<>NULL 的返回結果是NULL,而不是false。

2)NULL=NULL 的返回結果是NULL,而不是true。

3)NULL<>1 的返回結果是NULL,而不是true。

 

3)   在代碼中寫分頁查詢邏輯時,若count為0應直接返回,避免執行后面的分頁語句。

 

4)   不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。

說明:學生表中的student_id是主鍵,那么成績表中的student_id則為外鍵。如果更新學生表中的student_id,同時觸發成績表中的student_id更新,則為級聯更新。外鍵與級聯更新適用於單機低並發,不適合分布式、高並發集群;級聯更新是強阻塞,存在數據庫更新風暴的風險;外鍵影響數據庫的插入速度。

 

4)   避免使用存儲過程,存儲過程難以調試和擴展,更沒有移植性。

 

5)   數據訂正時,刪除和修改記錄時,要先select,避免出現誤刪除,確認無誤才能執行更新語句。

 

6)   in操作能避免則避免,若實在避免不了,需要仔細評估in后邊的集合元素數量,控制在1000個之內。

 

7)   TRUNCATE TABLE比DELETE速度快,且使用的系統和事務日志資源少,但TRUNCATE無事務且不觸發trigger,有可能造成事故,故不建議在開發代碼中使用此語句。

說明:DELETE語句必須帶條件where,刪除全表也可加where 1=1。

 

8)   在表查詢中,一律不要使用 * 作為查詢的字段列表,需要哪些字段必須明確寫明。

 

9)   不要寫一個大而全的數據更新接口,不管是不是自己的目標更新字段,都進行update這是不對的。執行 SQL 時,盡量不要更新無改動的字段,一是易出錯;二是效率低。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM