SQL代码编写指导规范_第1页
SQL代码编写指导规范_第2页
SQL代码编写指导规范_第3页
SQL代码编写指导规范_第4页
SQL代码编写指导规范_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、金谷科技有限公司<mm»val4av vbcmmmocv co.项目:规范文号:cod-sta-03版本:vi.1编写者:许飞云时间:2005-11-4sql代码编写指导规范版本变更说明:时间版本作者/修改人变更原因2005-11-4v1.0许飞云初版发布2007-3-5vi.1刘莉添加5.4约定规则1简介21.1目标21.2 范围21.3 基本依据21.4使用约定21.4. 1 规则21.4.2 建议21.5 术语和缩略语21.6 参考32通用规则33配置约定34格式约定35命名约定45.1 一般规则45.2 命名规则45.3 常用规则55.4约定规则65.4.1表名采用前缀

2、+表名的方式,前缀定义如下:66注释76sql代码注释76.2 对象注释77嵌入式代码81简介开发小组在进行sql编程时常常会忽略所谓的编码标准,但这些标准却是开发小组顺 利开展工作的关键工具。这里介绍的编码标准是经整理出來的开发成果。它们当然还没有得 到普遍接受,而且不可否认,有些标准带有主观色彩。整理出此规范实际上更多的是为了提 高大家的意识,而不是吹捧每个人是sql编写方面的仲裁者:最重要的是要建立某些合理 的编码标准并遵循这些标准。您在这篇文章小会发现有关sql编程的一系列不同的编码标 准、技巧和提示。它们并未以任何特定的优先级或重要性顺序列出。1. 1目标本主题提供sql编程语言的命

3、名指南。希望能对下述情况有积极的作用:> 避免errors/bugs ,特别是难以查询的errors/bugs> 规范不良的编码习惯> 提高程序的可读性、可维护性和可移值性1.2范规范只针对sql server数据库中的sql编程语言。1.3基本依据本文档主要依据一位具有超过25年经验的数据库管理员和应用程序开发员 brian walker提出的开发成果。同时也可参考msdn文档中相应的规范。1.4使用约定1.4.1规则本文档表明没有特别的理由必须要遵守的要求。违反规则的编码人员必 须至少同有经验的同事商量并取得违反规则的理由共识后才能实施。必须对 违反规则的代码进行注解。1

4、.4.2建议正常情况下优先考虑,如果有违反建议的编码,应该同有经验的同事商 量并取得违反建议的理由共识后才能实施,推荐对违反建议的代码进行注 解。1.5术语和缩略语如下表所示:术语全称含义部份命令备注sqlstructrued query language结构化查询语言如下ddldata definition language数据定义语言create, alter,drop, declaredmldata manipulation language数据操纵语言select, delete,update, insertdcldata control language数据控制语言grant, re

5、voke,commit, rollback1.6参考msdn-命名指南sql server 2000 联机帮助2通用规则规则1:每一次不能执行建议的编码规则,必须要有合理的理由,理rh不包括个人的编 码风格因素。规则2:在一个文件中不要混合不同所有者的代码,因为第三方的代码可能不会遵守相 同的编码规范。3配置约定为方便开发小组成员编写出高质量的sql代码,需要开发小组各成员按 照统一的标准配置适合快速、高效开发的使用环境。这里,将会列出一些较 为适用的参数配置约定,需要开发小组成员统一执行该约定,见下表:序号项目推荐方案备注1sql代码编辑工具查询分析器sql server 自带2缩进符使用4

6、个空格字符需要配置编辑器说明:> 可以使用tab键进行缩进处理,建议在配置选项中,将默认的制表符,更改为四个 空格字符,这样不管用什么程序查看sql代码,都能保证是一致的格式格式约定表面上,sql代码的格式似乎并不重要,但一致的格式可以使您的同事 (不论是同一小组的成员还是更大范围的项目开发团队的成员)更轻松地浏 览和理解您的sql代i马。为sql语句定义一个结构,遵循一冃了然的结构将 使您可以更轻松地查找和确认语句的不同部分。统一的格式还使您可以更轻 松地在复杂的sql语句中增、删代码段,也使调试工作变得更容易。下面是select语句的格式示例,来说明sql代码中的部份适用的格式:se

