数据库编码标准.doc_第1页
数据库编码标准.doc_第2页
数据库编码标准.doc_第3页
数据库编码标准.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

MIS系统课程设计规范(草案)1开发环境规范使用windows 操作系统使用SQL Server 或 ACCESS数据库2开发语言规范使用团队熟悉的一种开发语言,如:VB,Delphi,ASP,JSP,Java3开发文档的规范需求文档规范设计文档规范程序编码标准附录:数据库编码标准9.1大小写规则1. 关键字采用大写。2. 系统定义的对象及数据类型采用小写。3. 引用变量、参数、列名,以及表、过程和视图之类的对象名时,使用混合的大小写9.2缩进与空白1. 选择a.一般缩进为两个英文字符的宽度,但SELECT语句的折行显示应字段对齐,例如:SELECT CustomerID,Companyname,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax,FROM Northwind.dbo.customersb.没有理由将一个短的SELECT语句拆为多行。例如: IF EXISTS(SELEC * FROM Northwind.dbo.Customers)c.对于比较长的SELECT语句,通常将每个主要子句放置在单独的一行中,并且让它们左对齐。通常将列紧挨SELECT保留字之右放置。如果存在许多列而无法放置在同一行中,则只要在下一行中继续给出此列表,通常对位于第二行和后续行中的列缩进排列,以便它们与第一行中的列对齐。例如:SELECT CustomerID,Companyname,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax,FROM Northwind.dbo.customersWHERE City IN(London,Madred)2. 字句与谓词a.构成主要子句的较小子句让它们相互对齐, 如果将一个复合句的组成部分放置在同一行中,则通常用圆括号分隔它们。例如:SELECT CustomerID,CompanyName,ContactName,ContactTitle,Address,City, Region,PostalCode,Phone,Fax,FROM Northwind.dbo.CustomersWHERE City = ChinaOR City = London OR City = Madrid 3. 表达式如果一个CASE表达式比较简单,则我通常将其嵌入单一的代码行。如果它比较复杂,则将其拆为多行。对于函数及其他类型表达式也如此,例如:SELECT CustomedD,CompanyName,ContactName,ContactTitle, Phone, CASE WHEN Fax Is NULL THEN N ELSE Y END ASFaxFROM Northwind.dbo.CustomersWHERE City = London较复杂的CASE表达式通常占用多行SELECT CASE Region WHEN WA THEN Phil WHEN SP THEN Xavier WHEN BC THENJ Jean-Marc ELSE Unknown END AS Salesman, CustomerID,CompanyName,ContactName,FROM Northwind.dbo.CustomersORDER BY Salesman9.3BEGIN/END规则参照DELPHI编码标准2.3。9.4圆括号规则参照DELPHI编码标准3.1。9.5水平间隔规则参照DELPHI编码标准2.5。9.6列与表的别名对于列与表的别名通常使用的是 ColumnName As Label, 建议表的别名用一个或两个缩写字符。在SELECT列表中的列名前应用各自的表别名作为列引用的前缀,其理由有两个。第一,它增加了代码的可读性。不必猜测一个列是源自哪里。第二,它增强了代码的健壮性。如果您在此后向查询中增加一个表,该表恰巧包含一个与未限定的列同名的列,则将得到令人讨厌的“不确定的列名”错误消息。9.7缩写与可选关键字1. 关键字对于可选关键字。一般应在自己的代码中省略它们。这种代码决不会产生语法错误,决不会中断,决不会通过对工具的修改而变得失效,而且不占用宝贵的屏幕资源。其中的例外就是与INSERT命令一起的INTO关键字不要省略,因为在ORACLE数据库中必须这样,以及与DELETE命令一起的FROM关键字要省略。2. 常见单词的缩写 当您在自己创建的对象名中缩写常见单词时,请尽量保持一致。如果在一个名称中将number缩写为“ Num”,则在所有对象中都做类似的缩写。不要在一个表中缩写为“ No” (如,CustNo),而在另一个表中又缩写为“ Number”(如,InvoiceNumber)。请保持一致。9.8 名称选择 当命名一个对象时,要避免表、视图、UDF、过程、触发器、默认值和规则对象之间的命名冲突,因为它们的命名必须唯一。例如,不能让一个存储过程和一个表拥有相同的名称。如前所述,尽量保持命名的描述性,而不放任自流。1. 表对于表,通常应使用单个单词的单数形式的实体类型名称(如,Customer)。如果表与其它表有关联,应尽量建立主键与外键。2. 视图对于视图,通常应使用V_开头,加上有意义的描述性单词(如,V_Customer)。3. 索引索引命名应据用描述性,见名知意,如果一个索引是建立在表Customer的CompanyName和ContractName列之上,则好的命名应为CompanyNameContractName或类似的名称,因为索引不必在整个数据库中唯一,这样只看一下名称就可以知道该索引的主键是什么。4. 触发器对于触发器,使用这样一种命名规则,它表示激发触发器的动作和该触发器所关联的表名(如,DeleteCustomer或InsertUpdateOrder)。如果触发器拥有特别的特性(如,它是一个INSTEADOF触发器),则通常通过一个名称的前缀来表明这一点(如,InsteadOfDeleteCustomer)。建议:除非别无它法,否则应尽可能避免使用触发器。5. 变量参照DELPHI编码标准3.4。 6. 过程和函数过程与函数应以基于动词的形式命名,如PostPurchases或BuildHistory。7. 约束约束的命名应能区分是哪一各类型的约束,并能根据名称知道该约束是干什么的,通常主键前加前缀PK_,外部键加前缀FK_,唯一键加前缀UK_,检查约束加前缀CK_,如:PK_EmployeeID,CK_Amount must not equal 0。建议:如果表中的某列或多列不可以出现重复记录,应尽可能地在这此列上建立唯一约束。9.9编码约定1. 脚本建议(1) 对象删除 试图删除一个对象之前应检查其存在性。不这样做会不必要地生成错误消息,甚至当DROP命令被分割在其自己的TSQL批处理之中。错误消息应该是一种会引起您注意的内容,而不是一种可以经常被忽略的内容。应避免生成不必要的错误消息,以免变得对它们熟视无睹。(2) 注释通过平衡澄清含糊与不确定的编码元素的需求与让代码免于噪声和不必要干扰的需求,来确定在自己的代码中“注释”什么。过分的注释与注释不足同样不可取。过分注释一个脚本将给您带来大量的工作,还不能真正改善代码的可读性。当处理某些从编码的角度来看不是显而易见的,并且那些继续处理此编码的人应该知道的内容时,才应注释它。任何有意义的存储过程都应该在其开始处包含一个代码块,用来描述该过程以及该过程做什么。如同对待任何源代码过程,跟踪诸如谁修改了代码和修改代码的时间等事项也可以是非常方便的注释应尽量用斜线-星号(/*.*/),而少用双斜线(/)(3) 脚本文件一般而言在一个单独的脚本文件中保存自己所创建的每个数据库对象的源代码。对于重新创建或修改对象而言,这样做提供了最大的灵活性。(4) 脚本段如果脚本包含多个没有共享局部变量的不同段,那么通常用GO来分隔各个段,以便模块化所要执行的操作。按照这种方式,如果在其中一个段出现错误,则可以防止它引起紧跟其后的段出错。相反地,如果希望脚本段只在其前一个脚本段不出错的条件下执行,则可以去掉GO并将两块代码合并为一块。如果在前面的块中出现较严重的错误,则位于后面的块中的命令永远都不会执行。(5) USE如果一个脚本必须从给定数据库中运行,那么在脚本中尽可能地包含合适的USE命令。2. 存储过程与函数(1) 变量声明如果可能,应集中地在一个位置声明存储过程或函数将使用的变量,最好在过程或函数的开始处。尽管语法上允许在代码的任何位置声明变量,但为查找一个变量声明而不得不搜索一个例程将浪费时间并导致代码更难于理解。(2) 存储过程的返回值与参数在存储过程中对于过程的返回值应检查其正确性并做出适当的处理,通常,值0表示成功,非零值表示已出现了错误,对于存储过程的参数,应尽早检查参数的正确性,并且当提供的值不对时应返回一个错误,这样防止无效值或操作影响数据的正确性。(3) 默认参数值给存储过和或UDF的参数提供默认值是一种不错的做法,这让它们更易于使用、更灵活和更不易出错。(4) 错误健壮代码的标志在于全面的错误检查,应在关键操作和相应响应之后进行错误检查。通常在可能导致一个错误条件的语句这后立即检查ERROR,并且当一个语句没有影响任何构成错误的行时,检查ROWCOUNT。(5) 模块性较之于单一且非常长的存储过程,一组较小且逻辑简单的例程更易于处理和理解。在可能的情况下,应将复杂例程拆分为较小的例程。3. 表与视图(1) 临时表在可能的情况下,应尽量过分使用临时表。两个理由:第一,它们可以导致吞吐量问题,因为位于tempdb的资源争用。第二,与永久表相比,对于保持对临时表的更新统计,SQL Server更为主动。这会引起性能问题和未预料的存储过程的重编译。避免临时表的一种策略是使用table变量,当它超出作用域时,会被自动删除。(2) 资源清除在使用监临时表时,应在不再需要时删除它们。对于游标也是如此:当使用完它们,应关闭并释放它们。(3) 系统表除非别无它法,应力求避免直接查询系统表,SQL SERVER提供一组属性函数(如,DATABASEPROPERTY()、COLUMNPROPERTY()、OBJECTPROPERTY()等)以及大量视图与系统存储过程供您使用,直接查询系统表有两点不足。第一,系统表在不同版本之间会有变化。第二,与等价的属性可无数据函数相比,通过直接引用系统表获得的系统级信息通常欠缺可读性。4. Trabsact-Sql (1) 特殊了一SQL在可能的情况下,应避免通过EXEC()函数执行特殊TSQL。有两个理由。第一,由特殊TSQL生成的执行计划不能像存储过程的执行计划那样得以重用。第二,特殊TSQL非常难于调试。 因此,如果可能,应将代码放置在正常的存储过程和函数等对象之中,然后调用这些对象。这几乎总是优于任何动态TSQL途径。如果必须执行在运行时生成的T-SQL,则我力求使用扩展过程sp_executesql。它通常明显快于EXEC(),而且服务于sp_executesql的执行计划被插入缓存并可被复用。

温馨提示

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

最新文档

评论

0/150

提交评论