数据库编程规范Word下载.docx
《数据库编程规范Word下载.docx》由会员分享,可在线阅读,更多相关《数据库编程规范Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
《编写可移植的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+_+<
default标识名>
”组成。
2.10Rule标识
由“ru+_+<
Rule标识名>
2.11自定义数据类型
自定义数据类型由“ud+_+<
自定义数据类型标识>
+_+<
数据类型>
2.12触发器
AFTER型触发器
系统名+tr_+<
表名>
_+<
i,u,d的任意组合>
,其中i,u,d分别表示insert、update和delete。
INSTEADOF型触发器系统名+ti_+<
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<
END]
注:
1>
上式若BEGIN…END之间只包含单独一命令行,为使代码紧凑,BEGIN和END边界
也常省略
2>
IF…ELSE语句可以嵌套,为提高代码的可读性,嵌套层次不应多于5层。
当嵌套
层次太多时应考虑使用CASE语句。
3.7.1条件选择语句(CASE)编写规范
条件选择语句CASE…WHEN按以下格式编写
CASE<
运算式>
WHEN<
THEN<
…
[ELSE<
]
或
CASE
3.7.2循环执行语句(WHILE)编写规范
循环执行语句WHILE…CONTINUE…BREAK按以下格式编写
WHILE<
[BREAK]
[CONTI