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+_+<default 标识名>”组成。

3.1.10 Rule 标识

l 由“ru+_+<Rule 标识名>”组成。

3.1.11 自定义数据类型

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

3.1.12 触发器

l  AFTER型触发器:

系统名+TR_+<表名>_+<i,u,d的任意组合>,其中i,u,d 分别表示insert、update和delete。

l  INSTEAD OF型触发器:

系统名+TI_+<表名>+_+<i,u,d的任意组合>,其中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

AND

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

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

WHERE X = Y

AND A = B

AND C = D

3.2.3.3                         INSERT语句

INSERT INTO <要插入的表名>

(<列1>, <列2>, .., <列n-1>, <列n>)

VALUES (<列1值>, <列2值>, .., <列n-1值>, <列n值>)

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

或者

CASE

WHEN <条件表达式> THEN <运算式>

WHEN <条件表达式> THEN <运算式>

[ELSE <运算式>]

END

3.2.6     循环执行语句(WHILE)编写规范

循环执行语句WHILE…CONTINUE…BREAK按以下格式编写

WHILE <条件表达式>

BEGIN

<命令行或程序块>

[BREAK]

[CONTINUE]

<命令行或程序块>

END

SQL编码规范的更多相关文章

  1. PL/SQL编码规范的一些建议

    由于业务的复杂多变,我们编写完的程序,在后期肯定要被修改,而且修改的人很可能不是自己.这种情况我们都遇到过. 而且,看别人的代码可能会觉得很痛苦:为什么他要这样写相关逻辑?为什么变量名称要这样定义?换 ...

  2. SQL 编码规范

    1. 必须对表起别名,方便调查表用了哪些列 比如 select owner,object_id,name from a,b where a.id=b.id; 如果不对表取别名,我怎么知道你访问的列是哪 ...

  3. SQL Server 数据库设计、命名、编码规范

    https://blog.csdn.net/songguozhi/article/details/5858159 SQL Server 数据库设计.命名.编码规范

  4. [转]PHP编码规范

    注:这是10年前的一篇PHP编码规范,最早发布于清华水木BBS,现在好像都找不到完整的版本了,但至今看起来仍是非常有参考意义.个人会根据经验做一些调整.文中对于命名一段的描述极大的曾启发了个人的编程体 ...

  5. Mod4-PHP编码规范

    loading... 归纳总结了能找到的一些编码规范,形成自己所需要的编码规范. 参考网址:1.2 一.文件格式 缩进使用四个空格,不使用制表符.左花括号不另起一行. if (1 == $x) { $ ...

  6. Discuz! 的编码规范

    http://open.discuz.net/?ac=document&page=dev_coderule 前言 本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形 ...

  7. 推荐的PHP编码规范

    推荐的PHP编码规范 发布时间: 2014-05-7 浏览次数:2754 分类: PHP教程 推荐的PHP编码规范 一 编辑器设置 1. 使用Tab缩进,不要使用空格 鉴于很多编辑器在保存文件时会自动 ...

  8. hdwiki 编码规范

    编码规范         命名规范 1.1.主要的目录 control 里面是控制类 ,前台命名为something.php,则后台对应的是admin_+前台名称,名称应选有意义的英文单词,例如 前台 ...

  9. JavaEE程序编码规范

    JavaEE程序编码规范 目   录 JAVA程序编码规范1 1变量的命名规则1 1.1常量(包含静态的)1 1.2类变量(静态变量)及实例变量1 1.3局部变量1 1.4参数2 1.5其它2 2方法 ...

随机推荐

  1. 【BZOJ2927】[Poi1999]多边形之战 博弈

    [BZOJ2927][Poi1999]多边形之战 Description 多边形之战是一个双人游戏.游戏在一个有n个顶点的凸多边形上进行,这个凸多边形的n-3条对角线将多边形分成n-2个三角形,这n- ...

  2. JPA的坑多服务主键重复

    配置如下 @Id @GeneratedValue(generator="generator") @GenericGenerator(name="generator&quo ...

  3. 170214、mybatis一级和二级缓存

    mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求, 那么直接从内存中读数数据而不是从数据库读取. 其中数据的生 ...

  4. jQuery与Zepto

    jQuery和Zepto是我比较常用的插件.其实用法差不太多,可以说Zepto是jQuery的轻量级替代品,但是不要认为Zepto就没有jQuery好用,因为Zepto有jQuery没有的功能,就是移 ...

  5. 使用synergyc共享键鼠

    通常情况下我们经常同时操作两台或者多台电脑, 这样就会存在多个键盘鼠标来回切换的问题. 那么我们主要的目标就是怎么在多个电脑上共享一套键盘鼠标,而且可以轻松的来回切换呢. 网上有很多的解决方案,这里我 ...

  6. 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容 1.nametuple:(命名元组,本质还是元组) 命名元组=>类似创建了一个类 结构化时间其实是个命名元组 2.os 主要是针对操作系统的 一般用来操作文件系统 os.mak ...

  7. 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id

    有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ...

  8. JVM虚拟机—JVM的类加载机制

    1 什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  9. RTSP客户端接收存储数据(live555库中的testRTSPClient实例)

    1.testRTSPClient简介 testRTSPClient是个简单的客户端实例,这个实例对rtsp数据交互作了详细的描述,其中涉及到rtsp会话的两个概念Source和Sink. Source ...

  10. JSP页面退出时清除会话Session

    我们用一个quit.jsp来处理用户退出系统的操作,quit.jsp负责注销session,及时释放资源. 注销session. 关闭浏览器窗口. 其代码如下所示: <%@ page conte ...