幫助中心 | 我的帳號 | 關於我們

SQL反模式/圖靈程序設計叢書

  • 作者:(美)卡爾文|譯者:譚振林
  • 出版社:人民郵電
  • ISBN:9787115261274
  • 出版日期:2011/09/01
  • 裝幀:平裝
  • 頁數:253
人民幣:RMB 59 元      售價:
放入購物車
加入收藏夾

內容大鋼
    由卡爾文編著的《SQL反模式》是一本廣受好評的SQL圖書。它介紹了如何避免在SQL的使用和開發中陷入一些常見卻經常被忽略的誤區。它通過講述各種具體的案例,以及開發人員和使用人員在面對這些案例時經常採用的錯誤解決方案,來介紹如何識別、利用這些陷阱,以及面對問題時正確的解決手段。另外,本書還涉及了SQL的各級範式和針對它們的正確理解。
    《SQL反模式式》適合SQL資料庫開發人員與管理人員閱讀。

作者介紹
(美)卡爾文|譯者:譚振林

目錄
第1章 引言  1
 1.1 誰需要這本書  2
 1.2 本書內容  2
  1.2.1 本書結構  3
  1.2.2 反模式分解  4
 1.3 本書未涉及的內容  4
 1.4 規約  5
 1.5 範例資料庫  6
 1.6 致謝  8
第一部分 邏輯型資料庫設計反模式
第2章 亂穿馬路  10
 2.1 目標:存儲多值屬性  11
 2.2 反模式:格式化的逗號分隔列表  11
  2.2.1 查詢指定賬號的產品  11
  2.2.2 查詢指定產品的賬號  12
  2.2.3 執行聚合查詢  12
  2.2.4 更新指定產品的賬號  12
  2.2.5 驗證產品id   13
  2.2.6 選擇合適的分隔符  13
  2.2.7 列表長度限制  13
 2.3 如何識別反模式  14
 2.4 合理使用反模式  14
 2.5 解決方案:創建一張交叉表  14
  2.5.1 通過賬號查詢產品和反過來查詢  15
  2.5.2 執行聚合查詢  16
  2.5.3 更新指定產品的相關聯繫人  16
  2.5.4 驗證產品id   16
  2.5.5 選擇分隔符  17
  2.5.6 列表長度限制   17
  2.5.7 其他使用交叉表的好處  17
第3章 單純的樹  18
 3.1 目標:分層存儲與查詢  18
 3.2 反模式:總是依賴父節點   19
  3.2.1 使用鄰接表查詢樹   20
  3.2.2 使用鄰接表維護樹   21
 3.3 如何識別反模式  22
 3.4 合理使用反模式  23
 3.5 解決方案:使用其他樹模型   24
  3.5.1 路徑枚舉  24
  3.5.2 嵌套集  26
  3.5.3 閉包表  29
  3.5.4 你該使用哪種設計   33
第4章 需要id   34
 4.1 目標:建立主鍵規範   35
 4.2 反模式:以不變應萬變  36
  4.2.1 冗余鍵值   36
  4.2.2 允許重複項   37
  4.2.3 意義不明的關鍵字   38
  4.2.4 使用using 關鍵字   38
  4.2.5 使用組合鍵之難  39

 4.3 如何識別反模式   39
 4.4 合理使用反模式  40
 4.5 解決方案:裁剪設計   40
  4.5.1 直截了當地描述設計  40
  4.5.2 打破傳統   41
  4.5.3 擁抱自然鍵和組合鍵  41
第5章 不用鑰匙的入口  43
 5.1 目標:簡化資料庫架構  43
 5.2 反模式:無視約束  44
  5.2.1 假設無瑕代碼  44
  5.2.2 檢查錯誤  45
  5.2.3 「那不是我的錯!」  45
  5.2.4 進退維谷   46
 5.3 如何識別反模式  46
 5.4 合理使用反模式  47
 5.5 解決方案:聲明約束  47
  5.5.1 支持同步修改  48
  5.5.2 系統開銷過度?不見得  48
