数据库结构命名规范

来源:互联网 发布:it潮牌 编辑:程序博客网 时间:2024/05/17 18:11

 

    ... 3

第一章         介绍... 4

1.      目的... 4

2.      范围... 4

3.      文档约... 4

4.      参考文档... 4

第二章         命名及设计规范... 5

1.         数据库表(Table)、字段(Field)命名及设计规范... 5

1.1        表命名规范... 5

1.2        列命名规范... 5

1.3        设计规范... 6

2.         存储过程(Procedure) 命名及设计规范... 6

2.1        命名规范... 7

2.2        设计规范... 7

3.         函数(Function) 命名及设计规范... 8

3.1        命名规范... 8

3.2        设计规范... 9

4.         视图(View) 命名及设计规范... 10

4.1        命名规范... 10

4.2        设计规范... 10

5.      触发器(Trigger) 命名及设计规范... 11

5.1        命名规范... 11

5.2        设计规范... 12

6.         主键(Primary Key)命名规范... 13

7.         外键(Foreign Key)命名规范... 13

8.         索引(Index)命名规范... 13

9.         约束(Check、Constraint)命名规范... 13 


 

第一章   介绍

1.     目的

整理《数据库结构规范》的目的是:增加数据库对象的可读性,在设计上尽量规范化,标准化,方便系统后期维护。

2.     范围

如没有特殊规定,本《数据库结构规范》文档适用于产品中心的所有开发项目的数据库设计。

3.     文档约定

在本规范中,采用标准的文档书写约定,章标题使用粗体三号字,节标题使用粗体的小四号宋体,小节标题采用粗体的五号字体,正文采用正常的五号宋体。术语解释时术语部分加以下划线表示。

4.     参考文档

1.       百度文库《数据库命名及设计规范V1.0.3


 

第二章   命名及设计规范

1. 数据库表(Table)、字段(Field)命名及设计规范

1.1表命名规范

1)         表名用T­_作为标识,表名一般不超过三个英文单词,长度不能超过30个字符。表名必须是易于理解,能表达表的功能的英文单词或缩写英文单词:如果业务表的含义用英文表述困难,也可用汉语拼音方式命名。无论是完整英文单词还是缩写英文单词,抑或是汉语拼音,单词必须大写。表名中含有单词全部采用单数形式,例如,使用USER, 而不是USERS

2)         表中含有的单词建议用完整的单词,多个单词间用下划线(_)进行连接。如果导致表名长度过长,则从最后一个单词开始,依次向前采用该单词的缩写。(如果没有约定的缩写,则采用该单词前4个字母来表示)。

3)         对于有主明细的表来说。明细表名为:主表名+_DTS。例如:采购定单的表名为:T_PO_ORDER,则采购定单的明细表名为:T_PO_ORDER_DTS

4)         一般表采用“系统名_+T_模块名_表义名”格式构成,其他特殊情况如:

l  若数据库中只含有单个系统,命名可去掉前缀“系统名_”,采用“T_模块名_表义名”格式构成。

l  若数据库中只含有单个模块,命名可去掉“模块名”,采用“系统名_+T_表义名”格式构成。

l  临时表采用“系统名_+T_TEMP_表义名”格式构成。

l  关联表命名为RE_A_BRERelative的缩写,表A和表B均采用其表义名或缩写形式。

例如:

A.        如果有一个模块叫做Bulletin Board System(缩写为BBS),那么你的数据库中所有对象的名称都要加上这个前缀:T_BBS_+数据库对象名称,T_BBS_CUSTOMER_INFO标示论坛模块中的客户信息表。

B.        如果有一个系统叫做行政服务(缩写为XZFW),其中有一张表记录补齐补正业务,由于用英文表达其含有较难或不准确,可以用汉语拼音为其命名:XZFW_T_ +拼音名,XZFW_T_ BUQIBUZHENG.

1.2列命名规范

