Oracle資料庫開發和設計規範
1 命名原則
1.1約定
- 是指對資料庫、資料庫物件如表、欄位、索引、序列、儲存過程等的命名約定;
- 命名使用富有意義的英文詞彙,儘量避免使用縮寫,多個單片語成的,中間以下劃線分割
- 避免使用Oracle的保留字如LEVEL、關鍵字如TYPE(見Oracle保留字和關鍵字); 各表之間相關列名儘量同名;
- 除資料庫名稱長度為1-8個字元,其餘為1-30個字元,Database link名稱也不要超過30個字元;
- 命名只能使用英文字母,數字和下劃線;
1.2表名
規則如下:
命名規則為xxx_yyy_TableName。xxx表示子系統的名稱,由三個字母構成;yyy表示子系統中的子模組的名稱(可以沒有);TableName為表含義
TableName規則如下:
ü 使用英文單詞或片語作為表名,不得使用漢語拼音
ü 用名詞和名詞短語作表名
ü 不使用複數
正確的命名,例如:
sys_user
biz_order
1.3儲存過程
規則如下:
命名規則為xxx_yyy_StoredProcedureName。xxx表示子系統的名稱,由三個字母構成;yyy表示子系統中的子模組的名稱(可以沒有);StoredProcedureName為儲存過程含義
StoredProcedureName規則如下:
ü 用動詞或動詞短語來命名,並帶有賓語
ü 需要符合用Pascal 命名規則。
ü 儘量謹慎地使用縮寫
ü 儘量不要和關鍵字重合
ü 不要用任何名字首 (例如 U,B)
ü StoredProcedureName內不使用下劃線
ü 當操作依賴條件時,一般結尾使用 By+條件
儲存過程正確的命名,例如:
sys_InsertUser
sys_SearchUserByUserID
sys_DeleteUserByUserID
1.4檢視
規則如下:
ü 檢視的命名採用xxx_yyy_ViewName_v。xxx表示子系統的名稱,由三個字母構成;yyy表示子系統中的子模組的名稱(可以沒有);_v字尾表示檢視,ViewName部分表示檢視的含義。
ViewName規則如下:
ü 用名詞和名詞短語,
ü 不使用複數
ü 用Pascal 命名規則
ü 儘量謹慎地使用縮寫
ü 儘量不要和關鍵字重合
ü 不要用任何名字首 (例如 U,B)
ü ViewName中使用下劃線
檢視正確的命名,例如:
sys_UserView_v
biz_UserOrderView_v
1.5索引
規則如下:
table_name_column_name_idx。
多單片語成的column name,取前幾個單詞首字母,加末單片語成column_name。
如:
tst_sample表member_id上的索引: tst_sample_mid_idx
sys_news表title上的索引: sys_news_titile_idx;
1.6序列
規則如下:
table_name_seq;
如:
tst_sample表的序列: tst_sample_seq
1.7主鍵
主鍵命名:table_name_pk;
如:
tst_sample表的主鍵: tst_sample_pk
1.8外來鍵
外來鍵命名:table_name_column_name_fk;
多單片語成的column name,取前幾個單詞首字母,加末單片語成column_name。
如:
tst_sample表user_id欄位的外來鍵: tst_sample_uid_fk
tst_sample表type_id欄位的外來鍵: tst_sample_tid_fk
2 設計規範
2.1規範約定
- 遵守資料的設計規範3NF 規定
· 表內的每一個值都只能被表達一次。
· 表內的每一行都應該被唯一的標識(有唯一鍵)。
· 表內不應該儲存依賴於其他鍵的非鍵資訊。
- 實體表都必須包含四個欄位:編號(ID)、程式碼(Code)、建立人(Created By)、建立時間(Creation Time)、修改人(Modified By)、修改時間(Modification Time)、刪除標誌(Delete Status)。其含義如下:
ü 編號是系統內的唯一標識
ü 程式碼是客戶為這個實體的編碼,這個欄位看需要確定是否保留
ü 建立人是是指資料庫記錄建立人
ü 建立時間是指資料庫記錄建立時間,預設為SYSDATE
ü 修改人是是指資料庫記錄修改人
ü 修改時間是指資料庫記錄修改時間,預設為SYSDATE
ü 刪除標誌是本條記錄是否已刪除的標誌(0:沒有刪除;1:已經刪除),資料中的資料不做真正刪除,只設置這個標誌
這五個欄位的命名規則如下
ü 實體名+欄位名稱,如user_id、user_code、created_by、creation_time、modified_by 、modification_time 、delete_status。
ü 這五個欄位的型別和長度規則如下
n 編號 INTEGER
n 程式碼 VARCHAR2(30)
n 建立人 INTEGER
n 建立時間DATE
n 修改人 INTEGER
n 修改時間DATE
n 刪除標誌 CHAR(1)
2.2欄位規範
一行記錄必須表內唯一,表必須有主鍵。
列舉型別使用 NUMBER,且需要說明列舉型別的各個不同取值的含義
ID結尾的欄位為僅由數字組成,Code結尾的欄位為僅由字母或數字組成
用CHAR(1)表示布林值的取大寫:“Y”,“N”。
應儘量使用VARCHAR2代替CHAR型別;
VARCHAR(2)最多4000字元;
DATE精確到秒,而非天;
使用CLOB代替LONG,BLOB代替LONG RAW;
使用NUMBER資料型別時請給定長度,例如:NUMBER(5,2) 表示整數部分最大3位,小數部分為2位;
3 使用規範
3.1綜合
如果開發過程中需要建立索引,需要提交書面的更改請求,說明所需索引的定義(名稱、欄位列表、順序、索引型別)以及建立的理由。資料庫管理員統一維護索引並將提交的請求更改。
資料庫各表的初始資料(包含各程式碼表、配置表)需要提交給資料庫管理員。
不得使用觸發器。
涉及到資料庫多表資料的更改(Insert/Delete/Update)必須使用資料庫事務進行控制,並且必須有完整事務開始和提交/回滾機制。不能使用範圍事務
儘量避免Union操作的使用,需要使用時,請向資料庫管理員諮詢使用Union操作的影響。
SQL語句和儲存過程,儘量使用PL/SQL Develper的程式碼美化器美化。
屬於ORACLE的關鍵字大小,表名、列名等小寫。
3.2查詢
在表查詢中,一律不要使用* 作為查詢的欄位列表,需要哪些欄位必須顯式寫明
在表查詢中,必須有Where條件,除非此表為非增長表
在表查詢中,一次最多返回的記錄條數不要超過1000條或記錄內容不要大於1MB的資料。
在表查詢中,作Order By排序時,優先使用主鍵列,索引列
多表關聯查詢時,優先使用Where條件,再作表關聯,並且需要保證被關聯的欄位需要有索引。
避免在WHERE字句中對列施以函式:
錯誤:
SELECT service_id,service_name
FROM service_promotion
WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’)
= ‘20001-09-01’;
正確:
SELECT service_id,service_name
FROM service_promotion
WHERE gmt_modified
= TO_DATE(‘2001-9-01’,’yyyy-mm-dd’)
AND gmt_modified
< TO_DATE(‘2001-9-02’,’yyyy-mm-dd’);
避免使用資料庫的型別自動轉換功能:
錯誤:
SELECT category_id, category_name FROM category
WHERE category_id = ‘123’; – id’s type is number
正確:
SELECT category_id, category_name FROM category
WHERE category_id = 123; – id’s type is number
3.4刪除
刪除記錄時,必須有Where唯一條件
當有主從表時,要先刪除從表記錄,在刪除主表記錄
3.5修改
修改記錄時,必須有Where唯一條件