ORACLE數(shù)據(jù)庫命名編碼規(guī)范
ORACLE數(shù)據(jù)庫命名編碼規(guī)范
版本記錄:
當(dāng)前版本:
作 者:
完成日期:
簽 收 人:
文件狀態(tài):
[ ] 草稿
[√] 正式發(fā)布
[ ] 正在修改
簽收日期:
1、 編寫目的
使用統(tǒng)一的命名和編碼規(guī)范,使數(shù)據(jù)庫命名及編碼風(fēng)格標(biāo)準(zhǔn)化,以便于閱讀、理解和
繼承。
2、 適用范圍
本規(guī)范適用于公司范圍內(nèi)所有以O(shè)RACLE作為后臺數(shù)據(jù)庫的應(yīng)用系統(tǒng)和項(xiàng)目開發(fā)工作。
3、 對象命名規(guī)范
3.1 數(shù)據(jù)庫和SID
數(shù)據(jù)庫名定義為系統(tǒng)名+模塊名
? 全局?jǐn)?shù)據(jù)庫名和例程SID 名要求一致
? 因SID 名只能包含字符和數(shù)字,所以全局?jǐn)?shù)據(jù)庫名和SID 名中不能含有“_”等字符
3.2 表相關(guān)
3.2.1 表空間
? 面向用戶的專用數(shù)據(jù)表空間以用戶名+_+data命名 ,如Aud 用戶專用數(shù)據(jù)表空間可命
名為Aud_data
? 面向用戶的專用索引表空間以用戶名+_+idx命名
第2/9頁
? 面向用戶的專用臨時(shí)表空間以用戶名+_+tmp命名
? 面向用戶的專用回滾段表空間以用戶名+_+rbs 命名
? 面向應(yīng)用的表空間以應(yīng)用名+_data/應(yīng)用名+_idx/應(yīng)用名+_tmp/應(yīng)用名+_rbs 命名
? LOB 段數(shù)據(jù)專用表空間以其數(shù)據(jù)表空間+_+lobs 命名,如上例中數(shù)據(jù)表空間為
Aud_data,則LOB 段表空間可命名為Aud_data_lobs
3.2.2 表空間文件
表空間文件命名以表空間名+兩位數(shù)序號(序號從01開始)組成,如Aud_data01 等
3.2.3 表
表命名要遵循以下原則:
? 一般表采用“系統(tǒng)名+t_+模塊名+_+表義名” 格式構(gòu)成
? 若數(shù)據(jù)庫中只含有單個(gè)模塊,命名可采用“系統(tǒng)名+t_+表義名”格式構(gòu)成
? 模塊名或表義名均以其漢語拼音的首字符命名,表義名中漢語拼音均采用小寫,且
字符間不加分割符;
? 表別名命名規(guī)則:取表義名的前3 個(gè)字符加最后一個(gè)字符。如果存在沖突,適當(dāng)增
加字符(如取表義名的前4 個(gè)字符加最后一個(gè)字符等)
? 臨時(shí)表采用“系統(tǒng)名+t_tmp_+表義名” 格式構(gòu)成
? 表的命名如
dft_gy_cbap:系統(tǒng)名(電費(fèi) df)+t_+模塊名(高壓 gy)+_+表義名(抄表安排 cbap)
dft_cbbj: 系統(tǒng)名(電費(fèi) df)+t_+表義名(抄表標(biāo)記 cbbj)
dft_tmp_hj: 系統(tǒng)名(電費(fèi) df)+tmp+表義名(合計(jì)hj)(此處為臨時(shí)表)
? 關(guān)聯(lián)表命名為Re_表A_表B,Re 是Relative的縮寫,表A 和表B均采用其表義名或
縮寫形式。
3.2.4 屬性(列或字段)
屬性命名遵循以下原則:
? 采用有意義的列名,為實(shí)際含義的漢語拼音的首字符,且字符間不加任何分割符
? 屬性名前不要加表名等作為前綴
? 屬性后不加任何類型標(biāo)識作為后綴
? 不要使用“ID”作為列名
? 關(guān)聯(lián)字段命名以 “cd+_+關(guān)聯(lián)表的表義名(或縮寫)+_+字段名”進(jìn)行
第3/9頁
3.2.5 主鍵
? 任何表都必須定義主鍵
? 表主鍵命名為:“pk+_+表名(或縮寫)+_+主鍵標(biāo)識”
如“pk_YHXX_IDKH”等
3.2.6 外鍵
表外鍵命名為: “fk+_+表名(或縮寫)+_主表名(或縮寫)+_+主鍵標(biāo)識”
如“fk_YHLX_YHXX_SFZH”等
3.2.7 CHECK約束
CHECK 約束命名為: “chk+_+CHECK約束的列名(或縮寫)”
3.2.8 UNIQUE約束
UNIQUE 約束命名為: “unq+_+UNIQUE約束的列名(或縮寫)”
3.2.9 索引
索引的命名為:“表名(或縮寫)+_+列名+_idx”。
其中多單詞組成的屬性列列名取前幾個(gè)單詞首字符再加末單詞首字符組成
如yd_kh 表khid 上的index: yd_kh_khid_idx
3.2.10 觸發(fā)器
? AFTER型觸發(fā)器
系統(tǒng)名+tr_+<表名>_+<i,u,d的任意組合> +[_row]
? BEFORE型觸發(fā)器
系統(tǒng)名+tr_+<表名>_+bef_<i,u,d的任意組合>+[_row]
? INSTEAD OF型觸發(fā)器
系統(tǒng)名+ti_+<表名>+_+<i,u,d的任意組合>+[_row]
? 各種類型的觸發(fā)器中
i,u,d 分別表示insert、update 和delete
行級觸發(fā)器,后加_row 標(biāo)識,語句級觸發(fā)器不加,如 yddftr_CSH_i_row
3.2.11 簇
第4/9頁
簇以簇中要存儲的各個(gè)表(或表別名)及表間加and的組成 命名,即表“A+And+表B…”,
如存儲GR(工人)和GRJN(工人技能)表的簇命名為GRAndGRJN
3.3 視圖
視圖命名以系統(tǒng)名v_+模塊名作為前綴,其他命名規(guī)則和表的命名類似
3.4 序列
序列命名以seq_+含義名組成
3.5 同義詞
同義詞命名與其基礎(chǔ)對象的名稱一致,但要去除其用戶前綴或含有遠(yuǎn)程數(shù)據(jù)庫鏈接的后綴
3.6 存儲對象相關(guān)
3.6.1 存儲過程
存儲過程命名由“系統(tǒng)名+sp+_+存儲過程標(biāo)識(縮寫)”組成
存儲過程標(biāo)識要以實(shí)際含義的漢語拼音的首字符構(gòu)成,并用下劃線分割各個(gè)組成部分。
如增加代理商的帳戶的存儲過程為“sfsp_ZJDLSZH”。
3.6.2 函數(shù)
函數(shù)命名由“系統(tǒng)名+f+_+函數(shù)標(biāo)識”組成
3.6.3 包
包命名由“系統(tǒng)名+pkg+_+包標(biāo)識”組成
3.6.4 函數(shù)文本中的變量采用下列格式命名:
? 參數(shù)變量命名采用“i (o或io)+_+名稱”形式,前綴i 或o 表輸入還是輸出參數(shù)
? 過程變量命名采用“l(fā)+_+名稱”形式
? 全局包變量命名采用“g+_+名稱”形式
? 游標(biāo)變量命名采用“名稱+_+cur”形式
? 常量型變量命名采用“c+_+名稱”形式
? 變量名采用小寫,若屬于詞組形式,用下劃線分隔每個(gè)單詞
? 變量用來存放表中的列或行數(shù)據(jù)值時(shí),使用%TYPE、%ROWTYPE 方式聲明變量,使變量聲
第5/9頁
明的類型與表中的保持同步,隨表的變化而變化
3.7 用戶及角色
? 用戶命名由“系統(tǒng)名稱+_+user+_+名詞(或縮寫)或名詞短語(或縮寫)”組成
? 角色命名由“系統(tǒng)名稱+_+role+_+名詞(或縮寫)或名詞短語(或縮寫)”組成
3.8 數(shù)據(jù)庫鏈接
? 數(shù)據(jù)庫鏈接命名由“遠(yuǎn)程服務(wù)器名+_+數(shù)據(jù)庫名+_+link”組成
? 若遠(yuǎn)程服務(wù)器名和數(shù)據(jù)庫名一致,上式“_+數(shù)據(jù)庫名”部分省去
3.9 命名中的其它注意事項(xiàng)
? 命名都不得超過30個(gè)字符。
? 不要在對象名的字符之間留空格
? 小心保留詞,要保證你的命名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用訪問方法沖突
4、 編碼規(guī)范
4.1 一般性注釋
4.1.1 注釋盡可能簡潔、詳細(xì)而全面
4.1.2 創(chuàng)建每一數(shù)據(jù)庫對象時(shí)都要加上COMMENT ON注釋,以說明該對象的功能和用途;建表時(shí),
對某些數(shù)據(jù)列也要加上COMMENT ON注釋,以說明該列和/或列取值的含義。
如:XX 表中有CZZT列屬性為NUMBER(10, 0)可加COMMENT ON 注釋如下
COMMENT ON COLUMN XX.CZZT IS '0 = 正常, 1 = 等待, 2 = 超時(shí), 3 = 登出'
4.1.3 注釋語法包含兩種情況:單行注釋、多行注釋
單行注釋:注釋前有兩個(gè)連字符(--),一般對變量、條件子句可以采用該類注釋。
多行注釋:符號/*和*/之間的內(nèi)容為注釋內(nèi)容。對某項(xiàng)完整的操作建議使用該類注釋。
4.2 函數(shù)文本注釋
4.2.1 在每一個(gè)塊和過程(存儲過程、函數(shù)、包、觸發(fā)器、視圖等)的開頭放置注釋
/************************************************************************
第6/9頁
*name : --函數(shù)名
*function : --函數(shù)功能
*input : --輸入?yún)?shù)
*output : --輸出參數(shù)
*author : --作者
*CreateDate : --創(chuàng)建時(shí)間
*UpdateDate : --函數(shù)更改信息(包括作者、時(shí)間、更改內(nèi)容等)
*************************************************************************/
CREATE [OR REPLACE] PROCEDURE dfsp_xxx