1)         统一采用“CL_”作为前缀。

2)         采用有意义的列名,名必须是易于理解,能表达功能的英文单词或缩写英文单词;如果的含义用英文表述困难或不准确,也可用汉语拼音字母的方式命名。无论是完整英文单词还是缩写英文单词,抑或是汉语拼音,不超过三个英文单词,长度不能超过30个字符,一般用完整的英文单词,单词必须大写。在同一数据表内,不允许同时出现英文和拼音字母两种命名方式的。多个单词间用下划线(_)进行连接。例如:人员信息表中的电话号码所在列可命名为:CL_TELEPHONECL_TEL。产品明细表中的产品名称所在列名可用CL_PRODECT_NAME表示。办件表中的审批事项名称所在列名可用拼音字母的方式表示为CL_SPSXMC

3)         表中的主键名使用:“CL_ID”,其数据类型为varchar,主键数据一律采用java程序或存储过程按照一定的规则生成,不允许采用自增长的数据,如identitysequences等。

如项目无特定需求,主键生成规则如下:

主键采用字符型,长度为18 XXXXXX XXXXXXXXX XXX

前六位代表记录生成的年、月、日,如:Q71225

中间九位代表记录生成的时、分、秒、毫秒,如122009337

后三位为生成的随机码,随机码采用java.util.Random生成。

那么200712261544分产生的数据记录,其主键应类似于071226154430233901

(注:主键生成的规则需抽象出具体方法放入底层架构中)

4)         系统中属于是业务范围内的编码的,其代表一定的业务信息,比如办件信息和单据的编号,这样的建议命名为:业务含义+_CODE”,其数据类型为varchar,该需加唯一索引。如:组织机构代码可命名为CL_ORGAN_CODE

5)         在命名表的列时,不要重复表名;例如,在名为T_SYS_USER的表中避免使用名为CL_USERNAME,应直接使用CL_NAME

6)         不要在列名中包含数据类型。

7)         不要使用“ID”作为列名。

8)         关联命名以“CL_关联表的表义名(或缩写)_名”构成。

1.3设计规范

1)         所有在设计时,除以下数据类型timestampimagedatetimesmalldatetimeuniqueidentifierbinarysql_variantvarbinary外,必须有默认值。字符型的默认值为一个空字符值串;数值型的默认值为数值0;逻辑型的默认值为数值0;其中:系统中所有逻辑型中数值0表示为“假”;数值1表示为“真”。datetimesmalldatetime类型的没有默认值,必须为NULL。当定义为字符串型时建议使用varchar而不用nvarchar。在Oracle中,不建议使用varchar,建议用varchar2char类型。

2)         尽量遵守第三范式的标准(3NF

A.        表内的每一个值只能表达一次;

B.        表内的每一行都应当被唯一的标示;

C.        表内不应该存储依赖于其他键的非键信息;

D.        如果事实上是与其它表的关键字相关联而未设计为外键引用,需建索引;

E.         如果与其他表的相关联,需建索引;

F.         如果需做模糊查询之外的条件查询,需建索引;

G.        除了主关键字允许建立簇索引外,其他所建索引必须为非簇索引。

3)         必须填写描述信息

2. 存储过程(Procedure) 命名及设计规范

2.1命名规范

1)         存储过程的命名遵循以下命名规范:“系统名_+PR_系统模块缩写(与表前缀类似)_功能标识_代表存储过程操作的主要表义名(不带前缀)或功能的英文单词或英文单词缩写”,长度不能超过30个字符。

