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

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

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

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

 

2. 實體表都必須包含四個字段:編號(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字段規范

  1. 一行記錄必須表內唯一,表必須有主鍵。
  2. 枚舉類型使用 NUMBER,且需要說明枚舉類型的各個不同取值的含義
  3. ID結尾的字段為僅由數字組成,Code結尾的字段為僅由字母或數字組成
  4. 用CHAR(1)表示布爾值的取大寫:“Y”,“N”。
  5. 應盡量使用VARCHAR2代替CHAR類型;
  6. VARCHAR(2)最多4000字符;
  7. DATE精確到秒,而非天;
  8. 使用CLOB代替LONG,BLOB代替LONG RAW;
  9. 使用NUMBER數據類型時請給定長度,例如:NUMBER(5,2) 表示整數部分最大3位,小數部分為2位;

 

3 使用規范

3.1綜合

  1. 如果開發過程中需要建立索引,需要提交書面的更改請求,說明所需索引的定義(名稱、字段列表、順序、索引類型)以及建立的理由。數據庫管理員統一維護索引並將提交的請求更改。
  2. 數據庫各表的初始數據(包含各代碼表、配置表)需要提交給數據庫管理員。
  3. 不得使用觸發器。
  4. 涉及到數據庫多表數據的更改(Insert/Delete/Update)必須使用數據庫事務進行控制,並且必須有完整事務開始和提交/回滾機制。不能使用范圍事務
  5. 盡量避免Union操作的使用,需要使用時,請向數據庫管理員咨詢使用Union操作的影響。
  6. SQL語句和存儲過程,盡量使用PL/SQL Develper的代碼美化器美化。
  7. 屬於ORACLE的關鍵字大小,表名、列名等小寫。

 

3.2查詢

  1. 在表查詢中,一律不要使用* 作為查詢的字段列表,需要哪些字段必須顯式寫明
  2. 在表查詢中,必須有Where條件,除非此表為非增長表
  3. 在表查詢中,一次最多返回的記錄條數不要超過1000條或記錄內容不要大於1MB的數據。
  4. 在表查詢中,作Order By排序時,優先使用主鍵列,索引列
  5. 多表關聯查詢時,優先使用Where條件,再作表關聯,並且需要保證被關聯的字段需要有索引。
  6. 避免在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’);

  1. 避免使用數據庫的類型自動轉換功能:

錯誤:
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刪除

  1. 刪除記錄時,必須有Where唯一條件
  2. 當有主從表時,要先刪除從表記錄,在刪除主表記錄

 

3.5修改

  1. 修改記錄時,必須有Where唯一條件

 

4 Oracle保留字和關鍵字


ACCESS DECIMAL INITIAL ON START
ADD NOT INSERT ONLINE SUCCESSFUL
ALL DEFAULT INTEGER OPTION SYNONYM
ALTER DELETE INTERSECT OR SYSDATE
AND DESC INTO ORDER TABLE
ANY DISTINCT IS PCTFREE THEN
AS DROP LEVEL PRIOR TO
ASC ELSE LIKE PRIVILEGES TRIGGER
AUDIT EXCLUSIVE LOCK PUBLIC UID
BETWEEN EXISTS LONG RAW UNION
BY FILE MAXEXTENTS RENAME UNIQUE
FROM FLOAT MINUS RESOURCE UPDATE
CHAR FOR MLSLABEL REVOKE USER
CHECK SHARE MODE ROW VALIDATE
CLUSTER GRANT MODIFY ROWID VALUES
COLUMN GROUP NOAUDIT ROWNUM VARCHAR
COMMENT HAVING NOCOMPRESS ROWS VARCHAR2
COMPRESS IDENTIFIED NOWAIT SELECT VIEW
CONNECT IMMEDIATE NULL SESSION WHENEVER
CREATE IN NUMBER SET WHERE
CURRENT INCREMENT OF SIZE WITH
DATE INDEX OFFLINE SMALLINT 

CHAR VARHCAR VARCHAR2 NUMBER DATE LONG
CLOB BLOB BFILE 
INTEGER DECIMAL 
SUM COUNT GROUPING AVERAGE
TYPE

 


免責聲明!

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



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