作者簡介
Adam Machanic,微軟SQL Server MVP,著名的SQL Server專家。長期活躍於技術社區,是SQL Server Professional和TechNET等行業雜誌的撰稿人,經常在各種技術會議上開設技術講座、發表演講。除本書外,他還是Pro SQL Server 2005的作者之一。
內容簡介
《SQL Server 2005編程藝術》是一部關於SQL Server 2005 高級開發技術的權威著作,提供了詳盡、全面的技術討論,並給出了詳細的套用實例。
書中前4 章著重介紹SQL Server 所涉及的軟體開發方法學、測試、異常處理和安全;第5 章至第7 章深入研究SQL Server 獨具的高級特性,主要介紹加密、SQLCLR 和動態SQL;第8 章至第11 章從資料庫體系結構的角度分析問題,深入研究具體的設計和實現問題,包括應用程式並發、空間數據、時態數據和圖,這是《SQL Server 2005編程藝術》最為複雜的內容,也是最有實際意義的內容。
媒體評論
“罕見的深度,書中的所有內容都值得反覆咀嚼並實際演練。我向所有想探索SQL Server的讀者推薦本書。”
——Bob Beauchemin,微軟SQL Server MVP
“資料庫方面的書太多了。可是沒有一本像本書這樣討論了軟體工程、測試等諸多重要主題,包括我自己的收!許多內容對我來說也是全新的,強烈推薦!”
——JoeCelko,SQL標準委員會成員。世界頂尖SQL專家,《SQL解惑》等經典著作的作者
市面上充斥著大量入門性質的SQL Server 2005圖書,而許多重要的主題卻很少涉及。
本書由幾位世界級SQL Server專家撰寫而成,他們從親身開發經驗出發,針對實際開發中會一再遇到的問題,討論了包括微軟公司在線上文檔在內的其他資料中都難以找到的一些重要主題。作者將資料庫視為軟體開發生態系統中的一個有機組成部分,引導讀者對SQL Server開發進行思考。達到從未企及的深度。
通過書中的最佳實踐和大量示例,讀者可以掌握如何設計高性能、高可維護性的應用程式,從而大大提升自己的資料庫開發水平。
目錄
第1章 資料庫領域的軟體開發方法學
1.1 架構回顧
1.1.1 耦合、內聚和封裝
1.1.2 接口
1.2 核心問題:集成資料庫和面向對象系統
1.2.1 該何去何從
1.2.2 對象-關係失配
1.3 ORM:一個問題多多的解決方案
1.4 把資料庫操作設計為API
1.5 全面權衡
1.5.1 可測試性
1.5.2 可維護性
1.5.3 安全性
1.5.4 性能
1.5.5 步履蹣跚的遠期功能
1.6 小結
第2章 資料庫例程測試
2.1 黑盒測試與白盒測試簡介
2.1.1 單元測試和功能測試
2.1.2 單元測試框架
2.1.3 回歸測試的重要性
2.2 實現資料庫測試過程和測試例程的指導準則
2.2.1 為什麼說軟體測試很重要
2.2.2 哪種測試重要
2.2.3 需要進行多少測試
2.2.4 管理層是否願意接受軟體測試
2.3 性能測試和資料庫系統事件探查
2.3.1 獲取基準度量
2.3.2 使用跟蹤器及事件探查器進行查看
2.3.3 評估性能計數器
2.3.4 巨觀分析
2.3.5 粒度分析
2.3.6 修正問題:僅僅關註明顯的錯誤是否已經足夠
2.4 SQLQueryStress性能測試工具介紹
2.5 小結
第3章 錯誤和異常
3.1 異常和錯誤
3.2 SQL Server中異常的工作原理
3.2.1 語句級異常
3.2.2 批處理程式級異常
3.2.3 語法分析和作用域解析異常
3.2.4 連線和伺服器級異常
3.2.5 XACT_ABORT設定
3.2.6 分析錯誤信息
3.2.7 SQL Server的RAISERROE函式
3.2.8 跟蹤監控異常事件
3.3 異常處理
3.3.1 為什麼要在T-SQL中處理異常
3.3.2 使用@@ERROR“處理”異常
3.3.3 SQL Server的TRY/CATCH語法
3.4 事務與異常
3.4.1 事務退出的神話
3.4.2 XACT_ABORT:神話(半)成真
3.4.3 TRY/CATCH和被詛咒事務
3.5 小結
第4章 特權與授權
4.1 最低特權原則
4.1.1 在SQL Server中創建代理
4.1.2 層級數據安全:洋蔥模型
4.2 使用Schema組織數據
4.3 使用EXECUTE AS實現基本模擬
4.4 所有權鏈
4.5 非鏈式特權提升
4.5.1 存儲過程與EXECUTE AS
4.5.2 使用證書對存儲過程進行簽名
4.6 小結
第5章 加密
5.1 要保護什麼
5.2 加密術語:我們需要知道的部分
5.3 SQL Server 2005加密密鑰體系
5.3.1 服務主密鑰
5.3.2 資料庫主密鑰
5.4 SQL Server 2005數據保護
5.4.1 HashBytes()
5.4.2 非對稱密鑰加密和證書加密
5.4.3 對稱密鑰加密
5.4.4 EncryptByPassphrase
5.5 隔離數據與DBA
5.6 性能最佳化設計
5.6.1 設計解決方案、定義問題
5.6.2 搜尋加密數據
5.7 小結
第6章 SQLCLR:架構和設計注意事項
6.1 填充SQL/CLR鴻溝:SqlTypes庫
6.2 包裝代碼以提高跨層重用性
6.3 SQLCLR的安全性特徵和可靠性特徵
6.3.1 代碼安全性需求
6.3.2 通過程式集引用有選擇地提升特權
6.3.3 授予交叉程式集特權
6.4 利用SQLCLR加強Service Broker可擴展性功能
6.5 擴展用戶自定義聚合
6.6 小結
第7章 動態T-SQL
7.1 動態T-SQL與ad hoc T-SQL
7.2 為什麼要使用動態SQL
7.2.1 編譯與參數化
7.2.2 自動參數化
7.2.3 應用程式級參數化
7.2.4 參數化與高速快取的性能暗示
7.3 支持可選參數
7.3.1 通過靜態T-SQL實現可選參數
7.3.2 實現動態化:使用EXECUTE
7.3.3 SQL注入
7.3.4 sp_executesql:一個更好的EXECUTE
7.4 動態SQL在安全方面的考慮
7.4.1 被引用對象的許可權
7.4.2 接口規則
7.5 小結
第8章 應用程式並發系統的設計
8.1 從業務角度觀察:進程產生衝突時會發生什麼情況
8.1.1 SQL Server隔離級別概述
8.1.2 並發控制與SQL Server提供的隔離級別
8.2 做最壞的打算:悲觀的並發
8.2.1 在寫入過程中使用悲觀鎖
8.2.2 應用程式鎖:對悲觀並發控制機制進行泛化
8.3 希望最好的情況發生:樂觀的並發控制
8.4 包容衝突:多值並發控制
8.5 通過排隊提高可擴展性
8.6 小結
第9章 空間數據處理
9.1 用緯度和經度表示地球空間數據
9.1.1 設定示例數據
9.1.2 計算兩點之間的距離
9.1.3 從一個位置點移動到另一個位置點
9.1.4 鄰近搜尋
9.1.5 邊界框
9.1.6 查找距離最近的鄰近點
9.1.7 動態邊界框
9.1.8 結論
9.2 使用分層三角形格線表示地球空間數據
9.2.1 HTM的簡化描述
9.2.2 實現HtmID
9.2.3 Spatial資料庫提供的函式
9.2.4 結論
9.3 其他類型的空間數據
9.3.1 三維數據
9.3.2 天文數據
9.3.3 虛擬空間
9.3.4 將區域表達為多邊形
9.4 小結
第10章 時態數據處理
10.1 表達的不僅僅是時間
10.2 SQL Server提供的日期/時間數據類型
10.2.1 日期輸入格式
10.2.2 格式化輸出日期
10.2.3 高效查詢日期/時間列
10.2.4 日期/時間計算
10.3 使用日曆表定義周期
10.4 設計時態數據存儲方案及查詢時態數據
10.4.1 處理時區
10.4.2 處理時間區間
10.4.3 為持續時間建立模型
10.4.4 管理雙時態數據
10.5 小結
第11章 樹、層次結構和圖
11.1 術語:萬物皆為圖
11.2 基礎知識:鄰接表和圖
11.2.1 為邊加入約束
11.2.2 針對圖的基本查詢:給定一個結點,這個結點與其他哪些結點相連
11.2.3 遍歷圖
11.3 鄰接表的層次結構
11.3.1 查詢鄰接表層次結構:基礎知識
11.3.2 查找直接後代結點
11.3.3 在層次結構中向下級層次遍歷
11.3.4 在層次結構中向上級層次遍歷
11.3.5 插入新結點並重新定位子樹
11.3.6 刪除已有結點
11.3.7 為層次結構加入約束
11.4 持久保存具體化路徑
11.4.1 查找下級結點
11.4.2 在層次結構中向上級層次導航
11.4.3 對具體化路徑解決方案進行最佳化
11.4.4 插入結點
11.4.5 重新定位子樹
11.4.6 刪除結點
11.4.7 為層次結構加入約束
11.5 嵌套集模型
11.5.1 查找下級結點
11.5.2 在層次結構中向上級層次導航
11.5.3 插入結點
11.5.4 重新定位子樹
11.5.5 刪除結點
11.5.6 為層次結構加入約束
11.6 小結