2)         如果一个存储过程只对一个表进行操作,建议存储过程的名称就用存储过程所操作的表的表名(不带前缀)。这样有利于根据表名找到相应的存储过程。为了在众多的存储过程中能很快的找到并维护存储过程,我们按存储过程的作用将系统的存储过程进行以下的分类及命名:(以下示例假设存储过程所在的模块名为ORG

作用第一前缀第二前缀名(示例)

用于新增的存储过程PR_ORG_ADD_EMPLOYEE

用于修改的存储过程PR_ORG_UPD_EMPLOYEE

用于删除的存储过程PR_ORG_DEL_EMPLOYEE

用于单据查询的存储过程PR_ORG_QUERY_EMPLOYEE

用于报表统计的存储过程PR_ORG_RPT_STATSEMPLOYEE

用于一些特殊过程处理的存储过程PR_ORG_OTH_SETSYSTEMMESSAGE

(注:在Oracle中应将存储过程进行分类,按照分类建立不同的PACKAGE,存储过程要从属于某一个PACKAGE。)

3)         如果系统中的存储过程只有一级,则遵照以上规则命名,如果存在多级,则需要区分其属于哪一级,具体为“PR+所属的级次+_+后面的部分”表明:其调用了第(所属级次-1)级的存储过程

例如:

1.         PR1_ORG_ADD_SUBJECT(没有调用其它存储过程)

2.         PR2_ORG_UPD_SUBJECT(调用了第1级的存储过程)

3.         PR3_ORG_QUERY_SUBJECT (调用了第2级的存储过程)

2.2设计规范

在存储过程中必须说明以下内容:

1)         目的:说明此存储过程的作用。

2)         作者:首次创建此存储过程的人的姓名。

3)         创建日期:创建存储过程时的日期。

4)         修改记录:修改记录需包含修改顺序号、修改者、修改日期、修改原因,修改时不能直接在原来的代码上修改,也不能删除原来的代码,只能先将原来的代码注释掉,再重新增加正确的代码。修改顺序号的形式为:log1log2,log3……,根据修改次数顺序增加,同时在注释掉的原来的代码块和新增的正确代码块前后注明修改顺序号。

5)         对存储过程各参数及变量的中文注解。

示例如下:

/*

目的:根据部门与物料和会计区间查询生产现场领料汇总报表

作者:张三

创建日期:-09-13

*/

/*

修改顺序号:log1

修改者:李四

修改日期:-09-14

修改原因:(具体原因详细描述)

*/

CREATE PROCEDURE PR_GETLMSSUM

@ProductionType int=1, --生产类型(1-自制;-委外加工)

@DeptID int=0,  --生产部门

@ItemID int=0,  --物料

@StartDate datetime='2001-11-26', --会计区间开始日期

@EndDate datetime='2002-12-25', --会计区间截止日期

AS

/*

log1 old

--自制领料

INSERT INTO #LMSDts

SELECT DEPTID FROM T_DEPT

......

end log1 old

*/

--log1 new

--自制领料

INSERT INTO #LMSDts

SELECT DEPTID FROM T_DEPT

......

--end log1 new

3. 函数(Function) 命名及设计规范

3.1命名规范

1)         函数的命名遵循以下命名规范:“系统名_+FU_+系统模块缩写(与表前缀类似)+_+功能标识+代表函数操作的主要表义名或功能的英文单词或英文单词缩写”,长度不能超过30个字符。

2)         如果一个函数只对一个表进行操作,建议函数名就用函数所操作的表的表义名。这样有利于根据表名找到相应的函数。为了在众多的函数中能很快的找到并维护函数,我们按函数的作用将系统的函数进行以下的分类及命名:(以下示例假设函数所在的模块名为ORG

作用第一前缀第二前缀名(功能标识)示例

用于新增的函数FU_ORG_ADD_EMPLOYEE

用于修改的函数FU_ORG_UPD_EMPLOYEE

用于删除的函数FU_ORG_DEL_EMPLOYEE

用于单据查询的函数FU_ORG_QUERY_EMPLOYEE

用于报表统计的函数FU_ORG_RPT_STATSEMPLOYEE

用于一些特殊过程处理的函数PR_ORG_OTH_SETSYSTEMMESSAGE

3)         如果系统中的函数只有一级,则遵照以上规则命名,如果存在多级,则需要区分其属于哪一级,具体为“FU+所属的级次+_+后面的部分”表明:其调用了第(所属级次-1)级的函数。