7、lect c.name,e.namelast,e.namefirst,e.number,isnull(i.description,'na*) as descriptionfrom tblcompany as cjoin tblemployee as eon c.companyld = e.companyldleft join tblcoverage as von e.employeeld = v.employeeldleft join tbllnsurance as 1on v.insuranceld = i.insuranceldwhere c.name like nameand v

8、.createdate > convert(smalldatetime;01 /01 /20001)order by c.name,e.namelast,e.namefirst,e.number,isnului.description/na1)select retain = error, rows = ©rowcountif status = 0 set status = retain> 在代码块中使用缩进、块、制表符(用四个空格代替的)和空格> 一个嵌套代码块中的语句一般使用以四个空格的缩进为较好的原则> 在同一语句中开始新行时,使sql关键字左对齐>

9、 使用一个(而不是两个)空行分隔sql代码的逻辑块,只要需要就可以使用> 请在关键字、分隔符、操作符之i'可加入一空格> 语句尽可能要简捷> 当对语句添加注释时,请在注释符与注释之前,额外加上一空格5命名约定5.1 一般规则规则1:使用usenglish作为命名标识符依据。 规则2:使用命名标识符的pascal大小写、camel大小写。5.2命名规则由于不同的开发语言都有各白的格式约定,因此,对于sql代码而言,在命名方血制定-些大家都比较熟悉或是习惯使用的标准是很有必要的。序号项目关键字命名规则前缀示例备注1表tablepascal无companyinfo2存储过程

10、procedurecamelspspdeleteuserstoredprocedure3函数functioncamelfnfngetversionfunction4触发器triggercamel无updemployccdata一般不带上 trigger对应的 缩写5视图viewcamelvvusercompany通常使用表名组合6索引indexcamelidxidxemployecid7游标cursorpascal无employeecursor8数据库databasepascaldbectms但一般不带前 缀的5.3常用规则现列出在书写sql代码时所使用到的一些常用规则:> 创建表时,建

11、议使用白增序号(从1到n)列,在使用包含序号的表时会很方便> 对于sql代码中的关键字,建议全部使用大写格式,包括用于ddl、dml和dcl 等 sql 代码中。女1: create procedure> 变量名称及光标名称使用混和大小写,即单词首字母大写,单词剩下的全小写> 数据类型使用小写> 表名别名要简短,但意义要尽量明确。通常,使用大写的表名作为别名,使用as 关键字指定表或字段的别名。> 当一个sql语句中涉及到多个表时,始终使用别名來限定字段名。这使其他人阅 读起来更清楚,避免了含义模糊的引用> 当相关数字出现在连续的代码行小时(例如一系列sub

12、string函数调用),将 它们排成列> 声明sql局部变量(例如lngtableid)吋,使用适当的数据类型声明和一致的 大写> 始终指定字符数据类型的长度,并确保允许用户可能需要的最大字符数,因为超出 最大长度的字符会丢失> 始终指定十进制数据类型的精度和范围,否则,将默认为未指定精度和整数范围> 在尽可能出错的sql语句中,使用错误处理程序,且必须使用set或select 立即捕获错误代码(error)以保存至特定的变量中> 避免使用“未声明的”功能,例如系统表中未声明的列、sql语句中未声明的功 能或者未声明的系统存储过程或扩展的存储过程> 不要依赖

