數據庫注意事項,命名規範,編碼 第二篇

1. 規範內容

1.1 開發工具:

爲提高開發效率,降低開發門檻,幫助新員工快速搭建開發環境,避免工具軟件使用衝突影響工作,對開發設計人員使用的日常開發工具,進行如下約定:

數據庫:服務器端爲Oracle 11gR1,客戶端版本要求10g以上

數據庫連接器:PLSQL、TOAD

代碼管理工具:推薦使用TortoiseSVN 1.7以上版本

文本編輯器:Edit Plus、UltraEdit、Sublime

文件字符集:UTF-8

建模工具:POWER DESIGNER ,native premium

說明:

SQL腳本開發完畢後,需進行上傳至SVN並本地最好留有備份,具體上傳規則和上傳位置見公共資料文檔,注意使用匹配的TortoiseSVN,避免版本不匹配,出現軟件SVN更新操作異常。

1.2 文件

1.2.1文件後綴

腳本使用下列文件後綴:

文件類別

文件後綴

SQL腳本

.sql

數據文件

.dbf

導入/導出文件

.dmp

備份數據文件

.dmp

備份腳本

.sh

 

1.2.2常見文件名:

常用的文件名包括:

文件名

用途

00_STORAGE.sql

數據庫腳本備份

10_TABLES.sql

數據庫表結構腳本備份

20_FUNCTION.sql

數據庫函數腳本備份

30_VIEWS.sql

數據庫視圖腳本備份

40_PROC.sql

數據庫過程腳本備份

50_JOBS.sql

數據庫過程腳本備份

60_DATAS.sql

數據庫數據腳本備份

70_LOGS.sql

數據庫日誌腳本備份

80_ANY1.sql

數據庫其他備份(同義詞、連接、SQL語句等)

90_ANY2.dmp

數據庫其他備份(數據庫導入導出備份)

 

1.3 命名規則

1.3.1包名

說明:包名稱以PKG和單一名詞組合而成,中間以“_”分割,如:PKG_SYS。

 

1.3.2函數命名:

說明:函數名稱簡寫,中間以“_”分割,具有實際意義如:SPLIT_CSV.要求函數描述說明、參數和返回值。

 

 

1.3.3 過程

說明:過程均使用在包下,禁止單獨定義;首先在包內進行聲明過程,描述過程用途、參數。然後在包體描述過程用途、參數、腳本編寫。

包聲明:

包體:

 

1.3.4 定時JOB

說明:JOB在包內聲明,包體實現,並註釋描述、參數。

包聲明:

包體:

 

 

 

1.3.5 其他數據類型

說明:如表類型、字段類型等均按照以下規則:

(1)腳本變量命名:V_NAME

 

(2)遊標及其變量聲明:CUR_NAME、V_CUR_NAME

 

 

 

(3)常量聲明:C_NAME

 

   (4)  其他變量類型聲明:具有實際意義的名稱,中間以“_”分割,具有實際意義如:

 

1.4 註釋

1.4.1 5.4.1 SQL註釋

我們在編寫SQL腳本的時候,尤其是複製SQL語句,一定要註釋清楚變量、表級聯關係、統計字段,以及SQL的查詢功能說明,並上傳SVN中去,這樣方便開發和維護。如下所示:

 

 

5.4.2 PL/SQL 註釋

PL/SQL編程如果不寫註釋,那麼後期維護會非常麻煩,因爲一個負責的業務往往會寫幾百上千行的代碼,後期運維有時候甚至需要花幾天時間去看一個業務邏輯。所以在編寫PL/SQL時候,註釋尤爲關鍵,一定要寫好註釋,寫清楚業務邏輯需求,實現思路;如下所示:

 

1.5 編程管理

5.5.1 數據庫設計

(1)所謂數據庫設計,一定要在遵循規則的基礎上進行設計,對需求要足夠了解,儘量把表設計的易用性更強,比如添加擴展字段,預留字段,通用標識字段等。

(2)主外鍵關聯關係一定要添加,一般情況下不建議手工維護主外鍵,除非情況特殊(如需求不確定,數據不穩定,不準確等)

(3)數據庫表結構一般情況下需要設置主鍵,需要設置4個數據交換字段CREATE_BY、CREATE_TIME、UPDATE_BY、UPDATE_TIME。

(4)在設計好表結構後,需要添加相關字段的約束,以便在最後一層控制數據入庫,當然我們是按照三層CHECK的原則,前端、應用端、數據庫端。最後保證數據的完整和有效性。

(5)在建立數據庫索引時,應該認真考慮,如何建立,比如我們可以去對數據庫的主鍵進行設置,讓其有更多作用。

5.5.2 SQL優化

SQL優化的手段很多,在數據庫表結構沒有大問題的前提下,我們的數據優化就要從SQL語句去考慮問題。

  1. 基本的SQL優化,如我們要大寫SQL語句,oracle編譯SQL是按照大寫去編譯的;
  2. 如OR/AND使用的先後順序,我們的SQL語句在編譯時是從後向前進行編譯的,這個時候就需要酌情去選擇WHERE後過濾字段的先後順序。
  3. 在數據庫大並且可選的情況下我們儘量避免使用GROUP BY進行分組,如果需要使用GROUP BY 嘗試先使用WHERE條件過濾一部分數據,使GROUP BY的數據內容儘可能的減小,另GROUP BY 儘量選擇索引字段。
  4. 我們在使用索引做查詢時,不用對索引字段進行附加操作,這樣會導致索引失效。
  5. 在聚合、統計分析時,儘量使用ORACLE分析函數。
  6. 另外最後需要注意細節問題,比如IN/EXISTS、JOIN語句用法等基本無需強制進行優化,提升工作效率。
  7. 建立索引、分區、物化視圖、並行查詢需要針對特定的場景下,不要盲目操作。

 

5.5.3 PL/SQ使用

  1. 使用PL/SQL時注意在WHILE/LOOP/FOR循環裏添加BEGIN END 匿名塊,目的是進行異常數據的日誌管理記錄,另每一個作用域都需要進行異常的日誌輸出。如下所示:

 

  1. 在無特殊需求的情況下,儘量減少視圖的使用,本質上沒有差別,可以使用SQL語句。
  2. 在無特殊需求的情況下,儘量減少索引的建立,這樣會增加IO的壓力與內存。
  3. 在無特殊需求的情況下,儘量減少觸發器的使用,同樣增加IO操作。
  4. 在無特殊需求的情況下,儘量減少遊標的使用,遊標的查詢性能比較昂貴。
  5. 在無特殊需求的情況下,儘量減少存儲過程使用,儘可能用一條複雜SQL進行查詢替代,存儲過程性能比較昂貴。
  6. 在無特殊需求的情況下,儘量減少存儲過程使用,儘可能用一條複雜SQL進行查詢替代,存儲過程性能比較昂貴。
  7. .....

 

注: 本文是博主參加架構師培訓時的文檔(這個版本已公開),  現找不到原博客地址, 所以只能顯示原創, 如發現侵權, 請提供相關證明, 並站內信告知, 博主立馬刪除

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章