一般原则
- SQL不区分大小写。但是我们在写代码时应该保持风格的统一。建议保留字大写。
- 灵活使用空格和缩进来增强可读性。
- 存储符合ISO-8601标准的日期格式(
YYYY-MM-DD HH:MM:SS.SSSSS
)。 - 必要时在SQL代码中加入注释。优先使用C语言式的以
/*
开始,以*/
结束的块注释,或使用以--
开始的行注释。
命名规范
一般原则
- 保证名字独一无二且不是保留字。
SQL的保留字很多,如SELECT
,WHERE
等。全部保留字。 - 保证名字长度不超过30个字节。
- 名字要以字母开头,不能以下划线结尾。
- 只在名字中使用字母、数字和下划线。
- 不要在名字中出现连续下划线,这样很难辨认。
- 在名字中需要空格的地方用下划线代替。如
student_id
- 尽量避免使用缩写词。使用时一定确定这个缩写简明易懂。
- 复数形式——尽量使用更自然的集合术语。比如,用“staff”替代“employees”,或用“people”替代“individuals”。
数据库名
小写,字母之间用下划线(_)隔开。
表名
- 小写,字母之间用下划线(
_
)隔开。 - 尽量使用集群名称,如上述中复数形式中说到的
staff
。 - 表和其中的列尽量不要重名。
- 尽量避免连接两个表的名字作为关系表(relationship table)的名字。
列名
- 小写,字母之间用下划线(
_
)隔开。 - 总是使用单数形式。
- 避免直接使用id做表的主标识符。
- 总是使用小写字母,除非是特殊情况,如专有名词。
别名与关联名
- 小驼峰命名法。
- 应该与它们别名的对象或与它们代表的表达式相关联。
- 一般来说,关联名应该是对象名的第一个字母。
- 如果已经有相同的关联名了,那么在关联名后加一个数字。
- 总是加上
AS
关键字,因为这样的显示声明易于阅读。
统一的后缀
下列后缀有统一的意义,能保证SQL代码更容易被理解。在合适的时候使用正确的后缀。
后缀 | 描述 |
---|---|
_id |
独一无二的标识符,如主键。 |
_status |
标识值或任何表示状态的值,比如publication_status 。 |
_total |
总和或某些值的和。 |
_num |
表示该域包含数值。 |
_name |
表示名字。 |
_seq |
包含一系列数值。 |
_date |
表示该列包含日期。 |
_tally |
计数值。 |
_size |
大小,如文件大小或服装大小。 |
_addr |
地址,有形的或无形的,如ip_addr 。 |
代码排版促进可读性
空格
用空格使根关键字都结束在同一列上。在代码中形成一个从上到下的“川流”,这样帮助读者快速扫描代码并将关键字和实现细节分开。
下列情况总是加入空格:
- 在等号前后(
=
) - 在逗号后(
,
) - 单引号前后(
'
),除非单引号后面是括号、逗号或分号
换行
需要换行的情况:
- 在
AND
或OR
前。 - 在分号后(分隔语句以提高可读性)。
- 在每个关键词后。
- 将多个列组成一个逻辑组时的逗号后。
- 将代码分隔成相关联的多个部分,帮助提高大段代码的可读性。
缩进
- Join语句应该缩进到川流的右侧对齐并在必要的时候添加一个换行。
- 子查询应该在川流的右侧对齐并使用其他查询相同的样式。
综合例子:
CREATE VIEW student_subject_score AS
SELECT s2.name, s3.subject, s3.teacher, s1.score
FROM score AS s1
INNER JOIN student AS S2
ON s1.student_id = s2.id
INNER JOIN subject AS s3
ON s1.subject_id = s3.id;
其他
- 尽量使用
BETWEEN
而不是多个AND
语句。 - 同样地,使用
IN()
而不是多个OR
语句。 - 尽量避免
UNION
语句和临时表。