SQL编码规范

  • 格式:pdf
  • 大小:154.29 KB
  • 文档页数:6

SQL编码规范

1 ⽬的

为了保证所每个项⽬组编写出的程序都符合相同的规范,便于理解和维护,便于检查、减少出错概率,有助于成员间交流,保证⼀致性、统⼀性⽽建⽴的SQL程序编码规范。

2 范围

该规范适⽤于所有需要基于SQL开发的项⽬。

3 规范内容

3.1 命名规范

3.1.1 总体命名规范

l 名称的长度不超过32个字符。

l 名称采⽤英⽂单词、英⽂单词缩写和数字,单词之间⽤“_”分隔。

说明:除⾮⽤户提供⽂档化的⾏业标准(例如,国标或部颁标准),否则不得违反本规范。

l 数据库对象名称⾸字母必须⼩写。

l 不得采⽤“_”作为名称的起始字母和终⽌字母。

l 名称必须望⽂知意。

l 名称不得与数据库管理系统保留字冲突。

l 不要在对象名的字符之间留空格。

3.1.2 数据库名

l 数据库名定义为系统名+模块名,或直接采⽤系统名。

l 数据库名全部采⽤⼩写。

3.1.3 数据库⽂件

l 数据⽂件命名采⽤数据库名+_+⽂件类型+[⽂件序号].⽂件后缀,⽂件序号为1、2、3…9等数值,当数据库中某⼀⽂件类型的⽂件有多个时加上⽂件序号以区别。只有⼀个时可不加。l ⽂件后缀:主数据⽂件为.mdf,其它数据⽂件为.ndf,⽇志⽂件为.ldf。

l ⽂件名全部采⽤⼩写。

3.1.4 表

表命名要遵循以下原则:l 采⽤“系统名+_+t_+模块名+_+表义名”格式构成。

l 若数据库中只含有单个模块,命名可采⽤“系统名+t_+表义名”格式构成。

l 整个表名的长度不要超过30个字符。

l 系统名、模块名均采⽤⼩写字符。

l 模块名或表义名均以其英⽂单词命名,且字符间不加分割符;表义名中单词的⾸字符⼤写,其它字符⼩写,多个单词间也不加任何分割符,单词全部采⽤单数形式。l 表别名命名规则:取表义名的前3个字符加最后⼀个字符。如果存在冲突,适当增加字符(如取表义名的前4个字符加最后⼀个字符等)。l 关联表命名为Re_表A_表B,Re 是Relative的缩写,表A 和表B均采⽤其表义名或缩写形式。

3.1.5 属性(列或字段)

属性命名遵循以下原则:l 采⽤有意义的列名,为实际含义的英⽂单词,且字符间不加任何分割符。

l 属性名前不要加表名等作为前缀。

l 属性后不加任何类型标识作为后缀。

l 不要使⽤“ID”等与系统保留关键字冲突的单词作为列名。

3.1.6 主键

l 任何表都必须定义主键。

l 表主键命名为:“pk+_+表名(或缩写)+_+主键标识”。

3.1.7 外键

l 表外键命名为:“fk+_+表名(或缩写)+_主表名(或缩写)+_+主键标识”。

3.1.8 索引

l 索引的命名为:“表名(或缩写)+_+列名+_idx”。

l 其中多单词组成的属性列列名取前⼏个单词⾸字符,加末单词组成。

3.1.9 Default 标识

l 由“df+_+”组成。

3.1.10 Rule 标识

l 由“ru+_+”组成。

3.1.11 ⾃定义数据类型

l ⾃定义数据类型由“ud+_+<⾃定义数据类型标识>+_+”组成。

3.1.12 触发器

l AFTER型触发器:

系统名+TR_+_+,其中i,u,d 分别表⽰insert、update和delete。 l INSTEAD OF型触发器:

系统名+TI_++_+,其中i,u,d 分别表⽰insert、update和delete。

3.1.13 视图

l 视图命名以系统名+V_+模块名作为前缀,其他命名规则和表的命名类似。

3.1.14 存储过程

l 存储过程命名由“系统名+SP+_+存储过程标识(缩写)”组成。

l 存储过程标识要以实际含义的英⽂单词构成,并⽤下划线分割各个组成部分。

3.1.15 函数

l 函数命名由“系统名+FUNC+_+函数标识”组成。

3.1.16 变量名

l 参数变量命名采⽤“i (o或io)+_+ 名称”形式,前缀i 或o 表⽰输⼊还是输出参数。

l 过程变量命名采⽤“l+_+名称”形式。 l 变量名采⽤⼩写,若属于词组形式,⽤下划线分隔每个单词。

3.1.17 ⾓⾊

l 全部使⽤⼩写字符命名。

l 由“系统名称+_+role+_+名词(或缩写)或名词短语(或缩写)”组成。

3.1.18 ⽤户

l 全部使⽤⼩写字符命名。

