数据库开发规范1.编码规范1.1.一般性注释1)注释简洁,同时应描述清晰。2)创建每一数据库对象时都要加上注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上注释,以说明该列和/或列取值的含义。如:ZH_USER表中有DR列属性为INT可加COMMENTON注释如下ZH_USER.DR'0=正常,1=删除,2=停用'3)注释语法包含两种情况:单行注释、多行注释a)单行注释:注释前有两个连字符(--),一般对变量、条件子句可以采用该类注释。b)多行注释:符号/*和*/之间的内容为注释内容。对某项完整的操作建议使用该类注释。1.2.函数文本注释1)在每一个块和过程(存储过程、函数、触发器、视图等)的开头放置注释。创建信息:功能、输入参数、输出参数、作者、创建时间;修改信息:修改人、修改时间、修改内容--==================================================--功能:添加EAP企业网络学院新帐号--输入参数:1.操作验证码2.管理员的数量3.管理员下的学员数量--输出参数:--作者:--创建时间:2011/06/01--==================================================--修改人:--修改时间:2011/10/18--修改内容:优化生成帐号名称的代码,但不改变生成逻辑。--==================================================ALTERPROCEDURE[dbo].[P_EAPCorpAccountAdd]@OperNamevarchar(100),--操作验证码@AdminNumint,--管理员的数量@UserNumint--管理员下的学员数量ASBEGINDECLARE--管理员相关@UserIdint,--管理员的用户ID@UserNamevarchar(100),--管理员的用户名@UserPasswordvarchar(100),--管理员的登录密码@CardIdint,--管理员的卡ID@PostIdint,--管理员的学习岗位ID--企业相关@OrganizeIdint,--企业的组织ID@CorpIdint,--企业的公司ID--学员相关@UserId2int,--学员的用户ID@UserName2varchar(100),--学员的用户名@UserPassword2varchar(100),--学员的登录密码@CardId2int,--学员的卡ID@PostId2int,--学员的学习岗位ID,默认是'临时岗位'的ID--计数器、标志等@i_startint,@iint,@i2int,@flagint...--ZH_USER加管理员用户SELECT@UserId=PK_USERFROMZH_USERWHEREUSERNAME=@UserNameANDDR=0IF(@UserIdISNULL)BEGININSERTINTOZH_USERWITH(ROWLOCK)(USERNAME,USERPASSWD)VALUES(@username,@pwd)SET@UserId=SCOPE_IDENTITY()END--ZH_CARD加管理员用户SELECT@CardId=cardidFROMZH_CARDWHEREcardno=@UserNameANDdr=0...END2)传入参数的含义应该有所说明。如果取值范围确定,也应该一并说明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。3)在每一个变量声明的旁边添加注释,说明该变量要用作什么。通常,简单使用单行注释就行了。4)在每个主要部分之前添加注释。在块的每个主要部分之前增加注释,解释下—组语句目的,最好是说明该段语句及算法的目的以及要得到的结果,但不要对其细节进行过多的描述。5)用一个或多个空行隔开不同的逻辑代码块。1.3.命名规范1)采用Pascal命名法,即组成标识符的每个单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求全部大写。例如:ApplicationException、ID。2)存储过程的命名使用P_+业务+动作(新增,修改,删除,查询…)示例:新增P_PlanAdd删除P_PlanDelById删除P_PlanDelByName查询P_PlanQuery修改P_PlanMod3)传入参数一般单词首字母大写,缩写字母组成的单词全部大写。如:@UserName,@ID4)变量命名一般单词首字母大写,缩写字母组成的单词全部大写。5)如果是函数的话,前缀用F_。1.4.SQL语句的编写规范1)总原则:统一、直观、模块化、清晰易读。2)SELECT语句查询语句采用以下原则编写每个部分分行编写,将每一行的第一个关键字与第一行的SELECT头部对齐,如SELECTcol1,col2,col3FROMtable1WHEREcol1col2GROUPBYcol1,col2ORDERBYcol1;SQL关键字用大写,列名和表名建议同数据库。代码对齐缩进时,统一用4个空格代替TAB键。语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行。当语句的同一部分要延续到下一行时,按下列格式排列:SELECTcol1,col2,col3,col4,col5,col6,col7,col8,col9,col10将语句中WHERE和AND部分格式化,书写布局类似于:WHEREa0ANDb1ANDc2当语句中出现括号时,括号内侧不留空格,括号外侧两边留空格。在SQL语句使用运算符时,操作两边不留空格,如:WHEREX=YANDA=BANDC=D3)INSERT语句INSERTINTO要插入的表名(列1,列2,..,列n-1,列n)VALUES(列1值,列2值,..,列n-1值,列n值)4)UPDATE语句UPDATE要更新的表名SET要更新的列=列值5)DELETE语句DELETEFROMtable1WHEREcol1='???'1.5.条件执行语句(IF…ELSE)编写规范IF条件表达式BEGIN一条或多条语句ENDELSEBEGIN一条或多条语句END1.6.条件执行语句(CASE)编写规范CASE条件表达式WHEN值1THEN语句1WHEN值2THEN语句2[...n][ELSE其它语句]END1.7.循环语句(WHILE)编写规范WHILE条件表达式BEGIN一条或多条语句[BREAK][CONTINUE]END2.程序效率规范提高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:1)用具体的字段名代替星号(*)。2)尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。3)SQL嵌套子查询不应超过3层。超过3层时应拆分复杂查询。方法是使用临时变量或临时表。或者使用“平面化”的多表连接查询。4)尽量避免使用游标,因为游标的效率很差。如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。实际上,所有使用游标的多表查询都可通过表连接来实现。5)注意WHERE子句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。6)不要在WHEERE子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。7)尽量使用EXISTS代替IN。EXISTS在内表中找到符合条件的第1条记录后,即返回TRUE,而IN会查找内表中的所有记录,再返回结果。两种操作的效率相差很大。8)尽量使用EXISTS代替SELECTCOUNT(1)来判断是否存在记录,COUNT函数只有在统计表中所有行数时使用,而且COUNT(1)比COUNT(*)更有效率。9)尽量使用“=”,不要使用“”。10)注意一些OR子句和UNION子句之间的替换。11)注意表之间连接的数据类型,避免不同类型数据之间的连接。12)注意存储过程中参数和数据类型的关系。13)注意INSERT、UPDATE、DELETE操作,在非处理大批量数据时,应尽量使用WITH(rowlock)选项,并在WHERE条件子句中使用主键字段来定位数据。