MS SQL Server命名及编码规范
文件类型:项目管理(标准/规范/模板)
文件编号: SD-07-02
版 本: 1.0
本文件版权属于北京BRKS,保留所有权利。
本文件中包含的信息属于北京BRKS的资产及机密,文件中的任何部分未经授权不得以任何形式复制(包括复印及以电子文本的形式传播)。
B.版本历史
V 版本号
|
修订日期
|
作者
|
描述
|
1.0
|
2007-08-21
|
栾曙光
|
创建文档
|
|
|
|
|
C.分发范围
本文档分发范围包括:公司技术部门管理人员、开发人员、项目管理人员。
编写本文档的目的是在使用MS SQL Server数据库的过程中,使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。
本规范适用于公司范围内所有以SQL SERVER 2000/2005 作为后台数据库的应用系统和项目开发工作。
3.1 通用规则
Pascal 规则
每个单词开头的字母大写(如: TestCounter).
Camel 规则
除了第一个单词外的其他单词的开头字母大写. 如:testCounter.
Upper 规则
仅用于被广泛认可的缩写命名(一般不超过四个字符,超过四个字符长度应该应用Pascal规则)。如:OLAP、PIN
3.2 数据库名
数据库名定义为系统名_模块名,如“crm_customer” 表示CRM系统的customer处理模块数据库。
数据库名全部采用小写。
3.3 数据库文件
数据文件命名采用数据库名+_+文件类型+[文件序号]+文件后缀,[文件序号]为1、2、3…9 等数值,当数据库中某一文件类型的文件有多个时加上文件序号以区别。只有一个时可不加。
文件后缀:主数据文件为.mdf,其它数据文件为.ndf,日志文件为.ldf
文件名全部采用小写。
比如系统名为“crm_customer”,则数据库数据文件命名为“crm_customer_data.mdf”,日志文件命名为“crm_customer_log.ldf”。
3.4 表
表命名要遵循以下原则:
Ø 直接使用表义名,不使用任何前缀。
Ø 整个表名的长度不要超过30 个字符
Ø 表义名需遵循[3.1]表述的规则,尽量以英文命名,也可使用汉语拼音的首字符命名。表义名中汉语拼音均采用小写,且字符间不加分割符;单词命名的表义名采用名词性质的单词,各单词的首字符大写,其它字符小写。多个单词间不加任何分割符,如果整个单词太长,则使用完整的第一音节或经过仔细选择的缩写词。名词全部采用单数形式。
Ø 表别名取表义名的前3 个字符加最后一个字符。如果存在冲突,适当增加字符(如取表义名的前4 个字符加最后一个字符等)
Ø 关联表命名为“Re_表A_表B”形式,Re 是Relative的缩写,表A 和表B均采用其表义名或缩写形式。
3.5 属性(列或字段)
属性命名遵循以下原则:
Ø 采用有意义的列名,尽量使用英文,或有实际含义的汉语拼音的首字符,且字符间不加任何分割符。
Ø 属性名前不要加表名等作为前缀。
Ø 属性后不加任何类型标识作为后缀。
Ø 关联字段命名以 “cd+_+关联表的表义名(或缩写)+_+字段名”进行
3.6 主键
任何表都必须定义与业务无关的自增形式的键值,一律命名为ID。
表主键命名为“表名+ID”,如Customer表的主键命名为CustomerID。
3.7 外键
外键名称为主表名+对应列名,如
在表Department中,其字段有:ID, DepartmentName
在表UserInfo中,其字段有:UserId,UserName,DepartmentsID
在表UserInfo中,其字段有:UserId,UserName,DepartmentsID
其中,DepartmentID为外键,参照Depertment表的ID字段
3.8 索引
索引的命名为:“idx_表名(或缩写)+_+列名”。
其中多单词组成的属性列列名取前几个单词首字符,加末单词组成,如Customer表中字段LastName上的索引可命名为idx_Customer_LastName
3.9 Default 标识
由“df+_+<default 标识名>”组成
3.10 Rule 标识
由“ru+_+<Rule 标识名>”组成
3.11 自定义数据类型
自定义数据类型由“ud+_+<自定义数据类型标识>+_+<数据类型>”组成
3.12 触发器
Ø AFTER型触发器
系统名+tr_+<表名>_+<i,u,d的任意组合>
其中i,u,d 分别表示insert、update和delete
Ø INSTEAD OF型触发器
系统名+ti_+<表名>+_+<i,u,d的任意组合>
其中i,u,d 分别表示insert、update和delete
3.13 视图
视图命名由v_+表名+描述,如v_Customer_Top100
3.14 存储过程
存储过程命名由“usp+_+存储过程标识”组成
存储过程标识要以实际含义的汉语拼音的首字符或以动宾形式构成,并用下划线分割各个组成部分。对于在某个表上进行操作的存储过程可以 命名为“usp_表明_操作”方式,如在Customer表上进行插入操作的存储过程命名为usp_Customer_Insert
3.15 函数
函数命名由“ufn_+函数标识”组成
3.16 变量名
Ø 变量命名采用Camel规则,使用有明确说明性的名字。
3.17 角色
全部使用小写字符命名
由“系统名称+_+role+_+名词(或缩写)或名词短语(或缩写)”组成
如用电系统的查询角色:yd_role_query
3.18 用户
全部使用小写字符命名
由“系统名称+_+user+_+名词(或缩写)或名词短语(或缩写)”组成。如用电系统的管理用户:yd_user_sa
3.19 命名中的其它注意事项
Ø 命名都不得超过30 个字符。变量名长度不要超过29个字符(不包括标识字符@)
Ø 不要在对象名的字符之间留空格
Ø 要保证命名没有和保留词、数据库系统或者常用访问方法冲突
4.1 一般性注释
注释可以包含在批处理中。在触发器、存储过程中包含描述性注释将会大大增加文本
的可读性和可维护性。
4.1.1 注释尽可能详细、全面。
4.1.2 创建每一数据对象前,应具体描述该对象的功能和用途。
4.1.3 传入参数的含义应该有所说明。如果取值范围确定,也应该一并说明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。
4.1.4 注释语法包含两种情况:单行注释、多行注释
单行注释:注释前有两个连字符(--),最后以行尾序列(CR-LF)结束。一般,对变量、条件子句可以采用该类注释。
多行注释:符号/*和*/之间的内容为注释内容。对某项完整的操作建议使用该类注释。
4.1.5 注释应当简洁,同时应描述清晰。
4.2 函数头注释
编写函数文本--如视图、函数、触发器、存储过程以及其他数据对象时,必须为每个函数增加适当注释。该注释以多行注释为主,主要结构如下:
/************************************************************************
*name : --函数名
*function : --函数功能
*input : --输入参数
*output : --输出参数
*author : --作者
*CreatedDate : --创建时间
*UpdateDate : --函数更改信息(包括作者、时间、更改内容等)
*************************************************************************/
CREATE PROCEDURE dfsp_xxx
4.3 大小写约定
SQL语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql 保留字大写。
4.4 代码缩进约定
4.4.1 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进
4.4.2 where 子句书写时,每个条件占一行,语句另起一行时,以保留字或者连接符开始,连接符右对齐。
4.5 多表连接约定
多表连接时,使用表的别名来引用列。表别名的命名参见[3.4]。
常用SQL 语句的编写示例如下
4.6.1 CREATE 语句
CREATE TABLE publishers
(
pub_id char(4) NOT NULL --标识
CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED
CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')
OR pub_id LIKE '99[0-9][0-9]'),
pub_name varchar(40) NULL, --名称
city varchar(20) NULL, --城市
state char(2) NULL, --州
country varchar(30) NULL --国家
DEFAULT('USA')
)
SELECT <选择列列表>
[ INTO <新表名> ]
FROM <要选择的表名>
[ WHERE <搜索条件> ]
[ GROUP BY <分组条件> ]
[ HAVING <搜索条件> ]
[ ORDER BY <排序规则> [ ASC | DESC ] ]
禁止使用SELECT *
4.6.3 INSERT语句
INSERT INTO <要插入的表名>
(<列1>, <列2>, .., <列n-1>, <列n>)
VALUES (<列1值>, <列2值>, .., <列n-1值>, <列n值>)
4.6.4 UPDATE语句
UPDATE <要更新的表名>
SET <要更新的列> = <列值>
4.6.5 DELETE语句
DELETE FROM authors
WHERE au_lname = 'McBadden'
条件执行语句IF…ELSE 按以下格式编写
IF <条件表达式>
BEGIN
<命令行或程序块>
END
[ELSE IF <条件表达式>
BEGIN
<命令行或程序块>
END]
注:<1>上式若BEGIN…END 之间只包含单独一命令行,为使代码紧凑,BEGIN和END边界
也常省略
<2>IF…ELSE 语句可以嵌套,为提高代码的可读性,嵌套层次不应多于5 层。当嵌套
层次太多时应考虑使用CASE 语句。
条件选择语句CASE…WHEN 按以下格式编写
CASE <运算式>
WHEN <运算式> THEN <运算式>
…
第8/8页
WHEN <运算式> THEN <运算式>
[ELSE <运算式>]
END
或
CASE
WHEN <条件表达式> THEN <运算式>
…
WHEN <条件表达式> THEN <运算式>
[ELSE <运算式>]
END
循环执行语句WHILE…CONTINUE…BREAK按以下格式编写
WHILE <条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
…
<命令行或程序块>
END