l 由“系统名称+_+user+_+名词(或缩写)或名词短语(或缩写)”组成。

3.2 排版及书写规范

3.2.1 ⼀般性注释

注释可以包含在批处理中。在触发器、存储过程中包含描述性注释将会⼤⼤增加⽂本的可读性和可维护性。l 注释尽可能详细、全⾯。

l 创建每⼀个数据对象前,应具体描述该对象的功能和⽤途。

l 传⼊参数的含义应该有所说明。如果取值范围确定,也应该⼀并说明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。l 注释语法包含两种情况:单⾏注释、多⾏注释。

单⾏注释:注释前有两个连字符(--),最后以换⾏符结束。⼀般对变量、

条件⼦句可以采⽤该类注释。

多⾏注释:符号/*和*/之间的内容为注释内容。对某项完整的操作建议使⽤该类注释。l 注释应当简洁,同时应描述清晰。

3.2.2 函数⽂本注释

l 编写函数⽂本--如视图、函数、触发器、存储过程以及其他数据对象时,必须为每个函数增加适当注释。该注释以多⾏注释为主,主要结构如下:/******************************************************************

*name : --函数名

*function : --函数功能

*input : --输⼊参数

*output : --输出参数

*author : --作者

*CreateDate : --创建时间

*UpdateDate : --函数更改信息(包括作者、时间、更改内容等)

******************************************************************/

CREATE [OR REPLACE] FUNCTION dfsp_xxx…。

l 传⼊参数的含义应该有所说明。如果取值范围确定,也应该⼀并说明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。 l 在每⼀个变量声明之后添加注释。说明该变量的⽤途,通常,简单使⽤单⾏注释。

l 在块的每个主要部分之前添加注释,在块的每个主要部分之前增加注释,解释下—组语句⽬的,最好是说明该段语句及算法的⽬的以及要得到的结果,但不要对其细节进⾏过多的描述。 l 在块和过程的开头注释中还可以增加要访问的数据库等信息。

3.2.3 常⽤SQL语句的编写基本规范

3.2.3.1 CREATE 语句

CREATE TABLE publishers

(

pub_id char(4) NOT NULL --标识

CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED

CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')

OR pub_id LIKE '99[0-9][0-9]'),

pub_name varchar(40) NULL, --名称

city varchar(20) NULL, --城市

state char(2) NULL, --州

country varchar(30) NULL --国家

DEFAULT('USA')

)

3.2.3.2 SELECT语句

查询语句采⽤以下原则编写(可最⼤化重⽤共享池中的SQL语句,提⾼应⽤程序性能): l 将SELECT 语句分为5部分:

由SELECT 开头,后跟⼀个显⽰查询结果的列表;

由FROM 开头,后跟⼀个或多个获取数据所涉及的表;

由WHERE 开头,后跟⼀个或多个确定所需值的条件;

由GROUP BY开头,后跟⼀个或多个表列名,通过这些列以对查询结果进⾏汇总;

由ORDER BY开头,后跟⼀个或多个表列名,通过这些列以对查询结果进⾏排序。 l 每个部分分⾏编写,将每⼀⾏的第⼀个关键字与第⼀⾏的SELECT尾部对齐,如

SELECT col1, col2, col3

FROM table1

WHERE col1 > col2

GROUP BY col1, col2

ORDER BY col1;

l 关键字⽤⼤写,列名和表名采⽤⼩写。

l 语句中嵌⼊逗号时,在逗号后⾯加⼀空格,当逗号是最后⼀个字符时,把它放在本⾏。

l 当语句的同⼀部分要延续到下⼀⾏时,按下列格式排列:

SELECT col1, col2, col3, col4, col5, col6,

col7, col8, col9, col10

l 将语句中WHERE 和AND 部分格式化,书写布局类似于

WHERE

AND

ANDl 当语句中出现括号时,括号的两边不留空格。

l 在SQL语句使⽤运算符时,操作两边应各留⼀个空格,如

WHERE X = Y

AND A = B

AND C = D

3.2.3.3 INSERT语句

INSERT INTO

(, , .., , )

VALUES (, , .., , )

3.2.3.4 UPDATE语句

UPDATE

SET =

3.2.3.5 DELETE语句

DELETE FROM authors

WHERE name = 'McBadden'

3.2.4 条件执⾏语句(IF)编写规范

条件执⾏语句IF…ELSE 按以下格式编写IF

BEGIN

END

[ELSE IF

BEGIN

END]

注:l 若BEGIN…END 之间只包含单独⼀命令⾏,为使代码紧凑,BEGIN和END边界也常省略。

l IF…ELSE 语句可以嵌套,为提⾼代码的可读性,嵌套层次不应多于5 层。

l 当嵌套层次太多时应考虑使⽤CASE 语句。

3.2.5 条件选择语句(CASE)编写规范

条件选择语句CASE…WHEN 按以下格式编写CASE

WHEN THEN

WHEN THEN

[ELSE ]

END