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 |
數據庫過程腳本備份 |
數據庫過程腳本備份 |
|
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語句去考慮問題。
- 基本的SQL優化,如我們要大寫SQL語句,oracle編譯SQL是按照大寫去編譯的;
- 如OR/AND使用的先後順序,我們的SQL語句在編譯時是從後向前進行編譯的,這個時候就需要酌情去選擇WHERE後過濾字段的先後順序。
- 在數據庫大並且可選的情況下我們儘量避免使用GROUP BY進行分組,如果需要使用GROUP BY 嘗試先使用WHERE條件過濾一部分數據,使GROUP BY的數據內容儘可能的減小,另GROUP BY 儘量選擇索引字段。
- 我們在使用索引做查詢時,不用對索引字段進行附加操作,這樣會導致索引失效。
- 在聚合、統計分析時,儘量使用ORACLE分析函數。
- 另外最後需要注意細節問題,比如IN/EXISTS、JOIN語句用法等基本無需強制進行優化,提升工作效率。
- 建立索引、分區、物化視圖、並行查詢需要針對特定的場景下,不要盲目操作。
5.5.3 PL/SQ使用
- 使用PL/SQL時注意在WHILE/LOOP/FOR循環裏添加BEGIN END 匿名塊,目的是進行異常數據的日誌管理記錄,另每一個作用域都需要進行異常的日誌輸出。如下所示:
- 在無特殊需求的情況下,儘量減少視圖的使用,本質上沒有差別,可以使用SQL語句。
- 在無特殊需求的情況下,儘量減少索引的建立,這樣會增加IO的壓力與內存。
- 在無特殊需求的情況下,儘量減少觸發器的使用,同樣增加IO操作。
- 在無特殊需求的情況下,儘量減少遊標的使用,遊標的查詢性能比較昂貴。
- 在無特殊需求的情況下,儘量減少存儲過程使用,儘可能用一條複雜SQL進行查詢替代,存儲過程性能比較昂貴。
- 在無特殊需求的情況下,儘量減少存儲過程使用,儘可能用一條複雜SQL進行查詢替代,存儲過程性能比較昂貴。
- .....
注: 本文是博主參加架構師培訓時的文檔(這個版本已公開), 現找不到原博客地址, 所以只能顯示原創, 如發現侵權, 請提供相關證明, 並站內信告知, 博主立馬刪除