数据库编程规范.docx
《数据库编程规范.docx》由会员分享,可在线阅读,更多相关《数据库编程规范.docx(12页珍藏版)》请在冰豆网上搜索。
数据库编程规范
数据库编程规范
版
版本历史
状态
版本
作者
参与人
起止日期
备注
草稿
2011-4-26~2011-4-28
第一部分概述
1.1文档目的
本文档的编写目的是为了项目开发人员在使用数据库的过程中,使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。
遵守数据库编码规范是提高数据库性能最基本的也是最重要的途径。
1.2文档范围
本文档适用于合肥公司范围内所有数据库应用系统和项目开发工作。
1.3术语定义
缩写、术语
解释
Database或DB
数据库系统
ORG
合肥
1.4参考文献
《MicrosoftSQLServer2005联机丛书》
《T-SQL编码标准》
《编写可移植的Transact-SQL代码》
第二部分对象命名规则
2
2.1通用规则
Pascal规则
每个单词的首字母大写。
如:
TestEmployee。
Camel规则
除了第一个单词外的其他单词的首字母大写。
如:
testEmployee。
Upper规则
仅用于被广泛认可的缩写命名。
一般不超过四个字符,超过四个字符长度应该使用Pascal规则,如:
OLAP、PIN。
2.2数据库
数据库名定义为系统名_模块名,如”crm_customer”,表示CRM系统的Customer模块数据库。
数据库名全部采用小写。
2.3数据库文件
数据文件命名采用数据库名+_+文件类型+[文件序号]+文件后缀,[文件序号]为1、2、…、9等数值,当数据库中某一文件类型的文件有多个时加上文件序号加以区别。
只有一个时可以不加。
文件后缀:
主数据文件为.mdf,其它数据文件为.ndf,日志文件为.ldf。
文件名全部采用小写。
比如系统名为“crm_customer”,则数据库数据文件命名为“”,日志文件命名为“”。
2.4表
表命名要遵循以下原则:
Ø规范要求使用表义名,不使用任何前缀。
但考虑到有可能存在表重名的问题,建议公司的项目数据库表命名采用“ORG_”作为前缀。
以示区分。
Ø整个表名的长度不要超过30个字符。
Ø表义名尽量以英文命名,也可使用汉语拼音的首字符命名。
表义名中汉语拼音均采用小写,且字符间不加分割符;单词命名的表义名采用名词性质的单词,各单词的首字符大写,其它字符小写。
多个单词间不加任何分割符,如果整个单词太长,则使用完整的第一音节或经过仔细选择的缩写词。
名词全部采用单数形式。
Ø表别名取表义名(不含前缀)的前3个字符加最后一个字符。
Ø如果存在冲突,适当增加字符(如取表义名的前4个字符加最后一个字符等)。
Ø关联表命名为“ZD_Re_表A_表B”形式,Re是Relative的缩写,表A和表B均采用其表义名或缩写形式。
2.5属性(列或字段)
属性命名遵循以下原则:
Ø采用有意义的列名,尽量使用英文,或有实际含义的汉语拼音的首字符,且字符间不加任何分割符。
Ø如果字段为bool型,则使用"IsShow","IsValid","HasPassed","HasExamined","IgnoreCase"这种形式表示。
Ø属性名前不要加表名等作为前缀。
Ø属性后不加任何类型标识作为后缀。
Ø关联字段命名以“cd+_+关联表的表义名(或缩写)+_+字段名”进行。
2.6主键
Ø任何表都必须定义与业务无关的自增形式的键值,一律命名为ID。
Ø表主键命名为“表名+ID”,如Customer表的主键命名为CustomerID。
2.7外键
Ø外键名称为主表名+对应列名,如:
Ø在表Department中,其字段有:
ID,DepartmentName
Ø在表UserInfo中,其字段有:
UserId,UserName,DepartmentsID
Ø其中,DepartmentID为外键,参照Depertment表的ID字段。
2.8索引
Ø索引的命名为:
“idx_表名(或缩写)+_+列名”。
Ø其中多单词组成的属性列列名取前几个单词首字符,加末单词组成,如Customer表中字段LastName上的索引可命名为idx_Customer_LastName。
2.9Default标识
由“df+_+”组成。
2.10Rule标识
由“ru+_+”组成。
2.11自定义数据类型
自定义数据类型由“ud+_+<自定义数据类型标识>+_+<数据类型>”组成。
2.12触发器
ØAFTER型触发器
系统名+tr_+<表名>_+,其中i,u,d分别表示insert、update和delete。
ØINSTEADOF型触发器系统名+ti_+<表名>+_+,其中i,u,d分别表示insert、update和delete。
2.13视图
视图命名由v_+表名+描述,如v_Customer_Top100。
2.14存储过程
Ø存储过程命名由“usp+_+存储过程标识”组成。
Ø存储过程标识要以实际含义的英语单词或以动宾的形式构成,并用下划线分割各个组成部分。
对于在某个表上进行操作的存储过程可以命名为“usp_表名_操作”方式,如在Customer表上进行插入操作的存储过程命名为usp_Customer_Insert。
2.15函数
函数命名由“ufn_+函数标识”组成。
2.16变量名
变量命名采用Camel规则,使用有明确说明性的名字。
2.17角色
Ø全部使用小写字符命名。
Ø由“系统名称+_+role+_+名词(或缩写)或名词短语(或缩写)”组成如用电系统的查询角色:
yd_role_query。
2.18用户
Ø全部使用小写字符命名。
Ø由“系统名称+_+user+_+名词(或缩写)或名词短语(或缩写)”组成。
如用电系统的管理用户:
yd_user_sa。
2.19命名中的其它注意事项
命名都不得超过30个字符,变量名长度不要超过29个字符(不包括标识字符@)。
不要在对象名的字符之间留空格。
要保证命名没有和保留词、数据库系统或者常用访问方法冲突。
第三部分编程规范
3
3.1一般性注释
Ø注释可以包含在批处理中。
在触发器、存储过程中包含描述性注释将会大大增加文本的可读性和可维护性。
Ø注释尽可能详细、全面。
Ø创建每一数据对象前,应具体描述该对象的功能和用途。
Ø传入参数的含义应该有所说明。
如果取值范围确定,也应该一并说明。
取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。
Ø注释语法包含两种情况:
单行注释、多行注释。
Ø单行注释:
注释前有两个连字符(--),最后以行尾序列(CR-LF)结束。
一般,对变量、条件子句可以采用该类注释。
Ø多行注释:
符号/*和*/之间的内容为注释内容。
对某项完整的操作建议使用该类注释。
注释应当简洁,同时应描述清晰。
3.2函数头注释
编写函数文本--如视图、函数、触发器、存储过程以及其他数据对象时,必须为每个函数增加适当注释。
该注释以多行注释为主,主要结构如下:
/************************************************************************
*name:
--函数名
*function:
--函数功能
*input:
--输入参数
*output:
--输出参数
*author:
--作者
*CreatedDate:
--创建时间
*UpdateDate:
--函数更改信息(包括作者、时间、更改内容等)
*************************************************************************/
CREATEPROCEDUREdfsp_xxx
3.3大小写约定
SQL语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。
3.4代码缩进约定
Ø一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进。
Øwhere子句书写时,每个条件占一行,语句另起一行时,以保留字或者连接符开始,连接符右对齐。
3.5多表连接约定
多表连接时,使用表的别名来引用列。
表别名的命名参见。
3.6常用SQL语句的编写规范
3.6.1CREATE语句
CREATETABLEpublishers
(
pub_idchar(4)NOTNULL--标识
CONSTRAINTUPKCL_pubindPRIMARYKEYCLUSTERED
CHECK(pub_idIN(''1389'',''0736'',''0877'',''1622'',''1756'')
ORpub_idLIKE''99[0-9][0-9]''),
pub_namevarchar(40)NULL,--名称
cityvarchar(20)NULL,--城市
statechar
(2)NULL,--州
countryvarchar(30)NULL--国家
DEFAULT(''USA'')
)
3.6.2SELECT语句
SELECT<选择列列表>
[INTO<新表名>]
FROM<要选择的表名>
[WHERE<搜索条件>]
[GROUPBY<分组条件>]
[HAVING<搜索条件>]
[ORDERBY<排序规则>[ASC|DESC]]
禁止使用SELECT*
3.6.3INSERT语句
INSERTINTO<要插入的表名>
(<列1>,<列2>,..,<列n-1>,<列n>)
VALUES(<列1值>,<列2值>,..,<列n-1值>,<列n值>)
3.6.4UPDATE语句
UPDATE<要更新的表名>
SET<要更新的列>=<列值>
3.6.5DELETE语句
DELETEFROMauthors
WHEREau_lname=''McBadden''
3.7条件执行语句(IF)编写规范
条件执行语句IF…ELSE按以下格式编写
IF<条件表达式>
BEGIN
<命令行或程序块>
END
[ELSEIF<条件表达式>
BEGIN
<命令行或程序块>
END]
注:
<1>上式若BEGIN…END之间只包含单独一命令行,为使代码紧凑,BEGIN和END边界
也常省略
<2>IF…ELSE语句可以嵌套,为提高代码的可读性,嵌套层次不应多于5层。
当嵌套
层次太多时应考虑使用CASE语句。
3.7.1条件选择语句(CASE)编写规范
条件选择语句CASE…WHEN按以下格式编写
CASE<运算式>
WHEN<运算式>THEN<运算式>
…
WHEN<运算式>THEN<运算式>
[ELSE<运算式>]
END
或
CASE
WHEN<条件表达式>THEN<运算式>
…
WHEN<条件表达式>THEN<运算式>
[ELSE<运算式>]
END
3.7.2循环执行语句(WHILE)编写规范
循环执行语句WHILE…CONTINUE…BREAK按以下格式编写
WHILE<条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTI