SQL 脚本详细开发规范文档

1 目的

      本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保证。
 

2 适用范围

     本规划的适用人员范围包括涉及数据库设计与开发的相关技术人员。
 

3 术语约定

    本规范采用以下术语描述:
★规则:也称为强规范是编程时必须强制遵守的原则
★建议:编程时必须加以考虑的原则
★说明:对此规则或建议进行必要的解释
★示例:对此规则或建议从正、反两个方面给出
 

4 规范及建议

4.1 书写规范

4.1.1 SQL书写规范

规则1: 数据库代码中,关键字大写,其他内容小写;
示例:
如下代码不符合规范:(关键字未大写)
select last_name ,job_id
from employees;

如下代码符合规范:
SELECT last_name, job_id
FROM employees;

规则2:程序块应采用缩进风格书写,保证代码可读,风格一致,缩进格数统一为4格;

规则3:代码中需要空位时,统一采用英文空格键输入,不允许用TAB键产生空位;
说明:不同的编辑器对TAB的空位格数设置不一致,会导致使用TAB键产生空位的代码格式混乱;

规则4:同一条语句占用多行时,每一行的开始应是关键字,且关键字应和第一行左对齐,如确实不能从关键字分行,则分行处应对其上一行被分行的同类代码的最左边;
示例:
如下代码不符合规范(分行书写时,其余行未和第一行左对齐)
SELECT last_name,
job_id
FROM employees;

如下代码也不符合规范(分行时,不是从关键字分行)
SELECT last_name,
job_id FROM employees;

如下代码符合规范
SELECT last_name, job_id
FROM employees;

如下代码符合规范
SELECT last_name,
       first_name,
       job_id
FROM employees;

规则5:查询数据时,尽量不使用SELECT *,而是给出明确的字段,但该规则不包括SELECT COUNT()语* 句;
示例
如下语句不符合规范(SELECT操作未给出字段)
SELECT *
FROM employees;

如下语句符合规范
SELECT last_name, first_name
FROM employees;

规则6:INSERT语句应该给出字段列表;
示例
如下语句不符合规范(INSERT操作未给出字段名称)
INSERT INTO employees
VALUES
(
    'GUO',
    'DAVID',
    100
);
如下语句符合规范
INSERT INTO employees
(
    last_name,
    first_name,
    job_id
)
VALUES
(
    'GUO',
    'DAVID',
    100
);

规则7:从表中同一笔记录中获取记录的字段值,须使用一SQL语句得到,不允许分多条SQL语句;
示例
如下语句不符合规范(从同一个表中取出记录,分成两条语句分别扫描)
UPDATE employees_new
SET last_name=
(
    SELECT last_name
    FROM employees
    WHERE job_id = 100
)
WHERE job_id = 100;

UPDATE employees_new
SET first_name =
(
    SELECT first_name
    FROM employees
    WHERE job_id = 100
)
WHERE job_id = 100;

如下语句符合规范
UPDATE employees_new
SET first_name =
(
    SELECT last_name
    FROM employees
    WHERE job_id = 100
),
last_name =
(
    SELECT first_name
    FROM employees
    WHERE job_id = 100
)
WHERE job_id = 100;

规则8:SQL语句中的逗号后面应增加一个空格,以使得代码清晰;
示例
如下代码不符合规范(逗号后面没有空格)
SELECT last_name,job_id
FROM employees;

如下代码符合规则
SELECT last_name, job_id
FROM employees;

规则9:不允许将SQL语句写成一行,再短的SQL也应该在谓词处分行;
示例
如下代码不符合规范(未在谓词部分进行分行)
SELECT last_name, job_id FROM employees WHERE job_id = 1;

如下代码符合规范
SELECT last_name, job_id
FROM employees
WHERE job_id = 1;

规则10:运算符以及比较符左边或者右边只要不是括号,则空一格;
示例
如下代码不符合规范(运算符没有空格)
SELECT CURRENT_DATE+INTERVAL 1 DAY
FROM dual;

如下代码符合规范
SLEECT CURRENT_DATE + (INTERVAL 1 DAY)
FROM dual;

规则11:不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系;
示例
如下代码不符合规范(运算优先级关系易混淆)
SELECT a*b/c+d*e
FROM dual;

如下代码符合规范
SELECT ((a * b) / c) + (d * e)
FROM dual;

规则12:任何SQL书写单行不得超过120字符(含左边的缩进);

建议1:对于INSERT…VALUES和UPDATE语句,一行写一个字段,每个字段相对于INSERT语句空4格,字段后面紧跟注释(注释语句左对齐),VALUES和INSERT左对齐,左括号和右括号与INSERT、VALUES左对齐;
示例:
如下代码不符合建议(字段未和INSERT语句空格)
INSERT INTO sm_user
(
user_id,   --用户ID,主键
user_name, --用户名
login_name --登录名
)
VALUES
(
p_user_id,
p_user_name,
p_login_name
);

如下代码符合建议
INSERT INTO sm_user
(
    user_id,   --用户ID,主键
    user_name, --用户名
    login_name --登录名
)
VALUES
(
    p_user_id,
    p_user_name,
    p_login_name
);

建议2:INSERT…SELECT 语句时,应使每行的字段顺序对应,以每行最多不超过4个字段,以方便代码阅读,括号的内容另起一行缩进4格开始书写,关键字单词左对齐,左括号、右括号另起一行与左对齐;
示例
如下代码不符合建议(字段未和括号分行)
INSERT INTO sm_duty_bak(duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date)
SELECT duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date
FROM sm_duty
WHERE duty_id=88;
如下代码符合建议
INSERT INTO sm_duty_bak
(
    duty_id, duty_name, created_by, creation_date,
    last_updated_by, last_update_date, disable_date
)
SELECT
    duty_id, duty_name, created_by, creation_date,
    last_updated_by, last_update_date, disable_date
FROM sm_duty
WHERE duty_id = 88;

说明:
1.SELECT 语句中每行的字段应与INSERT 语句对应。
2.INSERT 语句中换行的字段名应缩进并与上一行的第一个字段名对齐。
3.SELECT 语句中换行的字段名应缩进并与上一行的第一个字段名对齐。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论