4.2.2 傳入?yún)?shù)的含義應(yīng)該有所說明。如果取值范圍確定,也應(yīng)該一并說明。取值有特定含義
的變量(如boolean類型變量),應(yīng)給出每個(gè)值的含義。
4.2.3 在每一個(gè)變量聲明的旁邊添加注釋。說明該變量要用作什么
通常,簡單使用單行注釋就行了,例如
l_sfzh CHAR(11) --身份證號碼
4.2.4 在塊的每個(gè)主要部分之前添加注釋
在塊的每個(gè)主要部分之前增加注釋,解釋下—組語句目的,最好是說明該段語句及算
法的目的以及要得到的結(jié)果,但不要對其細(xì)節(jié)進(jìn)行過多的描述
4.2.5 在塊和過程的開頭注釋中還可以增加要訪問的數(shù)據(jù)庫等信息
4.3 常用SQL 語句的編寫規(guī)范
4.3.1 CREATE語句
CREATE TABLE dft_dksz(
YHBS VARCHAR2(20) NOT NULL,
ZHGX DATE,
DKKHD VARCHAR2(24),
CONSTRAINT pk_dksz_yhbs PRIMARY KEY (YHBS)
)
4.3.2 SELECT語句
查詢語句采用以下原則編寫(可最大化重用共享池中的SQL 語句,提高應(yīng)用程序性能):
? 將SELECT 語句分為5部分:
(1) 由SELECT 開頭,后跟一個(gè)顯示查詢結(jié)果的列表;
第7/9頁
(2) 由FROM 開頭,后跟一個(gè)或多個(gè)獲取數(shù)據(jù)所涉及的表;
(3) 由WHERE 開頭,后跟一個(gè)或多個(gè)確定所需值的條件;
(4) 由GROUP BY開頭,后跟一個(gè)或多個(gè)表列名,通過這些列以對查詢結(jié)果進(jìn)行匯總;
(5) 由ORDER BY開頭,后跟一個(gè)或多個(gè)表列名,通過這些列以對查詢結(jié)果進(jìn)行排序。
? 每個(gè)部分分行編寫,將每一行的第一個(gè)關(guān)鍵字與第一行的SELECT尾部對齊,如
SELECT col1, col2, col3
FROM table1
WHERE col1 > col2
GROUP BY col1, col2
ORDER BY col1;
? 關(guān)鍵字用大寫,列名和表名采用小寫
? 語句中嵌入逗號時(shí),在逗號后面加一空格,當(dāng)逗號是最后一個(gè)字符時(shí),把它放在本行
? 當(dāng)語句的同一部分要延續(xù)到下一行時(shí),按下列格式排列:
SELECT col1, col2, col3, col4, col5, col6,
col7, col8, col9, col10
? 將語句中WHERE 和AND 部分格式化,書寫布局類似于
WHERE
AND
AND
? 當(dāng)語句中出現(xiàn)括號時(shí),括號的兩邊不留空格
? 在SQL 語句使用運(yùn)算符時(shí),操作兩邊應(yīng)各留一個(gè)空格,如
WHERE X = Y
AND A = B
AND C = D
4.3.3 INSERT語句
INSERT INTO <要插入的表名>
(<列1>, <列2>, .., <列n-1>, <列n>)
VALUES (<列1值>, <列2值>, .., <列n-1值>, <列n值>)
4.3.4 UPDATE語句
UPDATE <要更新的表名>
SET <要更新的列> = <列值>
4.3.5 DELETE語句
DELETE FROM table1
WHERE col1 = '???'
第8/9頁
4.4 條件執(zhí)行語句(IF)編寫規(guī)范
條件執(zhí)行語句IF…ELSE 按以下格式編寫
IF <條件表達(dá)式>
THEN
<一條或多條語句>
[ELSE (或ELSIF<條件表達(dá)式>)
THEN
<一條或多條語句>
END IF;
注:
(1) 在IF…THEN和ELSE(或ELSIF)及ELSE…THEN和END IF間可包含一條或多條PL/SQL
語句,而不需要加BEGIN 和END
(2) IF…ELSE…ENDIF 語句可以嵌套
(3) 注意ELSIF的寫法
4.5 循環(huán)語句編寫規(guī)范
4.5.1 簡單循環(huán)語句
LOOP
<零條或多條語句>
EXIT WHEN <條件表達(dá)式>
<零條或多條語句>
END LOOP;
4.5.2 FOR循環(huán)語句
FOR 變量 IN [變量取值范圍]
LOOP
<一條或多條語句>
END LOOP;
4.5.3 WHILE循環(huán)語句
WHILE <條件表達(dá)式>
LOOP
<一條或多條語句>
END LOOP;
4.6 函數(shù)文本(存儲過程、函數(shù)和包等)
第9/9頁
? 對于存儲過程、函數(shù)等程序塊都要有異常處理部分,在異常部分的最后都要設(shè)置OTHERS
異常情態(tài)處理器,以提高程序的自檢能力,格式如下:
BEGIN

EXCEPTION
WHEN excep—name1 THEN

WHEN excep—name2 THEN

WHEN OTHERS THEN

END;
? 對于子程序、觸發(fā)器、包等帶名的程序塊,要使用結(jié)束標(biāo)識,如
CREATE OR REPLACE PROCEDURE XXXsp_XXX IS

BEGIN

END XXXsp_XXX;/* 此處的過程名XXXsp_XXX是可選的,規(guī)范要求寫上,與塊開始的CREATE相對應(yīng) */