第6章 實體—屬性—值  50
 6.1 目標:支持可變的屬性  50
 6.2 反模式:使用泛型屬性表  51
  6.2.1 查詢屬性  53
  6.2.2 支持數據完整性  53
  6.2.3 無法聲明強制屬性  53
  6.2.4 無法使用sql 的數據類型  53
  6.2.5 無法確保引用完整性  54
  6.2.6 無法配置屬性名  55
  6.2.7 重組列  55
 6.3 如何識別反模式  56
 6.4 合理使用反模式  56
 6.5 解決方案:模型化子類型  57
  6.5.1 單表繼承  57
  6.5.2 實體表繼承  58
  6.5.3 類表繼承  60
  6.5.4 半結構化數據模型  61
  6.5.5 后處理  61
第7章 多態關聯  64
 7.1 目標:引用多個父表  65
 7.2 反模式:使用雙用途外鍵  65
  7.2.1 定義多態關聯  65
  7.2.2 使用多態關聯進行查詢  66
  7.2.3 非面向對象範例  67
 7.3 如何識別反模式  68
 7.4 合理使用反模式  69
 7.5 解決方案:讓關係變得簡單   69
  7.5.1 反向引用  69
  7.5.2 創建交叉表   69
  7.5.3 設立交通燈   70
  7.5.4 雙向查找  71
  7.5.5 合併跑道  71

  7.5.6 創建共用的超級表   72
第8章 多列屬性   75
 8.1 目標:存儲多值屬性   75
 8.2 反模式:創建多個列   76
  8.2.1 查詢數據  76
  8.2.2 添加及刪除值   77
  8.2.3 確保唯一性   78
  8.2.4 處理不斷增長的值集  78
 8.3 如何識別反模式  79
 8.4 合理使用反模式  79
 8.5 解決方案:創建從屬表  80
第9章 元數據分裂   82
 9.1 目標:支持可擴展性   83
 9.2 反模式:克隆表與克隆列   83
  9.2.1 不斷產生的新表   84
  9.2.2 管理數據完整性   84
  9.2.3 同步數據   85
  9.2.4 確保唯一性   85
  9.2.5 跨表查詢   86
  9.2.6 同步元數據   86
  9.2.7 管理引用完整性   86
  9.2.8 標識元數據分裂列   87
 9.3 如何識別反模式  87
 9.4 合理使用反模式  88
 9.5 解決方案:分區及標準化   89
  9.5.1 使用水平分區   89
  9.5.2 使用垂直分區   89
  9.5.3 解決元數據分裂列   91
第二部分 物理資料庫設計反模式
第10章 取整錯誤   94
 10.1 目標:使用小數取代整數   94
 10.2 反模式:使用float 類型  95
  10.2.1 舍入的必要性  95
  10.2.2 在sql 中使用float  96
 10.3 如何識別反模式  98
 10.4 合理使用反模式  98
 10.5 解決方案:使用numeric 類型  98
第11章 每日新花樣  100
 11.1 目標:限定列的有效值  100
 11.2 反模式:在列定義上指定可選值  101
  11.2.1 中間的是哪個  102
  11.2.2 添加新口味  103
  11.2.3 老的口味永不消失  103
  11.2.4 可移植性低下  103
 11.3 如何識別反模式  104
 11.4 合理使用反模式  104
 11.5 解決方案:在數據中指定值  104
  11.5.1 查詢候選值集合  105
  11.5.2 更新檢查表中的值  105
  11.5.3 支持廢棄數據  105

  11.5.4 良好的可移植性  106
