日期:2014-05-18  浏览次数:20440 次

【分享-Transact-SQL编程规范】
忽然发现电脑里有这么份资料.感觉不错 ~·
SQL code

Transact-SQL编程规范
 
1.  概述
1.1. 基本原则
以大小写敏感编写SQL语句。
尽量使用Unicode 数据类型。
优先使用连接代替子查询或嵌套查询。
尽量使用参数化SQL查询代替语句拼接SQL查询。
禁止使用[拼音]+[英语]的方式来命名SQL对象或变量。
尽量使用存储过程代替SQL语句。
 
1.2. 基本规范
建议采用Pascal样式或Camel样式命名数据库对象。
大写T-SQL语言的所有关键字,谓词和系统函数。
 
2.  命名规范
在一般情况下,采用Pascal样式或Camel样式命名数据库对象,使在开发基于数据库应用程序的时候通过ORM工具生成的数据访问代码不需要调整就符合程序开发语言(比如C#)命名规范。另外,关系型数据库同Xml结合得越来越紧密,规范的命名越来越重要。
在实际数据库开发过程中,如果需求方已经提供数据库设计方案,建议以提供的方案为准;在原有数据库上进行升级开发时,在可行的情况下可适当做出设计调整以符合编程规范。
 
1.3. 对象命名
1.3.1.  数据库
第一种方式,采用Pascal样式命名,命名格式为[项目英文名称]。
示例:AdventureWorks
第二种方式,采用Pascal样式命名,命名格式为[项目英文名称] + Db。
示例:AdventureWorksDb
  BizTalkRuleEngineDb
建议采用第一种方式。
 
1.3.2.  数据库文件
数据文件:[数据库名称] + _Data.mdf
日志文件:[数据库名称] + _Log.ldf
示例:AdventureWorks_Data.mdf
      AdventureWorks_Log.ldf
 
1.3.3.  关系型数据仓库
采用Pascal样式命名,命名格式为[项目英文名称] + DW。
示例:AdventureWorksDW
 
1.3.4.  数据架构
除SQL Server 系统定义的数据架构外,新建架构采用Pascal样式命名,命名格式为[架构名]。
示例:HumanResources
      Production
 
对数据库对象 Table,View,Procedure,Function等使用数据架构进行归类。在SQL Server 2000中dbo为默认架构。
 
1.3.5.  数据表
采用Pascal样式命名,命名格式为[表名]。
示例:Employee
      Product
 
表名以英文单数命名,主要是参考SQL Server 2005示例数据库,个人理解不采用复数是为了更好的使用ORM工具生成符合编程规范的代码(比如C#)。
示例:使用Product
  而不是Products
 
1.3.6.  数据视图
视图名称采用Pascal样式命名,命名格式为v + [视图名称]。
示例:vEmployee
      vSalesPerson
 
1.3.7.  数据列
列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。采用Pascal样式命名,命名格式为[列名称]。
示例:AddressID
      PostalCode
 
尽量避免使用拼音命名,如果不可避免,对于比较短的列名,采用拼音全写,如果拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表示。
示例:宁波 Ningbo
  经营方式 JingYFS
 
1.3.8.  存储过程
建议采用Pascal样式命名,命名格式为[存储过程名称]。
示例:GetUser
     AddUser
 
备注:在SQL Server 2005示例数据库中使用Camel样式命名。
 
1.3.9.  函数
自定义函数采用Pascal样式命名,命名格式为[函数名],系统函数使用全部大写。
示例:SELECT ISNULL(@LastName,'Unknown last name');
GETDATE()
 
1.3.10.     用户定义数据类型
采用Pascal样式命名,命名格式为[自定义数据类型名称]。
示例:Flag
      NameStyle
 
1.3.11.     DML触发器
DML触发器是当数据库服务器中发生数据操作语言 (DML) 事件时要执行的操作。DML 事件包括对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。根据事件不同命名规则使用前缀进行区分,格式为 [u|i|d] + [表名|视图名]
示例:uEmployee 
  iEmployee
      dEmployee
 
另外一种方式为,
AFTER 触发器:TR_表名_[后面插入加I,修改加U,删除加D]。
INSTEAD OF 触发器:TR_表名或视图名_OF[后面插入加I,修改加U,删除加D]
 
1.3.12.     DDL触发器
响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。
采用Camel样式命名,命名单词能够描述DDL触发器功能。
示例:
CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK ;
 
另外一种方式为添加ddl前缀,
示例:
CREATE TRIGGER [ddlDatabaseTriggerLog] 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS
 
1.3.13.     主键、外键关系和索引
主键: PK_[表名称]_[主键];如果是组合主键,使用PK_[表名]_[主键1]_[主键2]。
示例:PK_Store_CustomerID
  PK_StoreContact_CustomerID_ContactID
外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。
示例:FK_StoreContact_Store_CustomerID
 
聚集索引:PK_[表名称]_[主键];如果是组合主键,使用PK_[表名]_[主键1]_[主键2]。
示例:PK_Store_CustomerID 
  PK_StoreContact_CustomerID_ContactID
 
唯一非聚集索引:AK_[表名称]_[列名称]。
示例:AK_Store_rowguid
 
不唯一非聚集索引:PK_[表名称]_[列名称]。
示例:IX_Store_SalesPersonID
 
主 XML索引:PXML_[表名称]_[Xml类型列名称]。
示例:PXML_Store_Demographics
 
备注:以上命名参考Sql Server 2005示例数据库,一般只需设计器自动生成,不需要额外修改。
 
1.4. 参数命名
1.4.1.  数据列参数
命名格式为 @ + [列名称]。
示例:@EmployeeID
 
在列名不符合Pascal样式时(早期遗留系统),例如使用全部大写的列名称,或使用“_”进行连接的字段名称,参数名称定义使用 @ + [列名称],这里的列名称尽量符合Pascal样式命名。
 
1.4.2.  非数据列参数
在参数无法跟列名称进行关联时,使用能够反映该参数功能的英文单词或单词组合, 采用Pascal样式命名。
示例:@ErrorID
      @Flag
 
1.5. 常见命名
1.5.1.  常用字段命名
这里的常用字段是指在建表时频繁使用的表名或列名,下表对常用字段进行建议性定义,
 
列名称          数据类型             说明
CreatedDate     datetime                纪录创建日期,一般使用GETDATE()自动生成
ModifiedDate        datetime                纪录最后修改日期,首次使用GETDATE()
DeletedDate     datetime                记录删除(标记删除)日期
StartDate       datetime                开始日期
EndDate         datetime                结束日期
StartTime       datetime                开始时间
EndTime         datetime                结束时间
rowguid         uniqueidentifier        唯一标识行的ROWGUIDCOL号,用于支持合并复制
ID              int                 使用