数据库开发规范

1.    目的

本文档旨在为数据库设计提供一种公共标准,基于这种标准的数据库设计,能够在保证性能的基础上,兼顾管理与维护的成本,同时,标准化的设计也有益于代码交流,降低因为不同人员的设计网络导致的的代码兼容风险。

2.      范围

本规范适用于所有与数据库交互的开发人员。

3.      命名

3.1.       命名规则

所有对象遵循“长名”(除非常通用的简写外,尽量避免使用简写)和“表意”(通过名称大致知道该对象所表达的内容)两个原则,命名中的多个单词通过大小写或者下划线(_)区隔。常用对象的命名说明如下

3.1.1.  表命名

遵循通用原则,使用小写字符,能够清楚表明表中数据内容,使用表明表中数据内容的名词短语。建议格式:[模块名_]+主体,如:user_profile,employee

3.1.2.  字段命名

使用小写字符,表明栏位内容,使用表明栏位内容的名词短语,可在适当时使用下划线。建议格式:[模块名_]+主体,如id,customer_name

3.1.3.  视图命名

参考表命名方式,一般以前缀v_以示区隔。建议格式:v_[模块名_]+主体,如v_author

3.1.4.  存储过程命名

使用小写字符,命名要表明存储过程的功能,可以使用下划线区隔单词,存储过程不得以sp_开头。建议格式:usp_[模块名_]+主体,如usp_purge_history_data

3.1.5.  函数命名

使用小写字符,命名要表明函数的功能,可以使用下划线区隔单词。函数不得以fn_开头。建议格式:udf_[模块名_]+主体,如udf_get_user_name

3.1.6.  触发器命名

使用小写字符,使用trg_%table_name%_%action_type%_%function_name%的形式,i/u/d分别表示insert,update,delete动作。建议格式:trg_<table_name>+<i/u/d>+[_主体],如:trg_user_profile_i,trg_user_profile_iud

3.1.7.  主键命名

使用小写字符,使用pk_%table_name%的形式,其中%table_name%表示表名,建议格式:pk_<table_name>,如pk_author

3.1.8.  唯一键命名

使用小写字符,使用uq_%table_name%的形式,其中%table_name%表示表名,建议格式:uq_<table_name>,如uq_author

3.1.9.  外键命名

使用小写字符,使用fk_%foreign_key_table_name%_%foreign_key_column_name%

的形式,%foreign_key_table_name%表示约束该键的表名,%foreign_key_column_name%表示约束该键的栏位名,当约束的栏位有多个时,按次序依次呈现。建议格式:

fk_<foreign_key_table_name>_<foreign_key_column_name>,如fk_employee_id

3.1.10.       非聚集索引命名

使用小写字符,使用idx_%table_name%_%column_name%的形式,%table_name%表示非聚集索引的表名,%column_name%表示非聚集索引的栏位名。建议格式:

Idx_< table_name >_< column_name> ,如:idx_author_date

3.1.11.       聚集索引命名

使用小写字符,使用cidx_%table_name%_%column_name%的形式,%table_name%表示非聚集索引的表名,%column_name%表示非聚集索引的栏位名。建议格式:

cIdx_< table_name >_< column_name> ,如:cidx_author_id

3.1.12.       缺省值命名

使用小写字符,使用df_%table_name%_%column_name%形式,%table_name%表示缺省值作用的表名,%column_name%表示缺省值的栏位名。建议格式:

df_< table_name >_< column_name >,如:df_author_id

3.1.13.       约束命名

使用小写字符,使用ck_%table_name%_%column_name%形式,%table_name%表示约束作用的表名,%column_name%表示约束的栏位名。建议格式:

ck_< table_name >_< column_name >,如:ck_author_id

3.2.       缩写规则

为了避免混淆和保证跨语言交互操作,建议遵循下面有关缩写的规则

3.2.1.  词典中出现的缩写,如:UI(User Interface) ,ID(identification,identity)

3.2.2.  项目名称缩写及项目开始时候约定的缩写,如:PMS(Project Mangement System)