第12章 幽靈文件  107
 12.1 目標:存儲圖片或其他多媒體大文件  107
 12.2 反模式:假設你必須使用文件系統  108
  12.2.1 文件不支持delete  109
  12.2.2 文件不支持事務隔離  109
  12.2.3 文件不支持回滾操作  109
  12.2.4 文件不支持資料庫備份工具  110
  12.2.5 文件不支持sql 的訪問許可權設置  110
  12.2.6 文件不是sql 數據類型  110
 12.3 如何識別反模式  111
 12.4 合理使用反模式  111
 12.5 解決方案:在需要時使用blob 類型  112
第13章 亂用索引  114
 13.1 目標:優化性能  115
 13.2 反模式:無規劃地使用索引  115
  13.2.1 無索引  115
  13.2.2 索引過多  116
  13.2.3 索引也無能為力  117
 13.3 如何識別反模式  118
 13.4 合理使用反模式  119
 13.5 解決方案:mentor 你的索引  119
  13.5.1 測量  120
  13.5.2 解釋  121
  13.5.3 挑選  122
  13.5.4 測試  123
  13.5.5 優化  123
  13.5.6 重建  123
第三部分 查詢反模式
第14章 對未知的恐懼  126
 14.1 目標:辨別懸空值  127
 14.2 反模式:將null 作為普通的值,反之亦然  127
  14.2.1 在表達式中使用null   127
  14.2.2 搜索允許為空的列  128
  14.2.3 在查詢參數中使用null   128
  14.2.4 避免上述問題  128
 14.3 如何識別反模式  130
 14.4 合理使用反模式  130
 14.5 解決方案:將null 視為特殊值  131
  14.5.1 在標量表達式中使用null   131
  14.5.2 在布爾表達式中使用null   132
  14.5.3 檢索null 值  132
  14.5.4 聲明not null 的列  133
  14.5.5 動態默認值  134
第15章 模稜兩可的分組  135
 15.1 目標:獲取每組的最大值  135
 15.2 反模式:引用非分組列  136
  15.2.1 單值規則  136
  15.2.2 我想要的查詢  137
 15.3 如何識別反模式  138

 15.4 合理使用反模式  139
 15.5 解決方案:無歧義地使用列  140
  15.5.1 只查詢功能依賴的列  140
  15.5.2 使用關聯子查詢  140
  15.5.3 使用衍生表  140
  15.5.4 使用join  141
  15.5.5 對額外的列使用聚合函數  142
  15.5.6 連接同組所有值  142
第16章 隨機選擇  144
 16.1 目標:獲取樣本記錄  144
 16.2 反模式:隨機排序  145
 16.3 如何識別反模式  146
 16.4 合理使用反模式  146
 16.5 解決方案:沒有具體的順序  146
  16.5.1 從1 到最大值之間隨機選擇  146
  16.5.2 選擇下一個最大值  147
  16.5.3 獲取所有的鍵值,隨機選擇一個  147
  16.5.4 使用偏移量選擇隨機行  148
  16.5.5 專有解決方案  149
第17章 可憐人的搜索引擎  150
 17.1 目標:全文搜索  150
 17.2 反模式:模式匹配斷言  151
 17.3 如何識別反模式  152
 17.4 合理使用反模式  152
 17.5 解決方案:使用正確的工具  152
  17.5.1 資料庫擴展  153
  17.5.2第三方搜索引擎  157
第18章 義大利麵條式查詢  162
 18.1 目標:減少sql 查詢數量  162
 18.2 反模式:使用一步操作解決複雜問題  163
  18.2.1 副作用  163
  18.2.2 那好像還不夠????   164
 18.3 如何識別反模式  165
 18.4 合理使用反模式  165
 18.5 解決方案:分而治之  166
  18.5.1 一步一個腳印  166
  18.5.2 尋找union 標記  167
  18.5.3 解決老闆的問題  167
  18.5.4 使用sql 自動生成sql   168
