SQL 规范

一、命名规范

  • 确保名称是唯一的,并且不作为保留关键字存在 。
  • 名称必须以字母开头,并且不得以下划线结尾。
  • 名称中只包含字母,数字和下划线。
  • 在使用空格的地方用下划线代替,但要避免使用很多个连续的下划线 。
  • 避免使用缩写,使用时要确保它们可以被理解。

1. 表

  • 使用集合性的名字,或者使用复数形式。
  • 不要给表格与其中一列相同的名称。
  • 在可能的情况下,避免将两个表名连接在一起以创建关系表的名称。
  • 使用小写字母。

2. 列

  • 始终使用单数名称。
  • 尽可能避免简单地使用id作为表的主要标识符。
  • 不要添加与其表名相同的列。
  • 使用小写字母。

3. 别名

  • 别名应该以某种方式与对象或表达式相关联。
  • 根据经验,别名应该是对象名称中每个单词的第一个字母。
  • 如果已经存在相同的别名,则增加一个数字。
  • 始终包含AS关键字,使其更易于阅读,因为它是明确的。
  • 对于计算数据(SUM()或AVG()),使用会作为表中一列的名字。
SELECT first_name AS fn
  FROM staff AS s1
  JOIN students AS s2
    ON s2.mentor_id = s1.staff_num;

4. 统一后缀

后缀具有通用含义,可确保从SQL代码中轻松读取和理解列。在适当的地方使用正确的后缀。以下为一些例子。

  • _id:一个唯一标识符,例如作为主键的列。
  • _status:标志值或任何类型的其他状态。
  • _total:一组值的总和。
  • _name:标识一个名字。
  • _date:表示包含某些日期的列。

二、查询语法

1. 保留字

  • 保留关键字始终使用大写字母,例如SELECT和WHERE。

2. 空格

为了使代码更易于阅读,正确地补充空格非常重要。不要挤占代码或删除自然语言空间。应该使用空格来排列代码,以便使关键字都在同一个字符边界上结束。如上面例子所示。请注意SELECT,FROM等是右对齐,而实际的列名和实施的具体细节都是左对齐。

总是包含空格的地方:

  • 等号(=)前面和后面;
  • 逗号(,)后面 ;
  • 周围的引号(')不在括号内或后面跟着逗号或分号。

3. 换行

需要换行的地方:

  • AND或OR之前;
  • 在分号后进行分隔以方便阅读;
  • 每个关键字定义后;
  • 在将多个列分隔为逻辑组时的逗号之后;
  • 将代码分成相关部分,这有助于简化大块代码的可读性。
SELECT a.title,
       a.release_date, a.recording_date, a.production_date
  FROM albums AS a
 WHERE a.title = 'Charcoal Lane'
    OR a.title = 'The New Danger';

4. 缩进

为确保SQL可读,遵循缩进标准非常重要。

joins
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 MAX(score)
  FROM score
 WHERE subject_id = 
       (SELECT id
          FROM subject
         WHERE subject = '语文');
首选形式
  • 尽可能利用BETWEEN而不是将多个语句组合在一起AND。
  • 使用IN()而不是多个OR子句。
  • 在离开数据库之前需要解释值时使用CASE 表达式。CASE语句可以嵌套以形成更复杂的逻辑结构。
  • UNION尽可能避免使用条款和临时表。如果可以优化架构以消除对这些功能的依赖,则很可能应该这样做。
SELECT CASE postcode
       WHEN 'BN1' THEN 'Brighton'
       WHEN 'EH1' THEN 'Edinburgh'
       END AS city
  FROM office_locations
 WHERE country = 'United Kingdom'
   AND opening_time BETWEEN 8 AND 9
   AND postcode IN ('EH1', 'BN1', 'NN1', 'KW1')

三、创建语法

1. 选择数据类型

  • 在可能的情况下,请勿使用特定于供应商的数据类型,这些数据类型不可移植,并且可能在同一供应商软件的旧版本中不可用。
  • 仅在浮点数学是绝对必要的情况下使用REAL或FLOAT类型,否则在任何时候都更倾向于使用NUMERIC和DECIMAL,浮点舍入错误令人讨厌。

2. 指定默认值

  • 默认值必须与列的类型相同,如果声明了列DECIMAL,则不提供INTEGER默认值。
  • 默认值必须遵循数据类型声明,并且在任何NOT NULL语句之前 。

3. 约束和键

确定将在定义中形成键的列应该是经过仔细考虑的活动,因为它会影响性能和数据完整性。

  • 键在某种程度上应该是独一无二的。
  • 值的数据类型的一致性以及未来这种变化的可能性较低。
  • 保持键尽可能简单,同时不要害怕在必要时使用联合键。

这是在数据库定义中执行的合理且经过考虑的平衡行为。如果将来需求发生变化,可以对定义进行更改来更新。

  • 表必须至少有一个键才能完整且有用。
  • 首先在CREATE TABLE语句后面指定主键。

你可能感兴趣的:(SQL 规范)