第1章 名稱與數據元素 1
1.1 名稱 2
1.1.1 注意名稱長度 2
1.1.2 在名稱中避免使用所有特殊字符 3
1.1.3 避免使用引號分隔標識符 4
1.1.4 實施大寫規則以避免大小寫區分問題 5
1.2 遵循ISO-11179標準命名規範 6
1.2.1 SQL的ISO-11179 7
1.2.2 抽象級彆 8
1.2.3 避免使用描述性前綴 9
1.2.4 製定標準化的後綴 11
1.2.5 錶和視圖名稱應當是遵循業界標準的、集閤、類或復數名稱 13
1.2.6 相關名基本上也要遵循與其他名稱相同的命名規則 14
1.2.7 關係錶名應當是常用描述術語 15
1.2.8 元數據模式訪問對象的名稱可以包含結構信息 16
1.3 命名數據元素時遇到的問題 16
1.3.1 避免模糊名稱 16
1.3.2 避免名稱在不同的地方改變 17
1.3.3 不要使用專有暴露的物理定位符 19
第2章 字體、標點和間距 21
2.1 版式與代碼 21
2.1.1 名稱中隻使用大小寫字母、數字和下劃綫 23
2.1.2 列名、參數和變量等標量小寫 23
2.1.3 模式對象名首字母大寫 23
2.1.4 保留字大寫 24
2.1.5 避免使用駝峰命名法 26
2.2 單詞間距 27
2.3 遵循規範標點規則 27
2.4 使用完全保留字 29
2.5 如果在使用的SQL産品中有標準保留字,就不要使用專有保留字 30
2.6 如果有標準語句,就不要使用專有語句 31
2.7 疏排版麵的隔空白道和垂直間距 33
2.8 縮進 34
2.9 使用行間距將語句分組 35
第3章 數據定義語言 37
3.1 將默認值放到閤適的地方 37
3.2 默認值的類型應當與列的類型相同 38
3.3 不要使用專有數據類型 38
3.4 將PRIMARY KEY聲明放在CREATE TABLE語句的開頭 40
3.5 將列按照邏輯順序排列並按照邏輯組聚閤 40
3.6 將參考約束和操作在數據類型下麵縮進 41
3.7 在産品代碼中為約束命名 41
3.8 將CHECK()約束放在所檢查的內容附近 42
3.8.1 對數值考慮使用範圍約束 42
3.8.2 對於字符值考慮使用LIKE和SIMILAR TO約束 43
3.8.3 時間值是有長短的 43
3.8.4 避免使用REAL和FLOAT數據類型 43
3.9 將多列約束盡可能靠近這些列 43
3.10 將錶級彆的CHECK()約束放到錶聲明的最後 44
3.11 對多錶約束使用CREATE ASSERTION 44
3.12 使CHECK()約束的目的唯一 45
3.13 每個錶都必須有鍵纔能稱為錶 45
3.13.1 自動編號不是關係型鍵 47
3.13.2 文件不是錶 47
3.13.3 鍵的屬性 49
3.14 不要分割屬性 56
3.14.1 分割為多個錶 56
3.14.2 分割為多個列 56
3.14.3 分割為多個行 58
3.15 不要對RDBMS使用麵嚮對象的設計 59
3.15.1 錶不是對象實例 60
3.15.2 對RDBMS不要使用EAV設計 61
第4章 尺度與測量 63
4.1 測度論 63
4.1.1 範圍與顆粒度 65
4.1.2 範圍 65
4.1.3 顆粒度、準確度和精度 65
4.2 尺度類型 66
4.2.1 名義尺度 66
4.2.2 種類尺度 67
4.2.3 絕對尺度 67
4.2.4 順序尺度 68
4.2.5 級彆尺度 69
4.2.6 間距尺度 69
4.2.7 比例尺度 69
4.3 使用尺度 70
4.4 尺度轉換 71
4.5 導齣單位 72
4.6 標點與標準單位 73
4.7 在數據庫中使用尺度的一般準則 74
第5章 數據編碼方案 77
5.1 不好的編碼方案 77
5.2 編碼方案類型 80
5.2.1 枚舉編碼 80
5.2.2 測量編碼 80
5.2.3 縮寫編碼 81
5.2.4 算法編碼 81
5.2.5 層次編碼 82
5.2.6 嚮量編碼 83
5.2.7 拼接編碼 84
5.3 設計編碼方案的一般準則 85
5.3.1 現有的編碼標準 85
5.3.2 允許擴展 85
5.3.3 使用顯式的丟失值避免NULL 86
5.3.4 為終端用戶轉換編碼 86
5.3.5 在數據庫中保存編碼 89
5.4 多字符集 90
第6章 編碼選擇 91
6.1 選擇標準構造,不要選擇專有構造 92
6.1.1 使用標準OUTER JOIN語法 93
6.1.2 中綴INNER JOIN和CORSS JOIN語法是可選的,但是很好用 97
6.1.3 使用ISO時間語法 98
6.1.4 使用標準和可移植的函數 99
6.2 選擇緊湊格式,不要選擇鬆散格式 99
6.2.1 避免使用多餘的括號 100
6.2.2 使用CASE係列錶達式 101
6.2.3 避免使用冗餘錶達式 103
6.2.4 尋找緊湊格式 104
6.3 使用注釋 107
6.3.1 存儲過程 108
6.3.2 控製語句注釋 108
6.3.3 對子句的注釋 109
6.4 避免優化器提示 109
6.5 觸發器的優先級不應當高於DRI操作 109
6.6 使用SQL存儲過程 111
6.7 避免在數據庫中使用用戶定義函數和擴展 112
6.7.1 多語言問題 112
6.7.2 可移植性問題 113
6.7.3 優化問題 113
6.8 避免使用過度的輔助索引 113
6.9 避免使用關聯子查詢 114
6.10 避免使用UNION 115
6.11 測試SQL 118
6.11.1 測試NULL所有可能的組閤 118
6.11.2 檢查並測試所有的CHECK()約束 118
6.11.3 注意字符列 118
6.11.4 測試大小 119
第7章 如何使用視圖 121
7.1 視圖的命名規範與錶一樣 123
7.2 視圖提供行和列級彆的安全性 124
7.3 視圖確保瞭有效訪問路徑 125
7.4 視圖對用戶隱藏瞭復雜性 125
7.5 視圖確保瞭正確的數據派生 127
7.6 視圖將錶和/或列重新命名 127
7.7 視圖實施復雜的完整性約束 127
7.8 可更新的視圖 130
7.8.1 WITH CHECK OPTION子句 130
7.8.2 INSTEAD OF觸發器 131
7.9 每個視圖都要有創建的原因 131
7.10 避免視圖的數量快速增長 132
7.11 將視圖與基錶同步 132
7.12 不恰當地使用視圖 133
7.12.1 用於域支持的視圖 133
7.12.2 單個解決方案的視圖 134
7.12.3 不要為每個基錶都創建視圖 135
7.13 學習使用物化的視圖 135
第8章 如何編寫存儲過程 137
8.1 大多數SQL 4GL都不是用於應用程序的 138
8.2 基本軟件工程 138
8.2.1 內聚 139
8.2.2 耦閤 140
8.3 使用傳統的結構化編程 141
8.4 避免可移植性問題 143
8.4.1 避免創建臨時錶 143
8.4.2 避免使用遊標 144
8.4.3 麵嚮集閤的構造優於過程化代碼 146
8.5 標量與結構化參數的對比 151
8.6 避免使用動態SQL 152
8.6.1 性能 152
8.6.2 SQL注入 153
第9章 試探法 155
9.1 將規格說明錶達為清晰的語句 156
9.2 在名詞的後麵加上“……的集閤” 156
9.3 從問題語句中刪除行為動詞 157
9.4 仍然可以使用存根 157
9.5 不要擔心數據的顯示 160
9.6 第一次嘗試需要特彆處理 160
9.6.1 不要捨不得扔掉你對DDL的第一次嘗試 161
9.6.2 保存你對DML的第一次嘗試 161
9.7 不要以方框和箭頭的方式思考 162
9.8 畫圓圈和集閤圖 162
9.9 學習方言 163
9.10 假設WHERE子句是“巨型變形蟲” 163
9.11 使用新聞組和因特網 164
第10章 以SQL的方式思考 165
10.1 不好的SQL編程方式與過程化語言 166
10.2 把列當作字段思考 170
10.3 以過程化而不是說明性的方式思考 172
10.4 模式應該看起來像輸入格式 174
附錄A 資源 177
附錄B 參考文獻 183
索引 187
· · · · · · (
收起)