3.2.3.  计算机领域普遍认可的缩写,如:HTML,ADO,MSN,QQ,VBA

4.      代码书写格式

4.1.       书写规则

4.1.1.  大写或者小写所有T-SQL关键字,包括系统函数。

4.1.2.  数据库对象保持与定义时一致

书写代码时,数据库对象(如:表名,字段名等)保持与定义时候一致。

4.1.3.  不要在代码里书写select * 而应该采用select column1形式,其中以下情况不受约束

4.1.3.1.      聚合

select
      
count(*)
 
from
      table_name

4.1.3.2.      子查询

select
      a.column1
 
from
      ta a
 
where
      
exists 
      (
          
select
              *
          
from
              tb b
          
where
              a.id=t.id
      )

4.1.4.  insert语句中需要指定字段名。

以下格式供参考:

insert into
      table_name
      (colmun1,
       column2)
      
Values
      (       
'column_value1',
              
'column_value1')

 

4.1.5.  当一个SQL中涉及多个表时,始终使用表名或者表的别名来限定字段名,以免不同表之间存在相同的字段名的冲突,使阅读更加清晰。

select
      a.column1,
      b.column2
 
from
      ta a 
inner join tb b on a.id=b.id 

 

4.2.       排版规则

4.2.1.  缩进

4.2.1.1.      代码块内部的代码相对于begin ……end关键字要缩进。

以下格式供参考:

begin
      
select
          a.column1,
          b.column2
      
from
          ta a 
inner join tb b on a.id=b.id 
 
end

4.2.1.2.      函数和存储过程参数列表要采用缩进风格,且每个参数独占一行。

以下格式供参考:

create procedure dbo.usp_procedure_name
      @param1 
int ,
      @param2 
int output
 
as

 

4.2.2.  断行

4.2.2.1.      每条语句建议至少独占一行。

以下格式供参考

declare @param1 int 
 
declare @param2 int 
 
set @param1=1
 
set @param2=100

 

4.2.2.2.      当一条SQL语句超过约120个字符(1028*768),建议换行,建议参考以下原则

T-SQL语句

同一行互斥的SQL关键字列表

所有的DML语句并列的where条件

where、and、or

(column between value1 and value2中的and不受此条约束)

insert 语句

insert、values、select

select语句

select、into、from、where、group by、having、

order by、union、join

update语句

update、set、where、from

delete语句

delete、where

子查询

子查询内部的SQL需要遵守上述规定

4.2.2.3.      用空行分割代码逻辑块

以下格式供参考

 Begin
      
--如:入库操作
 
    exec dbo.usp_procedure_name1
 
end
 
---------------------------------------此处为空行
 
begin
      
--如:出库操作
 
    exec dbo.usp_procedure_name2
 
end

 

5.      注释规则

5.1.       头注释

代码文件头部要进行注释。所有函数,过程,触发器,都必须要有注释。

注释位置:文件的顶部

注释内容:版权说明,作者,生成日期,功能描述,修改日志等等

以下格式供参考


 

/*

===================================================================
  Function:   
  Author:     
  CeateDate:  
  Version:    
  Description:
  ===================================================================
  ** change history **
  Date:       
  ModifyBy:   
  Description:
  ===================================================================

*/

5.2.       注释规则

5.2.1.  注释内容放在被注释代码的上方或者右方

以下格式供参考

--get total record count
 
select 
      
count(*)
 
from
      table_name
 
--get the maximum record
 
select 
      
max(price)
 
from 
      table_name 

5.2.2.  注释必须能明确表达被注释代码的功能,内容等,不能简单的复制代码片段。

以下格式供参考:

alter procedure [sys].[sp_defaultdb]
      @loginname sysname,
--login name
 
    @defdb sysname     --default db
 
as
      
--setup runtime option/declare variables
 
    set nocount on
      
declare @exec_stmt nvarchar(4000)
      
declare @ret int --return value of sp call
 
    --disallow user transaction
 
    set implicit_transactions off

 

你可能感兴趣的:(数据库开发规范)