SQL規(guī)范
一、命名規(guī)范
1、整體來說
- 確保名稱是唯一的,并且不作為保留關(guān)鍵字存在。
- 保持長度最多為30個(gè)字節(jié) - 實(shí)際上這是30個(gè)字符,除非您使用多字節(jié)字符集。
- 名稱必須以字母開頭,并且不得以下劃線結(jié)尾。
- 僅在名稱中使用字母,數(shù)字和下劃線。
- 避免使用多個(gè)連續(xù)的下劃線 - 這些可能難以閱讀。
- 避免使用縮寫,如果必須使用它們,確保它們通常被理解。
2、Table
- 使用集體名稱,或者理想情況下,使用復(fù)數(shù)形式。 例如(按優(yōu)先順序)staff 、employees。
- 表格的名稱不要與其中一列名稱相同。
- 避免將兩個(gè)表名連接在一起以創(chuàng)建關(guān)系表的名稱。比如命名為services,而不是cars_mechanics。
3、Column
- 使用單數(shù)名稱。
- 盡可能避免使用id作為表的主要標(biāo)識(shí)符。
- 不要添加與其表名相同的列,反之亦然。
- 始終使用小寫字母,除非有更有意義的合理的名詞。
4、別名或相關(guān)
- 應(yīng)該以某種方式與對(duì)象或表達(dá)式相關(guān)聯(lián),它們是別名。
- 相關(guān)名稱應(yīng)該是對(duì)象名稱中每個(gè)單詞的第一個(gè)字母。
- 如果已經(jīng)存在相同名稱的相關(guān)性,則附加一個(gè)數(shù)字。(s1、s2)
- 對(duì)于計(jì)算數(shù)據(jù)(SUM()或AVG()),使用您給它的名稱,如果它是模式中定義的列。
5、存儲(chǔ)過程
- 名稱必須包含動(dòng)詞。
6、統(tǒng)一后綴
以下后綴具有通用含義,可確保從SQL代碼中輕松讀取和理解列。 在適當(dāng)?shù)牡胤绞褂谜_的后綴。
_id - 唯一標(biāo)識(shí)符,例如作為主鍵的列。
_status-flag值或任何類型的某些其他狀態(tài),例如publication_status。
_total - 值集合的總和或總和。
_num-表示該字段包含任何類型的數(shù)字。
_name-表示名稱,例如first_name。
_seq-包含連續(xù)的值序列。
_date-表示包含某些日期的列。
_tally-一個(gè)計(jì)數(shù)。
_size-文件大小或衣服等大小。
_addr-記錄的地址可以是物理的或無形的,例如ip_addr。
7、具體大小寫
- 數(shù)據(jù)庫名: 小寫,字母之間用下劃線(_)隔開。
- 表名: 小寫,字母之間用下劃線(_)隔開。
- 列名: 小寫,字母之間用下劃線(_)隔開。
- 別名: 小駝峰命名法。
二、查詢語法
1、保留字
始終對(duì)SELECT和WHERE等保留關(guān)鍵字使用大寫。
2、WHITE SPACE
為了使代碼更易于閱讀,使用正確的間距補(bǔ)碼非常重要。 不要擠占代碼或刪除自然語言空間。
(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)
行間距
保持所有關(guān)鍵字與右側(cè)對(duì)齊并且左對(duì)齊的值在查詢中間創(chuàng)建一個(gè)統(tǒng)一的間隙。 它使得快速掃描查詢定義變得更加容易。始終包括換行符/垂直空間:
- 在AND或OR之前
- 分號(hào)后分隔查詢以便于閱讀
- 每個(gè)關(guān)鍵字定義后
- 在將多個(gè)列分隔為邏輯組之后使用逗號(hào)之后
- 將代碼分成相關(guān)部分,這有助于簡化大塊代碼的可讀性。
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、縮進(jìn)
Join
Join應(yīng)縮進(jìn)到河的另一側(cè),并在必要時(shí)與新線組合。
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';
子查詢
子查詢也應(yīng)該與河流的右側(cè)對(duì)齊,然后使用與任何其他查詢相同的樣式進(jìn)行布局。 有時(shí),在與開頭伙伴相同的字符位置的新行上使用右括號(hào)是有意義的 - 在嵌套子查詢的情況下尤其如此。
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');