數據庫編碼規範

前段時間寫的適用與數據庫開發的規範,規範不一定真正的規範,拿來大家分享。錯誤、意見、建議請聯繫我!

 

 

 

 

數據庫編碼規範

 

V1.2

 

2004 11 12


類別

文件名:

數據庫編碼規範

版本號:

V1.2

版本日期:

2004-11-12

作者:

Nick

日期:

2004-11-12

 


目 錄

1   目的. 2

2   範圍. 3

3   術語. 3

4   設計概要. 3

4.1   設計環境. 3

4.2   設計使用工具. 4

4.3   設計原則. 4

4.4   設計的更新. 4

5   命名總體原則. 4

6   命名規範(邏輯對象). 5

6.1   數據庫結構命名. 5

6.2   數據庫對象命名. 6

7   腳本註釋. 8

7.1   存儲過程或觸發器. 8

7.2   自定義函數. 9

8   數據庫操作原則. 10

8.1   建立、刪除、修改庫表操作. 10

8.2   添加、刪除、修改表數據. 10

9   常用字段命名. 10

9.1   系統信息常用字段. 10

9.2   客戶個人信息常用字段. 10

9.3   鋪助信息常用字段. 11

9.4   業務信息常用字段. 11

10      設計實例(SQL SERVER 2000. 12

10.1    表、主鍵、外鍵、索引、規則、約束. 12

 

 

附件1:數據庫數據字典. 14

附件2:數據庫類型簡寫. 15

 

 

 

 

1        目的

爲了統一公司軟件開發的設計過程中關於數據庫設計時的命名規範和具體工作時的編程規範,便於交流和維護,特制定此規範。

2        範圍

本規範適用於開發組全體人員,作用於軟件項目開發的數據庫設計、維護階段。

3        術語

Ø         數據庫對象:在數據庫軟件開發中,數據庫服務器端涉及的對象包括物理結構和邏輯結構的對象。

Ø         物理結構對象:是指設備管理元素,包括數據文件和事務日誌文件的名稱、大小、目錄規劃、所在的服務器計算極名稱、鏡像等,應該有具體的配置規劃。一般對數據庫服務器物理設備的管理規程,在整個項目/產品的概要設計階段予以規劃。

Ø         邏輯結構對象:是指數據庫對象的管理元素,包括數據庫名稱、表空間、表、字段/域、視圖、索引、觸發器、存儲過程、函數、數據類型、數據庫安全性相關的設計、數據庫配置有關的設計以及數據庫中其他特性處理相關的設計等。

4        設計概要

4.1                                                                  設計環境

a)       ORACLE 9I

數據庫

ORACLE 9i

操作系統

SUSE LINUX 7.1以上版本,顯示圖形操作界面; RedHat 9 以上版本

CPU

P III 1.7G 以上

內存

512M以上

硬盤空間

5GB以上的剩餘空間,如要建立較多的、大型的數據庫需要更多的硬盤空間

 

b)       MS SQL SERVER 2000

數據庫

SQL SERVER 2000 企業版

sp3以上補丁和安全補丁

操作系統

WINDOWS 2000 SERVER

WINDOWS 2000 Advanced Server

sp4以上補丁

CPU

P III 1G以上

內存

256M以上

硬盤空間

1G以上剩餘空間如要建立較多的、大型的數據庫需要更多的硬盤空間

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列要獨立出一張表,此表只有idblob(或大文本)

4.4                                                                  設計的更新

a)       在設計階段,由數據庫管理員或指定的項目組其一成員進行維護。

b)       運行階段,由數據庫管理員進行維護。

c)       如對錶結構進行修改,應先在PowerDesigner中進行修改,再重新導出WORD文檔,最後在數據庫中進行修改。如果修改的是數據庫字典表,必須由數據庫管理員進行。

d)       使用PowerDesigner生成SQL代碼,禁止由PowerDesigner直接連數據庫進行數據庫操作

e)       修改數據庫要通過SQL,禁止其它方式對數據進行修改

f)       修改數據庫的SQL要添加說明後保存備查

5        命名總體原則

Ø         設定的前綴一律用小寫字母

