數(shù)據(jù)庫高級(jí)操作——規(guī)范

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');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容