SQL規(guī)范
一队丝、命名規(guī)范
1、整體來說
- 確保名稱是唯一的腹缩,并且不作為保留關(guān)鍵字存在屿聋。
- 保持長(zhǎng)度最多為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)部分惯殊,這有助于簡(jiǎ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');