Ø         標識名稱命名全部小寫

Ø         整個命名的全長不得超過30個字母

Ø         全部使用字母和下劃線‘_’,不能使用中文和其他字符,有特別情況允許使用末尾數字編號。例如:t_Finace1, t_Finace2...

Ø         命名名稱來自於業務,全部採用英文單詞

Ø         英文單詞過長可以採用通用的縮寫,儘量表達出業務的含義

Ø         如需要兩個以上的英文單詞做標識名稱,單詞之間要用下劃線‘_’連接

Ø         名稱全是由名詞組成的,名詞由大範圍到小範圍排序取名

Ø         完成某功能的名稱,如函數和過程,以動賓形式取名

6        命名規範(邏輯對象)

6.1                                                                  數據庫結構命名

a)       數據庫命名

數據庫的命名要求使用與數據庫意義相關聯的英文字母,並且以“db_”打頭,

db_<業務系統名稱>

例如:china care 數據庫的命名爲 db_ccnet

客戶資料數據庫的命名爲db_Customer_Info

 

b)       數據庫日誌設計命名

數據庫日誌的的命名以<數據庫名>_<日誌名>.log格式命名。其中,<日誌名>爲有意義的數據庫日誌名稱。

例如:db_ccnet_logredo.log

c)       數據庫配置設計命名

數據庫配置設計方案是以文件形式保存的,其內容是關於特定數據庫的配置項目的具體值。

數據庫配置文件的命名以:<數據庫類型簡寫〉_<應用系統標誌>_cfg.ini格式命名。

其中,數據庫類型簡寫見附件2《數據庫類型簡寫》,cfq表示該文件是數據庫配置文件。

例如:ORA_ ccnet_cfg.ini

d)       數據庫複製與存儲設計命名

     數據庫複製與存儲設計方案是以文件形式保存的,其內容是關於特定數據庫之間的複製策略的具體細節。

數據庫複製與存儲設計文件的命名以:<數據庫類型簡寫>_<應用系統標誌>_rep.txt格式命名。

其中,數據庫類型簡寫見附件2《數據庫類型簡寫》,rep表示該文件是數據庫複製與存儲文件。

e)       數據庫連接設計命名

     數據庫連接設計方案是以文件形式保存的,其內容是關於特定分佈式數據庫之間的連接設計的具體細節。

數據庫連接設計文件的命名以:<數據庫類型簡寫>_<應用系統標誌>_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-990-9,根據系統數據量確定。

 

6.2                                                                  數據庫對象命名

a)      

表的命名必須以“t_”(Table縮寫)開頭,格式爲:t_[系統標識]_<數據表類型標識>_<表標識>

其中,[ ]表示可選項,依據實際情況而增加;<表標識> 要求與表意義相關聯的英文字母,例如:t_Customers

數據表大致分爲:業務數據表、基本編碼表、輔助編碼表、系統信息表、累計數據表、結算數據表、決策數據表;

基本編碼表用base標誌

累計數據表用count標誌

系統信息表用info標誌  ...

例如:t_trade_base_trade_code,t_trade_info_help   ...

b)       字段/

根據業務要求進行命名,不需設定固定的前綴。

 

c)       索引

針對數據庫表中一個或多個字段建立的索引的命名格式應以“idx_”開頭,索引列名間用_隔開,即爲idx_ColumnName1_ColumnName2_

其中,ColumnName1是數據庫表中(第一個)索引字段的名稱或名稱簡寫;ColumnName2是數據庫表中(第二個)索引字段的名稱或名稱簡寫;索引名的總長必需符合數據庫的規定。

例:idx_cert_number (表示在字段cert_number上創建索引)

 

d)       視圖

視圖的命名必須以“v_(View 縮寫)開頭,格式爲: v_<視圖類型>_[系統標識] _<視圖標識>

其中,視圖類型參見“表的分類說明”;[系統標識_]是可選項,依據情況而增加;<視圖標識> 應與視圖意義相關聯的英文字母。

例:v_user_detail_info

 

e)       存儲過程

存儲過程的命名必須符合sp_[系統標識]_<存儲過程標識>格式。