第19章 隱式的列   170
 19.1 目標:減少輸入   171
 19.2 反模式:捷徑會讓你迷失方向   171
  19.2.1 破壞代碼重構  171
  19.2.2 隱藏的開銷  172
  19.2.3 你請求,你獲得  172
 19.3 如何識別反模式   173
 19.4 合理使用反模式   173
 19.5 解決方案:明確列出列名  174
  19.5.1 預防錯誤  174
  19.5.2 你不需要它   175

  19.5.3 無論如何你都需要放棄使用通配符   175
第四部分 應用程序開發反模式
第20章 明文密碼   178
 20.1 目標:恢復或重置密碼   178
 20.2 反模式:使用明文存儲密碼   179
  20.2.1 存儲密碼  179
  20.2.2 驗證密碼  180
  20.2.3 在e-mail 中發送密碼  180
 20.3 如何識別反模式   181
 20.4 合理使用反模式   181
 20.5 解決方案:先哈希,后存儲   182
  20.5.1 理解哈希函數  182
  20.5.2 在sql 中使用哈希   183
  20.5.3 給哈希加料  183
  20.5.4 在sql 中隱藏密碼   185
  20.5.5 重置密碼,而非恢復密碼   186
第21章 sql 注入  188
 21.1 目標:編寫sql 動態查詢  189
 21.2 反模式:將未經驗證的輸入作為代碼執行  189
  21.2.1 意外無處不在   190
  21.2.2 對web 安全的嚴重威脅   190
  21.2.3 尋找治愈良方   191
 21.3 如何識別反模式   195
 21.4 合理使用反模式   196
 21.5 解決方案:不信任任何人  196
  21.5.1 過濾輸入內容  196
  21.5.2 參數化動態內容  197
  21.5.3 給動態輸入的值加引號  197
  21.5.4 將用戶與代碼隔離  198
  21.5.5 找個可靠的人來幫你審查代碼  200
第22章 偽鍵潔癖  202
 22.1 目標:整理數據  202
 22.2 反模式:填充角落  203
  22.2.1 不按照順序分配編號  203
  22.2.2 為現有行重新編號  204
  22.2.3 製造數據差異  204
 22.3 如何識別反模式  205
 22.4 合理使用反模式  205
 22.5 解決方案:克服心裡障礙  205
  22.5.1 定義行號  205
  22.5.2 使用guid  206
  22.5.3 最主要的問題  207
第23章 非禮勿視  209
 23.1 目標:寫更少的代碼  210
 23.2 反模式:無米之炊  210
  23.2.1 沒有診斷的診斷  210
  23.2.2 字裡行間  211
 23.3 如何識別反模式  212
 23.4 合理使用反模式  213
 23.5 解決方案:優雅地從錯誤中恢復  213

  23.5.1 保持節奏  213
  23.5.2 回溯你的腳步  214
第24章 外交豁免權  215
 24.1 目標:採用最佳實踐  215
 24.2 反模式:將sql 視為二等公民  216
 24.3 如何識別反模式  216
 24.4 合理使用反模式  217
 24.5 解決方案:建立一個質量至上的文化  217
  24.5.1 陳列a:編寫文檔  218
  24.5.2 尋找證據:源代碼版本控制  220
  24.5.3 舉證:測試  222
  24.5.4 例證:同時處理多個分支  223
第25章 魔豆  225
 25.1 目標:簡化mvc 的模型  226
 25.2 反模式:模型僅僅是活動記錄  227
  25.2.1 活動記錄模式連接程序模型和資料庫結構  228
  25.2.2 活動記錄模式暴露了crud系列函數  228
  25.2.3 活動記錄模式支持弱域模型  229
  25.2.4 魔豆難以進行單元測試  231
 25.3 如何識別反模式  232
 25.4 合理使用反模式  232
 25.5 解決方案:模型包含活動記錄  232
  25.5.1 領會模型的意義  233
  25.5.2 將領域模型應用到實際工作中  234
  25.5.3 測試簡單對象  236
  25.5.4 回到地球  237
第五部分 附錄
附錄A 規範化規則  240
附錄B 參考書目  252

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032