SQL樣式指南 SQL Style Guide

上傳人:ta****fu 文檔編號(hào):210920316 上傳時(shí)間:2023-05-18 格式:DOCX 頁(yè)數(shù):11 大?。?5.21KB
收藏 版權(quán)申訴 舉報(bào) 下載
SQL樣式指南 SQL Style Guide_第1頁(yè)
第1頁(yè) / 共11頁(yè)
SQL樣式指南 SQL Style Guide_第2頁(yè)
第2頁(yè) / 共11頁(yè)
SQL樣式指南 SQL Style Guide_第3頁(yè)
第3頁(yè) / 共11頁(yè)

下載文檔到電腦,查找使用更方便

9.98 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《SQL樣式指南 SQL Style Guide》由會(huì)員分享,可在線閱讀,更多相關(guān)《SQL樣式指南 SQL Style Guide(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、SQL樣式指南 · SQL Style Guide Overview 綜述 你可以直接使用這些指導(dǎo)方針,或者fork后創(chuàng)建自己的版本——最重要的是選擇一套方針并嚴(yán)格遵守它。歡迎通過(guò)提交issue或pull request來(lái)提交建議或修復(fù)bug。 為了讓閱讀了Joe Celko的《SQL ProgrammingStyle》的團(tuán)隊(duì)能更容易采用這套規(guī)則, 這套原則被設(shè)計(jì)成與該書(shū)的兼容的形式。該指南在某些領(lǐng)域嚴(yán)格一些,在另一些領(lǐng)域松懈一些。 當(dāng)然該指南比Celko的書(shū)更簡(jiǎn)潔一些,因?yàn)镃elko的書(shū)包含了一些趣聞和每一條原則后的理由。 將該文檔的Markdown format格式添加

2、到項(xiàng)目代碼庫(kù)中或?qū)⒃擁?yè)面的鏈接發(fā)送給所有項(xiàng)目的參與者要比傳閱實(shí)體書(shū)容易得多。 Simon Holywell所著的《SQL樣式指南》以署名-相同方式共享 4.0 國(guó)際協(xié)議發(fā)布,改編自sqlstyle.guide。 General 一般原則 Do 應(yīng)該做的事情 · 使用一致的、敘述性的名稱。 · 靈活使用空格和縮進(jìn)來(lái)增強(qiáng)可讀性。 · 存儲(chǔ)符合ISO-8601標(biāo)準(zhǔn)的日期格式(YYYY-MM-DD HH:MM:SS.SSSSS)。 · 最好使用標(biāo)準(zhǔn)SQL函數(shù)而不是特定供應(yīng)商的函數(shù)以提高可移植性。 · 保證代碼簡(jiǎn)潔明了并消除多余的SQL——比如非必要的引號(hào)或括號(hào),或者可以推導(dǎo)出的

3、多余WHERE語(yǔ)句。 · 必要時(shí)在SQL代碼中加入注釋。優(yōu)先使用C語(yǔ)言式的以/*開(kāi)始以*/結(jié)束的塊注釋,或使用以--開(kāi)始的行注釋。 Avoid 應(yīng)避免的事情 · 駝峰命名法——它不適合快速掃描。 · 描述性的前綴或匈牙利命名法比如sp_或tbl。 · 復(fù)數(shù)形式——盡量使用更自然的集合術(shù)語(yǔ)。比如,用“staff”替代“employees”,或用“people”替代“individuals”。 · 需要引用號(hào)的標(biāo)識(shí)符——如果你必須使用這樣的標(biāo)識(shí)符,最好堅(jiān)持用SQL92的雙引號(hào)來(lái)提高可移植性。 · 面向?qū)ο缶幊痰脑瓌t不該應(yīng)用到結(jié)構(gòu)化查詢語(yǔ)言或數(shù)據(jù)庫(kù)結(jié)構(gòu)上。 Namin

4、g conventions 命名慣例 General 一般原則 · 保證名字獨(dú)一無(wú)二且不是保留字。 · 保證名字長(zhǎng)度不超過(guò)30個(gè)字節(jié)。 · 名字要以字母開(kāi)頭,不能以下劃線結(jié)尾。 · 只在名字中使用字母、數(shù)字和下劃線。 · 不要在名字中出現(xiàn)連續(xù)下劃線——這樣很難辨認(rèn)。 · 在名字中需要空格的地方用下劃線代替。 · 盡量避免使用縮寫詞。使用時(shí)一定確定這個(gè)縮寫簡(jiǎn)明易懂。 Tables 表名 · 用集群名稱,或在不那么理想的情況下,復(fù)數(shù)形式。如staff和employees。 · 不要使用類似tbl或其他的描述性的前綴或匈牙利命名法。 · 表不應(yīng)該同它的列同名,

