SQL规范
一、命名规范
1、整体来说
- 确保名称是唯一的,并且不作为保留关键字存在。
- 保持长度最多为30个字节 - 实际上这是30个字符,除非您使用多字节字符集。
- 名称必须以字母开头,并且不得以下划线结尾。
- 仅在名称中使用字母,数字和下划线。
- 避免使用多个连续的下划线 - 这些可能难以阅读。
- 避免使用缩写,如果必须使用它们,确保它们通常被理解。
2、Table
- 使用集体名称,或者理想情况下,使用复数形式。 例如(按优先顺序)staff 、employees。
- 表格的名称不要与其中一列名称相同。
- 避免将两个表名连接在一起以创建关系表的名称。比如命名为services,而不是cars_mechanics。
3、Column
- 使用单数名称。
- 尽可能避免使用id作为表的主要标识符。
- 不要添加与其表名相同的列,反之亦然。
- 始终使用小写字母,除非有更有意义的合理的名词。
4、别名或相关
- 应该以某种方式与对象或表达式相关联,它们是别名。
- 相关名称应该是对象名称中每个单词的第一个字母。
- 如果已经存在相同名称的相关性,则附加一个数字。(s1、s2)
- 对于计算数据(SUM()或AVG()),使用您给它的名称,如果它是模式中定义的列。
5、存储过程
- 名称必须包含动词。
6、统一后缀
以下后缀具有通用含义,可确保从SQL代码中轻松读取和理解列。 在适当的地方使用正确的后缀。
_id - 唯一标识符,例如作为主键的列。
_status-flag值或任何类型的某些其他状态,例如publication_status。
_total - 值集合的总和或总和。
_num-表示该字段包含任何类型的数字。
_name-表示名称,例如first_name。
_seq-包含连续的值序列。
_date-表示包含某些日期的列。
_tally-一个计数。
_size-文件大小或衣服等大小。
_addr-记录的地址可以是物理的或无形的,例如ip_addr。
7、具体大小写
- 数据库名: 小写,字母之间用下划线(_)隔开。
- 表名: 小写,字母之间用下划线(_)隔开。
- 列名: 小写,字母之间用下划线(_)隔开。
- 别名: 小驼峰命名法。
二、查询语法
1、保留字
始终对SELECT和WHERE等保留关键字使用大写。
2、WHITE SPACE
为了使代码更易于阅读,使用正确的间距补码非常重要。 不要挤占代码或删除自然语言空间。
(SELECT f.species_name,
AVG(f.height) AS average_height, AVG(f.diameter) AS average_diameter
FROM flora AS f
WHERE f.species_name = 'Banksia'
OR f.species_name = 'Sheoak'
OR f.species_name = 'Wattle'
GROUP BY f.species_name, f.observation_date)
UNION ALL
(SELECT b.species_name,
AVG(b.height) AS average_height, AVG(b.diameter) AS average_diameter
FROM botanic_garden_flora AS b
WHERE b.species_name = 'Banksia'
OR b.species_name = 'Sheoak'
OR b.species_name = 'Wattle'
GROUP BY b.species_name, b.observation_date)
行间距
保持所有关键字与右侧对齐并且左对齐的值在查询中间创建一个统一的间隙。 它使得快速扫描查询定义变得更加容易。始终包括换行符/垂直空间:
- 在AND或OR之前
- 分号后分隔查询以便于阅读
- 每个关键字定义后
- 在将多个列分隔为逻辑组之后使用逗号之后
- 将代码分成相关部分,这有助于简化大块代码的可读性。
INSERT INTO albums (title, release_date, recording_date)
VALUES ('Charcoal Lane', '1990-01-01 01:01:01.00000', '1990-01-01 01:01:01.00000'),
('The New Danger', '2008-01-01 01:01:01.00000', '1990-01-01 01:01:01.00000');
3、缩进
Join
Join应缩进到河的另一侧,并在必要时与新线组合。
SELECT r.last_name
FROM riders AS r
INNER JOIN bikes AS b
ON r.bike_vin_num = b.vin_num
AND b.engine_tally > 2
INNER JOIN crew AS c
ON r.crew_chief_last_name = c.last_name
AND c.chief = 'Y';
子查询
子查询也应该与河流的右侧对齐,然后使用与任何其他查询相同的样式进行布局。 有时,在与开头伙伴相同的字符位置的新行上使用右括号是有意义的 - 在嵌套子查询的情况下尤其如此。
SELECT r.last_name,
(SELECT MAX(YEAR(championship_date))
FROM champions AS c
WHERE c.last_name = r.last_name
AND c.confirmed = 'Y') AS last_championship_year
FROM riders AS r
WHERE r.last_name IN
(SELECT c.last_name
FROM champions AS c
WHERE YEAR(championship_date) > '2008'
AND c.confirmed = 'Y');
网友评论