數據庫編碼規範
V1.2
類別
文件名: |
數據庫編碼規範 |
版本號: |
V1.2 |
版本日期: |
|
作者: |
Nick |
日期: |
|
目 錄
爲了統一公司軟件開發的設計過程中關於數據庫設計時的命名規範和具體工作時的編程規範,便於交流和維護,特制定此規範。
本規範適用於開發組全體人員,作用於軟件項目開發的數據庫設計、維護階段。
Ø 數據庫對象:在數據庫軟件開發中,數據庫服務器端涉及的對象包括物理結構和邏輯結構的對象。
Ø 物理結構對象:是指設備管理元素,包括數據文件和事務日誌文件的名稱、大小、目錄規劃、所在的服務器計算極名稱、鏡像等,應該有具體的配置規劃。一般對數據庫服務器物理設備的管理規程,在整個項目/產品的概要設計階段予以規劃。
Ø 邏輯結構對象:是指數據庫對象的管理元素,包括數據庫名稱、表空間、表、字段/域、視圖、索引、觸發器、存儲過程、函數、數據類型、數據庫安全性相關的設計、數據庫配置有關的設計以及數據庫中其他特性處理相關的設計等。
4.1 設計環境
a) ORACLE 9I
數據庫 |
ORACLE 9i |
操作系統 |
SUSE LINUX 7.1以上版本,顯示圖形操作界面; RedHat 9 以上版本 |
CPU |
P III |
內存 |
|
硬盤空間 |
5GB以上的剩餘空間,如要建立較多的、大型的數據庫需要更多的硬盤空間 |
b) MS SQL SERVER 2000
數據庫 |
SQL SERVER 2000 企業版 打sp3以上補丁和安全補丁 |
操作系統 |
WINDOWS 2000 SERVER 或 WINDOWS 2000 Advanced Server 打sp4以上補丁 |
CPU |
P III |
內存 |
|
硬盤空間 |
|
4.2 設計使用工具
a) 使用PowerDesigner 做爲數據庫的設計工具,要求爲主要字段做詳盡說明。
b) 通過PowerDesigner 定製word格式報表,並導出word文檔,作爲數據字典保存,格式可參看附件1。(PowerDesigner v10 才具有定製導出word格式報表的功能)
c) 編寫數據庫建數據庫、建數據庫對象、初始化數據腳本文件
4.3 設計原則
a) 採用多數據文件
b) 禁止使用過大的數據文件,unix系統不大於2GB,window系統不超過500MB
c) oracle數據庫中必須將索引建立在索引表空間裏。
d) 基本信息表在建立時就分配足夠的存儲空間,禁止其自動擴展功能
e) 大文本字列、blob列要獨立出一張表,此表只有id和blob(或大文本)列
4.4 設計的更新
a) 在設計階段,由數據庫管理員或指定的項目組其一成員進行維護。
b) 運行階段,由數據庫管理員進行維護。
c) 如對錶結構進行修改,應先在PowerDesigner中進行修改,再重新導出WORD文檔,最後在數據庫中進行修改。如果修改的是數據庫字典表,必須由數據庫管理員進行。
d) 使用PowerDesigner生成SQL代碼,禁止由PowerDesigner直接連數據庫進行數據庫操作
e) 修改數據庫要通過SQL,禁止其它方式對數據進行修改
f) 修改數據庫的SQL要添加說明後保存備查
Ø 設定的前綴一律用小寫字母
Ø 標識名稱命名全部小寫
Ø 整個命名的全長不得超過30個字母
Ø 全部使用字母和下劃線‘_’,不能使用中文和其他字符,有特別情況允許使用末尾數字編號。例如:t_Finace1, t_Finace2...
Ø 命名名稱來自於業務,全部採用英文單詞
Ø 英文單詞過長可以採用通用的縮寫,儘量表達出業務的含義
Ø 如需要兩個以上的英文單詞做標識名稱,單詞之間要用下劃線‘_’連接
Ø 名稱全是由名詞組成的,名詞由大範圍到小範圍排序取名
Ø 完成某功能的名稱,如函數和過程,以動賓形式取名
6.1 數據庫結構命名
數據庫的命名要求使用與數據庫意義相關聯的英文字母,並且以“db_”打頭,
即db_<業務系統名稱>。
例如:china care 數據庫的命名爲 db_ccnet;
客戶資料數據庫的命名爲db_Customer_Info。
數據庫日誌的的命名以<數據庫名>_<日誌名>.log格式命名。其中,<日誌名>爲有意義的數據庫日誌名稱。
例如:db_ccnet_logredo.log
數據庫配置設計方案是以文件形式保存的,其內容是關於特定數據庫的配置項目的具體值。
數據庫配置文件的命名以:<數據庫類型簡寫〉_<應用系統標誌>_cfg.ini格式命名。
其中,數據庫類型簡寫見附件2《數據庫類型簡寫》,cfq表示該文件是數據庫配置文件。
例如:ORA_ ccnet_cfg.ini
數據庫複製與存儲設計方案是以文件形式保存的,其內容是關於特定數據庫之間的複製策略的具體細節。
數據庫複製與存儲設計文件的命名以:<數據庫類型簡寫>_<應用系統標誌>_rep.txt格式命名。
其中,數據庫類型簡寫見附件2《數據庫類型簡寫》,rep表示該文件是數據庫複製與存儲文件。
數據庫連接設計方案是以文件形式保存的,其內容是關於特定分佈式數據庫之間的連接設計的具體細節。
數據庫連接設計文件的命名以:<數據庫類型簡寫>_<應用系統標誌>_dbl. sql格式命名。其中,數據庫類型簡寫見附件2《數據庫類型簡寫》,dbl表示該文件是數據庫連接設計文件。
f) 表空間、數據文件命名(主要針對Oracle)
索引表空間:
表空間命名格式:ts<系統標識>_i
數據庫文件命名格式:ts<系統標識>_i[n].dbf
臨時表空間:
表空間命名格式:ts<系統標識>_t
數據庫文件命名格式:ts<系統標識>_t[n].dbf
回滾表空間:
表空間命名格式:ts<系統標識>_r
數據庫文件命名格式:ts<系統標識>_r[n].dbf
數據表空間:
表空間命名格式:ts<系統標識>_d
數據庫文件命名格式:ts<系統標識>_d[n].dbf
注:表空間名不超過8位,n 可取00-99或0-9,根據系統數據量確定。
6.2 數據庫對象命名
表的命名必須以“t_”(Table縮寫)開頭,格式爲:t_[系統標識]_<數據表類型標識>_<表標識>。
其中,[ ]表示可選項,依據實際情況而增加;<表標識> 要求與表意義相關聯的英文字母,例如:t_Customers。
數據表大致分爲:業務數據表、基本編碼表、輔助編碼表、系統信息表、累計數據表、結算數據表、決策數據表;
基本編碼表用base標誌
累計數據表用count標誌
系統信息表用info標誌 ...
例如:t_trade_base_trade_code,t_trade_info_help ...
根據業務要求進行命名,不需設定固定的前綴。
針對數據庫表中一個或多個字段建立的索引的命名格式應以“idx_”開頭,索引列名間用_隔開,即爲idx_ColumnName1_ColumnName2_…
其中,ColumnName1是數據庫表中(第一個)索引字段的名稱或名稱簡寫;ColumnName2是數據庫表中(第二個)索引字段的名稱或名稱簡寫;索引名的總長必需符合數據庫的規定。
例:idx_cert_number (表示在字段cert_number上創建索引)
視圖的命名必須以“v_”(View 縮寫)開頭,格式爲: v_<視圖類型>_[系統標識] _<視圖標識>。
其中,視圖類型參見“表的分類說明”;[系統標識_]是可選項,依據情況而增加;<視圖標識> 應與視圖意義相關聯的英文字母。
例:v_user_detail_info
存儲過程的命名必須符合sp_[系統標識]_<存儲過程標識>格式。
其中,sp表示是存儲過程;[系統標識]爲可選項,依據情況而增加;<存儲過程標識>是與存儲過程意義相關聯的英文字母,例如:USP_Query_Write_to_Disk。
例:sp_check_user_auth(以動賓方式取名)
觸發器的的命名必須符合tr_<表名>_<i,u,d的任意組合> 格式。
其中,tr表示是觸發器;<i,u,d的任意組合>是與觸發器意義相關聯的英文字母。
例:tr_user_info_iu (表示對user_info表進行插入、更新的觸發器)
函數的命名必須符合fn_[系統標識]_<函數標識>格式。
其中,fn表示是函數,[系統標識]爲可選項,依情況而定;<函數標識>是與函數意義相關聯的英文字母。
例:fn_create_id(以動賓方式取名)
h) 自定義數據類型
自定義數據類型的命名格式爲:ud_<自定義數據類型標識>_<數據類型>
i) Default(缺省)
Default(缺省)的命名格式一般爲:df_<Default標識>;對於非綁定的默認可取系統默認的名字,請參見第8.1點實例綁定具體字段。
例:df_begin_date 缺省開始日期 ‘20030101’
if exists (select * from sysobjects where type = 'D' and name = 'df_begin_date')
drop default dbo.df_begin_date
go
create default df_begin_date as '20030101'
go
j) Check、Constraint(約束)
約束的命名格式一般爲:ck_<表名>_ <Check標識>;一些約束可直接放在生成表的語句中。
例:ck_flag 參見第8.1點實例,約束字段flag只能取字符‘0’到‘9’:
constraint ck_flag CHECK (flag between '
k) Rule(規則)
規則的命名格式一般爲:rl_<Rule標識>;對於非綁定規則(約束) 可取系統默認的名字,參見第10點設計實例綁定具體字段。
例:rl_not_zero (定義一個不等於0的規則)
if exists (select * from sysobjects where type = 'R' and name = 'rl_not_zero')
drop rule dbo.rl_not_zero
go
create rule rl_not_zero as @i <> 0
go
主鍵的命名格式爲pk_<表名>_<主鍵標識>。
例:pk_user_info_userid (表user_info以字段userid創建主鍵)
外鍵的命名格式爲fk_<表名>_<主表名>_<外鍵標識>。
例:fk_user_info_department_deptid (在表user_info的字段department_id上創建外鍵,參照主表department)
同義詞的命名格式爲:sy_<同義詞標識>
例:sy_user_info (爲所有權屬於ben的表user_info的公共同義詞)
7.1 存儲過程或觸發器
a) 每一個存儲過程或觸發器都要在最前面寫註釋,註釋如下
/*
writer:
create date:
ver:
Depiction:
remark:
*/
另外,過程中聲明的重要變量要有註釋,例如:
@iActionFlag int = 0 /* 0 => Checkout, 1 => GetLatest, 2 => UndoCheckOut */
b) 如果只對存儲過程或觸發器進行部分修改時須添加以下注釋:
/*rewriter: add(rewriter): date:<格式:YYYY-MM-DD> start1:
修改描述:
*/
/* 原代碼內容*/(修改時)
/*rewriter: date:<格式:YYYY-MM-DD> end1: */
/*rewriter: add(rewriter): date:<格式:YYYY-MM-DD> start2: */
新代碼內容
/*rewriter: date:<格式:YYYY-MM-DD> end2: */
c) 如果對存儲過程或觸發器有較大的修改,可增加修改內容的註釋。
/*Log Id:<Log編號,從1開始一次增加>
rewriter:
rewrite date:<格式:YYYY-MM-DD>
Depiction:
*/
7.2 自定義函數
a) 每一個自定義函數都要在其前面寫註釋,註釋如下
/*
function name:xxxx
Depiction:<對此函數的描述>
param(a,b)
a 功能或描述....
b 功能或描述
output: x x=0表示..... x=1 表示......
writer:
create date:<創建日期,格式:YYYY-MM-DD>
ver:
remark:
* /
另外,函數中聲明的重要變量要有註釋,例如:
@iActionFlag int = 0 /* 0 => Checkout, 1 => GetLatest, 2 => UndoCheckOut */
b) 如果只對函數進行部分修改時須添加以下注釋:
/*rewriter: add(rewriter): date:<格式:YYYY-MM-DD> start1:
修改描述:
*/
/* 原代碼內容*/(修改時)
/*rewriter: date:<格式:YYYY-MM-DD> end1:*/
/*rewriter: add(rewriter): date:<格式:YYYY-MM-DD> start2: */
新代碼內容
/*rewriter: date:<格式:YYYY-MM-DD> end2: */
c) 如果對函數有較大的修改,可增加修改內容的註釋。
/*Log id:<Log編號,從1開始一次增加>
rewriter:
rewrite date:<修改日期,格式:YYYY-MM-DD>
Depiction:
*/
8.1 建立、刪除、修改庫表操作
Ø 在開發環境中,對於自己的庫表可任意進行修改、刪除操作;但需保留相應的建表語句和說明,與建表人建表時間。
8.2 添加、刪除、修改表數據
Ø 在開發環境中,開發人員所開發模塊獨自使用的庫表,可自由操作表中數據;
Ø 對其他模塊關聯的庫表,應取得其他模塊的開發人員同意後再執行操作;
Ø 系統的信息表、字典表的修改應向數據庫的管理員提出操作需求,由數據庫的管理員執行操作。
9.1 系統信息常用字段
字段名稱 |
字段代碼 |
ORACLE |
SQLSERVER |
值 |
說明 |
用戶標識 |
user_id |
char(8) |
char(8) |
|
用於登錄應用系統的標識, 填寫數字。一般做主鍵,要填滿長度。 |
用戶名稱 |
user_name |
varchar2(20) |
varchar(20) |
|
用戶標識對應的名稱 |
組標識 |
grp_id |
char(4) |
char(4) |
|
用戶所屬的組標識,填寫數字。一般做主鍵,要填滿長度。 |
組名稱 |
grp_name |
varchar2(50) |
varchar (50) |
|
組標識對應名稱 |
組權限標識 |
grp_auth_id |
char(2) |
char(2) |
|
由低到高,從00到99。要填滿長度 |
組權限名稱 |
grp_auth_name |
varchar2(50) |
varchar (50) |
|
組權限標識對應名稱 |
密碼 |
password |
varchar2(30) |
varchar(30) |
|
|
9.2 客戶個人信息常用字段
字段名稱 |
字段代碼 |
ORACLE |
SQLSERVER |
值 |
說明 |
客戶標識 |
customer_id |
char(?) |
char(?) |
|
業務系統使用的客戶標識,一般做主鍵,不用可變長類型。要填滿長度。 |
客戶姓名 |
customer_name |
varchar2(50) |
varchar(50) |
|
|
部門標識 |
dept_id |
char(?) |
char(?) |
|
一般做主鍵,不用可變長類型。要填滿長度。 |
部門名稱 |
dept_name |
varchar2(50) |
varchar(50) |
|
|
性別 |
sex |
char(1) |
char(1) |
F/M |
以下沒有標識的,直接在字段中填寫具體值 |
婚姻狀況 |
marriagestatus |
varchar2(50) |
varchar(50) |
|
|
出生日期 |
birthday |
date |
smalldatetime |
|
|
身高 |
hight |
number(5,2) |
dec(5,2) |
|
單位爲釐米 |
體重 |
weight |
number(5,2) |
dec(5,2) |
|
單位爲公斤 |
民族 |
nationality |
varchar2(20) |
varchar(20) |
|
|
聯繫電話 |
phone |
varchar2(50) |
varchar(50) |
|
|
家庭電話 |
home_phone |
varchar2(50) |
varchar(50) |
|
|
辦公電話1 |
office_phone1 |
varchar2(50) |
varchar(50) |
|
|
辦公電話2 |
office_phone2 |
varchar2(50) |
varchar(50) |
|
|
區號 |
zone |
varchar2(20) |
varchar(20) |
|
|
傳真號碼 |
office_fax |
varchar2(50) |
varchar(50) |
|
|
移動電話 |
mobil_phone |
varchar2(50) |
varchar(50) |
|
|
電子信箱 |
|
varchar2(50) |
varchar(50) |
|
|
郵政編碼 |
post_code |
varchar2(20) |
varchar(20) |
|
|
國籍 |
country |
varchar2(50) |
varchar(50) |
|
|
居住省 |
province |
varchar2(20) |
varchar(20) |
|
|
居住市 |
city |
varchar2(20) |
varchar(20) |
|
|
家庭住址 |
home_addr |
varchar2(80) |
varchar(80) |
|
|
辦公地點 |
office_addr |
varchar2(80) |
varchar(80) |
|
|
證件號碼 |
cert_number |
varchar2(50) |
varchar(50) |
|
|
證件名稱 |
cert_name |
varchar2(20) |
varchar(20) |
|
|
職業標識 |
occupation_id |
char(4) |
char(4) |
|
要填滿長度 |
職業名稱 |
occupation |
varchar2(50) |
varchar(50) |
|
|
教育程度 |
education |
varchar2(20) |
varchar(20) |
|
|
9.3 鋪助信息常用字段
字段名稱 |
字段代碼 |
ORACLE |
SQLSERVER |
值 |
說明 |
記錄狀態標識 |
flag |
char(1) |
char(1) |
A/D… |
A:有效;D:刪除;S:暫停… |
記錄序號 |
id |
number |
int |
|
|
9.4 業務信息常用字段
字段名稱 |
字段代碼 |
ORACLE |
SQLSERVER |
值 |
說明 |
業務發生日期 |
oper_date |
date |
smalldate |
|
|
開始日期 |
begin_date |
date |
smalldate |
|
|
結束日期 |
end_date |
date |
smalldate |
|
|
操作日期 |
curr_date |
date |
smalldate |
|
|
操作員編號 |
user_id |
char(4) |
char(4) |
|
即爲系統信息中的用戶標識 |
發生額 |
|
number(7,2) |
dec(7,2) |
|
|
餘額 |
balance |
number(10,2) |
dec(10,2) |
|
|
描述 |
description |
varchar2(50) |
varchar(50) |
|
|
|
|
|
|
|
|
10 設計實例(SQL SERVER 2000)
10.1 表、主鍵、外鍵、索引、規則、約束
名稱:t_base_user
中文名稱:用戶基本信息表
簡單說明:存放用戶的基本信息
名稱 |
代碼 |
數據類型 |
鍵、規則、約束 |
註釋 |
用戶ID |
user_id |
char(8) |
PK |
用戶唯一標識 |
用戶姓名 |
user_name |
varchar(20) |
|
用戶真實姓名 |
身高 |
hight |
decimal(7,2) |
rl_not_zero |
爲舉例子而設定此三個字段,原表沒有。 |
體重 |
weight |
decimal(7,2) |
| |
開始日期 |
begin_date |
smalldatetime |
df_begin_date | |
部門id |
department_id |
char(4) |
FK |
用戶所屬的部門id 參照主表:department |
用戶職務1id |
headship1_id |
char(4) |
FK |
用戶的職務id 參照主表: |
用戶職務2id |
headship2_id |
char(4) |
FK |
用戶的職務id 參照主表: |
用戶職稱id |
title_id |
char(4) |
FK |
用戶的職稱id 參照主表: |
電話號碼 |
phone |
varchar(50) |
|
用戶的電話號碼 |
|
|
varchar(50) |
|
|
銀行賬號 |
account_no |
varchar(50) |
|
用戶的工資銀行賬號 |
身份ID |
cert_number |
varchar(30) |
UNI INDEX |
用戶的身份ID |
停用 |
flag |
char(1) |
NOT NULL |
識別用戶是否被註銷 |
/*==============================================================*/
/* Table: t_base_user */
/*==============================================================*/
create table t_base_user (
user_id char(8) not null,
user_name varchar(20) null,
hight decimal(7,2) null,
weight decimal(7,2) null,
begin_date smalldatetime null,
department_id char(4) null,
headship1_id char(4) null,
headship2_id char(4) null,
title_id char(4) null,
phone varchar(50) null,
email varchar(50) null,
account_no varchar(50) null,
cert_number varchar(30) null,
flag char(1) null,
constraint ck_flag CHECK (flag between '0' and '9' )
,
constraint PK_USER_BASE_USERID primary key (user_id)
)
go
/*==============================================================*/
/* Index: idx_cert_number */
/*==============================================================*/
create unique index idx_cert_number on user_base (cert_number)
go
/*==============================================================*/
/* foreign Key: fk_user_base_department_depid */
/*==============================================================*/
alter table user_base
add constraint FK_USER_BASE_DEPARTMENT_DEPID foreign key (department_id)
references department (department_id)
go
…
(注:以上語句假設主表名爲DEPAERMENT。依照此語句創建其他外鍵)
/*==============================================================*/
/* 綁定規則rl_not_zero 到表 user_vase中的列hight */
/*==============================================================*/
exec sp_bindrule 'dbo.rl_not_zero', 'user_base.hight'
/*==============================================================*/
/* 綁定缺省 df_begin_date 到表user_base的列begin_date */
/*==============================================================*/
exec sp_bindefault 'dbo.df_begin_date', 'user_base.begin_date'
附件1:數據庫數據字典
名稱:t_base_user
中文名稱:用戶基本信息表
簡單說明:存放用戶的基本信息
名稱 |
代碼 |
數據類型 |
外來鍵 (外鍵) |
強制 (約束) |
主要的(主鍵) |
註釋 |
用戶ID |
user_id |
Char(8) |
|
TRUE |
TRUE |
用戶唯一標識 |
用戶姓名 |
user_name |
Varchar(20) |
|
|
|
用戶真實姓名 |
部門id |
department_id |
Char(4) |
TRUE |
|
|
用戶所屬的部門id 參照主表:department |
用戶職務1id |
headship1_id |
Char(4) |
TRUE |
|
|
用戶的職務id 參照主表: |
用戶職務2id |
headship2_id |
Char(4) |
TRUE |
|
|
用戶的職務id 參照主表: |
用戶職稱id |
title_id |
Char(4) |
TRUE |
|
|
用戶的職稱id 參照主表: |
電話號碼 |
Phone |
Varchar(50) |
|
|
|
用戶的電話號碼 |
|
|
Varchar(50) |
|
|
|
|
銀行賬號 |
account_no |
Varchar(50) |
|
|
|
用戶的工資銀行賬號 |
身份ID |
cert_number |
Varchar(30) |
|
|
|
用戶的身份ID |
停用 |
Flag |
Char(1) |
|
TRUE |
|
識別用戶是否被註銷 |
主鍵:PK_BASE_USER_USERID
外鍵:FK_BASE_USER_DEPARTMENT_DEPID,…
編號 |
數據庫 |
類型簡寫 |
1 |
SYBASE |
SYB |
2 |
ORACLE |
ORA |
3 |
DB2 |
DB2 |
4 |
SQL SERVER |
SQL |