例如:

1.         FU1_ORG_ADD_SUBJECT (没有调用其他函数)

2.         FU2_ORG_UPD_SUBJECT (调用了第1级的函数)

3.         FU3_ORG_QUERY_SUBJECT (调用了第2级的函数)

3.2设计规范

在存储过程中必须说明以下内容:

1)         目的:说明此函数的作用。

2)         作者:首次创建此函数的人的姓名。

3)         创建日期:创建函数时的日期。

4)         修改记录:修改记录需包含修改顺序号、修改者、修改日期、修改原因,修改时不能直接在原来的代码上修改,也不能删除原来的代码,只能先将原来的代码注释掉,再重新增加正确的代码。修改顺序号的形式为:log1log2log3……,根据修改次数顺序增加,同时在注释掉的原来的代码块和新增的正确代码块前后注明修改顺序号。

5)         对函数各参数及变量的中文注解。

示例如下:

/*

目的:查询生成现场领料汇总报表

作者:张三

创建日期:-09-13

*/

/*

修改顺序号:log1

修改者:李四

修改日期:-09-14

修改原因:(具体原因详细描述)

*/

CREATE FUNCTION FU_GETLMSSUM

@ProductionType int=1, --生产类型(1-自制;-委外加工)

@DeptID int=0,  --生产部门

@ItemID int=0,  --物料

@StartDate datetime='2001-11-26', --会计区间开始日期

@EndDate datetime='2002-12-25', --会计区间截止日期

AS

/*

log1 old

--自制领料

INSERT INTO #LMSDts

SELECT DEPTID FROM T_DEPT

......

end log1 old

*/

--log1 new

--自制领料

INSERT INTO #LMSDts

SELECT DEPTID FROM T_DEPT

......

--end log1 new

4. 视图(View) 命名及设计规范

4.1命名规范

1)         视图的命名遵循以下命名规范:“系统名_+V_+系统模块缩写(与表前缀相似)+_+功能标识+代表视图查询的主要表名(不要带前缀)或功能的英文单词或英文单词缩写”,长度不能超过30个字符。

2)         如果一个视图只对一个表进行查询,建议视图名就用视图查询的表的名(不带前缀)。这样有利于根据表名找到相应的视图,为了在众多的视图中能很快的找到并维护视图,我们按其作用系统的视图进行以下的分类及命名:(以下示例假设视图所在的模块名为ORG

作用第一前缀第二前缀名(功能标识)示例

用于单据查询的视图V_ORG_QUERY_EMPLOYEE

用于报表统计的视图V_ORG_RPT_STATSEMPLOYEE

用于一些特殊过程处理的视图V_ORG_OTH_SETSYSTEMMESSAGE

3)         如果系统中的视图只有一级,则遵照以上规则命名,如果存在多级,则需要区分其属于哪一级,具体为“V+所属的级次+_+后面的部分”表明:其调用了第(所属级次-1)级的视图。

例如:

1.         V1_ORG_ADD_SUBJECT (没有调用其他视图)

2.         V2_ORG_UPD_SUBJECT (调用了第1级的视图)

3.         V3_ORG_QUERY_SUBJECT (调用了第2级的视图)

4.2设计规范

在视图中必须说明以下内容:

1)         目的:说明此视图的作用。

2)         作者:首次创建此视图的人的姓名。

3)         创建日期:创建视图时的日期。

4)         修改记录:修改记录需包含修改顺序号、修改者、修改日期、修改原因,修改时不能直接在原来的代码上修改,也不能删除原来的代码,只能先将原来的代码注释掉,再重新增加正确的代码。修改顺序号的形式为:log1log2log3……,根据修改次数顺序增加,同时在注释掉的原来的代码块和新增的正确代码块前后注明修改顺序号。

