<rt id="qlaea"><optgroup id="qlaea"><button id="qlaea"></button></optgroup></rt>
    <rp id="qlaea"><meter id="qlaea"></meter></rp><strong id="qlaea"><span id="qlaea"></span></strong>
      <rp id="qlaea"></rp>
      1. <source id="qlaea"><nav id="qlaea"><strike id="qlaea"></strike></nav></source>

        計算機書籍控

        SQL反模式

           《SQL反模式》:深入剖析數據庫編程常見錯誤,提升SQL功力的實用寶典,大師指點令人茅塞頓開。多數軟件開發人員并不是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

        書籍下載

        尊重版權,請購買正版書籍

        正版書籍

        SQL反模式

        163A官方彩票导航网 www.bkentertainments.com:萍乡市| www.91guntang.com:称多县| www.danielelise.com:明光市| www.six-369.com:奉化市| www.cp3992.com:镶黄旗| www.highrisebuilder.com:台安县| www.anlson.com:武功县| www.vincentgrison.com:鄱阳县| www.myoldagehome.com:古丈县| www.cp0990.com:伊金霍洛旗| www.aalvareznobell.com:沧州市| www.bmnjn.com:信丰县| www.danangfoundation.org:宁陕县| www.fionatate.com:三亚市| www.labodaderafaypaula.com:中阳县| www.adlibeatum.com:绵阳市| www.dadatu66.com:吴堡县| www.lepoidevinmerge.com:亳州市| www.i-remax.com:无为县| www.ymt-tea.com:泗洪县| www.radiosolmansi.org:高邮市| www.917wm.com:阳高县| www.ascendingwings.com:余姚市| www.qingqier.com:德惠市| www.tmhatter.com:巴彦淖尔市| www.elbertcastaneda.com:化德县| www.esqqw.com:富锦市| www.teatreeoilusage.com:固原市| www.tendainfo.com:上栗县| www.lnkqxx.com:彩票| www.elite-a.com:海盐县| www.cleanhouselimpeza.com:财经| www.valentine1china.com:昌乐县| www.sonleyglove.com:遂川县| www.tea778.com:巴塘县| www.airmaxshoesnike.net:洛浦县| www.go115.com:白河县| www.rqjkw.cn:台江县| www.pruebastf.com:长岭县| www.bestcasinoslot.net:大方县| www.ilmulangka.com:富川| www.myspaceproxyace.com:怀仁县| www.investment-e.com:陇南市| www.gm445.com:达尔| www.diaosizz.com:囊谦县| www.speed28.com:出国| www.hanselapp.com:玉树县| www.thetalisker.com:云安县| www.heritagehandbag.com:成武县| www.messinginaction.com:满城县| www.archdown.com:新邵县| www.bestpriceditemz.com:兴隆县| www.photolockr.com:彭山县| www.velvetstorm-media.com:绥芬河市| www.tea778.com:广宁县| www.shaltiv.com:勐海县| www.ynthp.com:台东市| www.cp6783.com:泰宁县| www.searchvidz.com:密云县| www.shoe-top.com:和田市| www.idleclickinggames.com:临江市| www.witbankguesthouseaccommodation.com:梨树县| www.glviagragtr.com:绍兴市| www.maksoyun.com:遵化市| www.no-flash.com:江口县| www.taobaokk8.com:张家界市| www.matiastroncoso.com:监利县| www.story-of-us.com:昌图县| www.pa-secret.com:高台县| www.zydlgzdw.com:会宁县| www.sx888fc.com:东方市| www.zhongshanfapii.com:安化县| www.greenitways.com:佛学| www.936729.com:垣曲县| www.lunwentao.com:玉溪市| www.soundwirerecords.com:象山县| www.six-369.com:武胜县| www.ziti1.com:乡宁县| www.serrurier-houilles.net:沁阳市| www.sharansoft.com:襄樊市| www.n5883.com:桂阳县| www.aiyoudian.com:广昌县| www.wwwzhenren.com:扎鲁特旗| www.auburnoysterbar.com:登封市|