其中,sp表示是存儲過程;[系統標識]爲可選項,依據情況而增加;<存儲過程標識>是與存儲過程意義相關聯的英文字母,例如:USP_Query_Write_to_Disk

   例:sp_check_user_auth(以動賓方式取名)

 

f)       觸發器

 觸發器的的命名必須符合tr_<表名>_<i,u,d的任意組合> 格式。

其中,tr表示是觸發器;<i,u,d的任意組合>是與觸發器意義相關聯的英文字母。

例:tr_user_info_iu (表示對user_info表進行插入、更新的觸發器)

 

g)      函數

 函數的命名必須符合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)       CheckConstraint(約束)

約束的命名格式一般爲:ck_<表名>_ <Check標識>;一些約束可直接放在生成表的語句中。

例:ck_flag 參見第8.1點實例,約束字段flag只能取字符‘0’到‘9’:

constraint ck_flag CHECK (flag between '0 and '9 )

 

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

 

l)       主鍵

主鍵的命名格式爲pk_<表名>_<主鍵標識>

例:pk_user_info_userid (表user_info以字段userid創建主鍵)

 

m)       外鍵

外鍵的命名格式爲fk_<表名>_<主表名>_<外鍵標識>

例:fk_user_info_department_deptid (在表user_info的字段department_id上創建外鍵,參照主表department

 

n)       同義詞(ORACLE

同義詞的命名格式爲:sy_<同義詞標識>

例:sy_user_info (爲所有權屬於ben的表user_info的公共同義詞)

7        腳本註釋

7.1                                                                  存儲過程或觸發器

a)       每一個存儲過程或觸發器都要在最前面寫註釋,註釋如下

/*

writer

create date

ver

Depiction

remark

*/

另外,過程中聲明的重要變量要有註釋,例如:

    @iActionFlag   int = 0  /* 0 => Checkout, 1 => GetLatest, 2 => UndoCheckOut */

 

b)       如果只對存儲過程或觸發器進行部分修改時須添加以下注釋:

 

/*rewriter    addrewriter):      date<格式:YYYY-MM-DD>    start1   

  修改描述:

*/

/* 原代碼內容*/(修改時)

/*rewriter  date<格式:YYYY-MM-DD>     end1  */

/*rewriter   addrewriter):      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<對此函數的描述>

parama,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    addrewriter):      date<格式:YYYY-MM-DD>    start1   

  修改描述:

*/

/* 原代碼內容*/(修改時)

/*rewriter  date<格式:YYYY-MM-DD>     end1*/

/*rewriter   addrewriter):      date<格式:YYYY-MM-DD>     start2    */

新代碼內容

/*rewriter    date<格式:YYYY-MM-DD>     end2   */

 

c)       如果對函數有較大的修改,可增加修改內容的註釋。

    /*Log id<Log編號,1開始一次增加>

      rewriter

      rewrite date<修改日期,格式:YYYY-MM-DD>

  Depiction

    */

 

8        數據庫操作原則

8.1                                                                  建立、刪除、修改庫表操作

Ø         在開發環境中,對於自己的庫表可任意進行修改、刪除操作;但需保留相應的建表語句和說明,與建表人建表時間。

8.2                                                                  添加、刪除、修改表數據

Ø         在開發環境中,開發人員所開發模塊獨自使用的庫表,可自由操作表中數據;

Ø         對其他模塊關聯的庫表,應取得其他模塊的開發人員同意後再執行操作;

Ø         系統的信息表、字典表的修改應向數據庫的管理員提出操作需求,由數據庫的管理員執行操作。

9        常用字段命名

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)

 

由低到高,從0099。要填滿長度

組權限名稱

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)

 

 

電子信箱

email

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

decimal72

rl_not_zero

爲舉例子而設定此三個字段,原表沒有。

體重

weight

decimal72

 

開始日期

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)

 

用戶的電話號碼

 

email

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)

 

 

 

用戶的電話號碼

 

Email

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,…

 

附件2:數據庫類型簡寫

編號

數據庫

類型簡寫

SYBASE

SYB

ORACLE

ORA

DB2

DB2

SQL SERVER

SQL

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章