13、任何隐式的数据类型转换。例如,不能为数字变量赋予字符值,而假定 sql会进行必要的转换。相反,在为变量赋值或比较值之前,应使用适当的 convert幣数使数据类型相匹配。另一个示例:虽然sql会在进行比较之前 对字符表达式进行隐式且自动的rtrim,但不能依赖此行为,因为兼容性级别设 置非字符表达式会使情况复杂化> 不要将空的变量值直接与比较运算符(符号)比较> 对于变量的值与空值比较,应使用is null或is not null,或者使用isnull 函数> 不要使用str函数进行舍入,此函数只能用于整数。如果需要十进制值的字符串 形式,应先使用convert函数(转至不同

14、的范围)或round函数,然后将 其转换为字符串。也可以使用ceiling和floor函数> 使用数学公式时要小心,因为sql可能会将表达式强制理解为一个不需要的数据 类型。如果需要十进制结果,应在整数常量后加点和零(.0)> 决不要依赖select语句会按任何特定顺序返回行,除非在order by子句屮 指定了顺序> 通常,应将order by子句与select语句一起使用。可预知的顺序(即使不 是最方便的)比不可预知的顺序强,尤其是在开发或调试过程中> 不要在t-sql代码中使用双引号。应为字符常量使用单引号> 在sql server 2000中,尽量使用表变

15、量來代替临时表。如果表变量包含大量数据, 请注意索引非常有限(只有主键索引)> 先在例程屮创建临时表,最后再显式删除临时表。将ddl与dml语句混合使 用有助于处理额外的重新编译活动> 要认识到临吋表并不是不可使用,适当地使用它们可以使某些例程更有效,例如, 当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好 使用导出表> 儿乎所有的存储过程(或触发器)都应在开始时设置set nocount on,而在结束 时设置set nocount off,可以避免sql server在执行存储过程的每个语句后 向客户端发送done_in_proc消息> 要在

16、例程中使用多个数据表/库修改语句,包括在一个循坏中多次执行一个语句, 就应考虑声明显式事务> 使用基于光标的方法或临时表方法z前,应先寻找基于集的解决方案来解决问题。 基于集的方法通常更有效> 理解cross join的工作原理并加以利用。例如,您可以在工作数据表和序号表 之间有效地使用cross join,结果集中将包含每个工作数据与序号组合的记录> 为了提高性能,应优先使用连接,然后使用子查询或嵌套查询> 尽可能将临时对象放置在本地> 检查输入参数的有效性> 只使用在存储过程中创建的临时表> 优先使用select.into,然后使用insert.s

17、elect,以避免大量死锁> 不要在任何代码屮使用select *> 建议养成良好的编写习惯,在语句结束后,加上sql语句结束符:分号(;)5.4约定规则5.4.1表名采用前缀+表名的方式,前缀定义如下:> 前缀统一3位字符长度。> 前缀第一位字符大写,其余2位小写。> 公共模块数据库命名采用首单词的首3字母。> 子系统采用前3个单词命名,每个单词取首字母,详细命名见下表:系统名称表结构前缀类别说明系统维护sys公共基础模块system data基础资料代码bas公共基础模块basic data商务/财务管理fbs子系统finance balance sys

18、tem客户关系管理crm子系统customer relation management仓库管理系统wms/系统warehouse management system运输管理系统tms子系统transport management system货代管理系统fms子系统forwarder management system配送管理系统dms子系统distribution management system集装箱堆场管理系统cds子系统container depot system集装箱维修系统crs子系统container repairing system报关管理系统cos子系统customs op

19、eration system码头管理系统tos子系统terminal operation system临吋表temtemp table6注释本节说明了添加注释的一些约定。对部份对象应尽可能添加上较详细的说明性内容,即注释,这是在编写任何 代码时都需要时常考虑的一件事情。所以请用一定的时间为每一个存储过程、触 发器、视图等附上一段必要的注释,方便维护。sql代码屮使用的注释标记符有:> 行注释法:使用两个连字符-> 块注释法:由此符号对组成/*和引6.1 sql代码注释开发小组的所有成员,一定要重视对对sql代码添加有效的注释。给某语句行或是特 定功能的语句块添加上详尽的注释,将方面以后维护时阅

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论