1. 程式人生 > >Oracle資料庫開發和設計規範

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規範約定

  1. 遵守資料的設計規範3NF 規定

· 表內的每一個值都只能被表達一次。

· 表內的每一行都應該被唯一的標識(有唯一鍵)。

· 表內不應該儲存依賴於其他鍵的非鍵資訊。

  1. 實體表都必須包含四個欄位:編號(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唯一條件

4 Oracle保留字和關鍵字

https://blog.csdn.net/jieouyang/article/details/8260429