5)         对视图各参数及变量的中文注解。

示例如下:

/*

目的:查询本月所要培训的科目

作者:张三

创建日期:-09-13

*/

/*

log1 old

CREATE VIEW V_ADD_SUBJECT

AS

SELECT SUBJECTCODE AS 课程编号FROM T_SUBJECT

......

end log1 old

*/

/*

修改顺序号:log1

修改者:李四

修改日期:-09-14

修改原因:学员不需要培训,将不需要培训的课程去掉。

*/

--log1 new

CREATE VIEW V_ADD_SUBJECT

AS

SELECT SUBJECTCODE AS 课程编号FROM T_SUBJECT

......

--end log1 new

5.     触发器(Trigger) 命名及设计规范

5.1命名规范

触发器命名遵循如下规范:“系统名_+TR_+表义名(不能带前缀)+_+触发类型简写,触发器名需大写。

Insert触发器加‘_INS’;

Update触发器加‘_UPD’;

Delete触发器加‘_DEL’。

如:T_SYS_USER表的Insert触发器为TR_SYS_USER_INS

5.2设计规范

在触发器中必须说明以下内容:

1)         目的:说明此触发器的作用。

2)         创建者:首次此触发器的创建人的姓名。

3)         修改记录:修改记录需包含修改顺序号、修改者、修改日期、修改原因,修改时不能直接在原来的代码上修改,也不能删除原来的代码,只能先将原来的代码注释掉,再重新增加正确的代码。修改顺序号的形式为:log1log2log3……,根据修改次数顺序增加,同时在注释掉的原来的代码块和新增的正确代码块前后注明修改顺序号。

4)         对其中各参数及变量的中文注解。

示例如下:

/*

目的:删除TR_SYS_A表中关联的记录

作者:张三

创建日期:-09-13

*/

/*

log1 old

CREATE TRIGGER TR_SYS_A ON T_SYS_A FOR DELETE

AS

IF @@ROWCOUNT=0 --no rows deleted

    RETURN

DELETE T_SYS_B FROM T_SYS_B b,deleted d WHERE b.id=d.id

IF @@ERROR !=0

    BEGIN

         RAISERROR("Error occurred deleting related records",16,1)

          ROLLBACK TRAN

END

end log1 old

*/

/*

修改顺序号:log1

修改者:李四

修改日期:-09-14

修改原因:(具体原因详细描述)

*/

--log1 new

CREATE TRIGGER TR_SYS_A ON T_SYS_A FOR DELETE

AS

IF @@ROWCOUNT=0 --no rows deleted

    RETURN

......

--end log1 new

6. 主键(Primary Key)命名规范

1)         任何表都必须定义主键

2)         表主键命名格式“PK_该主键所在的表义名(不带前缀)_主键标识”。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用大写的英文单词来表示。

7. 外键(Foreign Key)命名规范

外键命名格式为“FK_该外键所在的表义名_对应的主表义名(不含前缀)_外键标识”。子表义名和父表义名自己用下划线(_)分隔。外键名长度不能超过30个字符。如果过长,可对表义名进行缩写。缩写规则同表名的缩写规则一样。外键名用大写的英文单词来表示。

8. 索引(Index)命名规范

1)         索引名用大写的英文字母和数字表示。索引名的长度不能超过30个字符。

2)         主键对应的索引和主键同名。

3)         每类索引都用_结束。

4)         唯一性索引用UNI_开头,后面跟表名(不含前缀),一般性索引用IND_开头,后面跟表义名(不含前缀)。

5)         如果索引长度过长,可对表义名进行缩写。缩写规则同表名的缩写规则。

9. 约束(CheckConstraint)命名规范

约束的命名格式一般为:CHK_表义名_约束标识。

 

 本文档是本人根据网上找的一篇文章稍微做了一下修改,希望大家指出其中的问题,便于进一步完善该文档。

原创粉丝点击