5、反之亦然。 · 盡量避免連接兩個(gè)表的名字作為關(guān)系表(relationship table)的名字。與其使用cars_mechanics做表名不如使用services。 Columns 列名 · 總是使用單數(shù)形式。 · 避免直接使用id做表的主標(biāo)識(shí)符。 · 避免列名同表名同名,反之亦然。 · 總是使用小寫字母,除非是特殊情況,如專有名詞。 Aliasing or correlations 別名與關(guān)聯(lián)名 · 應(yīng)該與它們別名的對(duì)象或與它們代表的表達(dá)式相關(guān)聯(lián)。 · 一般來(lái)說(shuō),關(guān)聯(lián)名應(yīng)該是對(duì)象名的第一個(gè)字母。 · 如果已經(jīng)有相同的關(guān)聯(lián)名了,那么在關(guān)聯(lián)名后加一個(gè)數(shù)字。 · 總

6、是加上AS關(guān)鍵字,因?yàn)檫@樣的顯示聲明易于閱讀。 · 為計(jì)算出的數(shù)據(jù)命名時(shí),用一個(gè)將這條數(shù)據(jù)存在表里時(shí)會(huì)使用的列名。 Stored procedures 過(guò)程名 · 名字一定要包含動(dòng)詞。 · 不要附加sp_或任何其他這樣的敘述性前綴或使用匈牙利表示法。 Uniform suffix 統(tǒng)一的后綴 下列后綴有統(tǒng)一的意義,能保證SQL代碼更容易被理解。在合適的時(shí)候使用正確的后綴。 · _id?獨(dú)一無(wú)二的標(biāo)識(shí)符,如主鍵。 · _status?標(biāo)識(shí)值或任何表示狀態(tài)的值,比如publication_status。 · _total?總和或某些值的和。 · _num?表示該

7、域包含數(shù)值。 · _name?表示名字。 · _seq?包含一系列數(shù)值。 · _date?表示該列包含日期。 · _tally?計(jì)數(shù)值。 · _size?大小,如文件大小或服裝大小。 · _addr?地址,有形的或無(wú)形的,如ip_addr Query syntax 查詢語(yǔ)句 Reserved words 保留字 保留字總是大寫,如SELECT和WHERE。 最好使用保留字的全稱而不是簡(jiǎn)寫,用ABSOLUTE而不用ABS。 當(dāng)標(biāo)準(zhǔn)ANSI SQL關(guān)鍵字能完成相同的事情時(shí),不要使用數(shù)據(jù)庫(kù)服務(wù)器相關(guān)的關(guān)鍵字,這樣能增強(qiáng)可移植性。 White s

8、pace 空白字符 正確地使用空白字符對(duì)清晰的代碼十分重要。不要把代碼堆再一起或移除自然語(yǔ)言中的空格。 Spaces 空格 用空格使根關(guān)鍵字都結(jié)束在同一列上。在代碼中形成一個(gè)從上到下的“川流”,這樣幫助讀者快速掃描代碼并將關(guān)鍵字和實(shí)現(xiàn)細(xì)節(jié)分開(kāi)。川流在排版時(shí)應(yīng)該避免,但是對(duì)書(shū)寫SQL語(yǔ)句是有幫助的。 注意WHERE和FROM等關(guān)鍵字,都右對(duì)齊,而真實(shí)的列名都左對(duì)齊。 注意下列情況總是加入空格: · 在等號(hào)前后(=) · 在逗號(hào)后(,) · 單引號(hào)前后('),除非單引號(hào)后面是括號(hào)、逗號(hào)或分號(hào) Line spacing 換行 總是換行的情況:

9、 · 在AND或OR前。 · 在分號(hào)后(分隔語(yǔ)句以提高可讀性)。 · 在每個(gè)關(guān)鍵詞定以后。 · 將多個(gè)列組成一個(gè)邏輯組時(shí)的逗號(hào)后。 · 將代碼分隔成相關(guān)聯(lián)的多個(gè)部分,幫助提高大段代碼的可讀性。 讓所有的關(guān)鍵字右對(duì)齊,讓所有的值左對(duì)齊,在查詢語(yǔ)句中間留出一個(gè)空隙。這樣能提高速讀代碼的速讀。 Identation 縮進(jìn) 為確保SQL的可讀性,一定要遵守下列規(guī)則。 Joins Join語(yǔ)句 Join語(yǔ)句應(yīng)該縮進(jìn)到川流的另一側(cè)并在必要的時(shí)候添加一個(gè)換行。 Subqueries 子查詢 子查詢應(yīng)該在川流的右側(cè)對(duì)齊并使用其他查詢相同的樣式。有時(shí)

10、候?qū)⒂依ㄌ?hào)單獨(dú)置于一行并同與它配對(duì)的左括號(hào)對(duì)齊是有意義的——尤其是當(dāng)存在嵌套子查詢的時(shí)候。 Preferred formalisms 推薦的形式 · 盡量使用BETWEEN而不是多個(gè)AND語(yǔ)句。 · 同樣地,使用IN()而不是多個(gè)OR語(yǔ)句。 · 當(dāng)數(shù)據(jù)輸出數(shù)據(jù)庫(kù)時(shí)需要處理時(shí),使用CASE表達(dá)式。CASE語(yǔ)句能嵌套形成更復(fù)雜的邏輯結(jié)構(gòu)。 · 盡量避免UNION語(yǔ)句和臨時(shí)表。如果數(shù)據(jù)庫(kù)架構(gòu)能夠不靠這些語(yǔ)句運(yùn)行,那么多數(shù)情況下它就不應(yīng)該依靠這些語(yǔ)句。 Create syntax 創(chuàng)建語(yǔ)句 聲明模式信息時(shí)維護(hù)可讀代碼也很重要。所以列定義的順序和分組一定要有意義。

11、 在CREATE定義中,每列要縮進(jìn)4個(gè)空格。 Choosing data types 選擇數(shù)據(jù)類型 · 盡量不使用供應(yīng)商相關(guān)的數(shù)據(jù)類型——這些類型可不能能在老系統(tǒng)上使用。 · 只在真的需要浮點(diǎn)數(shù)運(yùn)算的時(shí)候才使用REAL和FLOAT類型,否則使用NUMERIC和DECIMAL類型。浮點(diǎn)數(shù)舍入誤差是個(gè)麻煩。 Specifying default values 指定默認(rèn)類型 · 默認(rèn)值一定與列的類型相同——如果一個(gè)列的類型是DECIMAL那么就不要使用INTEGER類型作為默認(rèn)值。 · 默認(rèn)值要緊跟類型聲明并在NOT NULL聲明前。 約束和鍵 約束和鍵是

12、構(gòu)成數(shù)據(jù)庫(kù)系統(tǒng)的重要組成部分。它們能很快地變得難以閱讀和理解,所以遵從指導(dǎo)方針是很重要的。 Choosing keys 選擇鍵 設(shè)計(jì)時(shí)應(yīng)該謹(jǐn)慎選擇構(gòu)成鍵的列,因?yàn)殒I既明顯影響著性能和數(shù)據(jù)完整性。 1. 鍵在某種程度上應(yīng)該是獨(dú)一無(wú)二的。 2. 該值在不同表中的類型應(yīng)該相同并且盡量不會(huì)更改。 3. 該值是否會(huì)無(wú)法通過(guò)某種標(biāo)準(zhǔn)格式(如ISO發(fā)布的標(biāo)準(zhǔn))?如 4. 盡量讓鍵保持簡(jiǎn)單,但在適當(dāng)情況下不要害怕使用復(fù)合鍵。 以上是定義數(shù)據(jù)庫(kù)時(shí)合乎邏輯的平衡做法。當(dāng)需求變更時(shí),鍵也應(yīng)該根據(jù)情況更新。 Defining constraints 定義約束 確定鍵后,就可以用約

13、束和字值段驗(yàn)證來(lái)定義它們。 General 概述 · 表至少需要一個(gè)鍵來(lái)保證其完整性和可用性。 · 約束應(yīng)該有名字,除了UNIQUE、PRIMARY KEY和FOREIGN KEY之外。 Layout and order 布局和順序 · 在CREATE TABLE語(yǔ)句后先定義主鍵。 · 約束的定義應(yīng)該緊跟它相應(yīng)的列的定義后。 · 如果該約束與多個(gè)列相關(guān),那么讓它盡量離與其相關(guān)的列距離越近越好。實(shí)在不行就講它放在表定義的最后。 · 如果是與整個(gè)表相關(guān)聯(lián)表級(jí)別的約束,那么就將放在表的定義的最后。 · 按照字母順序安排定義,ON DELETE排在ON UPDATE前。 ·

14、 有道理的話,把所有相關(guān)的語(yǔ)句對(duì)齊。比如,把所有NOT NULL定義對(duì)齊到同一列。雖然這樣的做法有些慢,但是能提高可讀性。 Validation 校驗(yàn) · 用LIKE和SIMILAR TO約束來(lái)保證格式已知字符串的數(shù)據(jù)完整性。 · 當(dāng)數(shù)字的值的范圍可以確定時(shí),用CHECK()來(lái)防止錯(cuò)誤的值進(jìn)入數(shù)據(jù)庫(kù)或被錯(cuò)誤地轉(zhuǎn)換。大部分情況下至少要確認(rèn)值要大于零。 · CHECK()約束應(yīng)該在單獨(dú)的語(yǔ)句中以便debug。 Example: Design to avoid · 面向?qū)ο笤O(shè)計(jì)思想并不適用于關(guān)系型數(shù)據(jù)庫(kù)——避免這個(gè)陷阱。 · 將值存入一列并將單位存在另一列。列的定義應(yīng)該讓自己的單位不言自明以避免在應(yīng)用內(nèi)進(jìn)行合并。使用CHECK()來(lái)保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)是合法的。 · EAV (Entity Attribute Value)表——用特殊的產(chǎn)品來(lái)處理無(wú)模式數(shù)據(jù)。 · 因?yàn)槟承┰颍ㄈ鐬榱藲w檔、為了劃分跨國(guó)公司的區(qū)域)將能合并在一起的表分開(kāi)。這樣的設(shè)計(jì)導(dǎo)致以后必須使用UNION操作而不能直接查詢一個(gè)表。

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!