【摘要】
sql的進攻式程式設計{offensivecoding with sql}
與之對應防禦式程式設計code defensively:在開始處理之前先檢查所有引數的合法性。
進攻式程式設計的本質特徵是:以合理的可能性(reasonable probabilities)為基礎。
比較二者:常規的程式設計都是採用防禦式程式設計,使用者錄入什麼,程式得檢查錄入是否合法,比如前台開發、業務邏輯開發;在資料庫程式設計中,盡量同時做幾件事情的進攻式程式設計有切實的優勢(注意僅僅是針對據庫程式設計)。進攻式程式設計在資料庫程式設計的前提是,以合理的假設基礎上開發,定義錯誤集合。
舉例:在信用卡付款的處理:
1、檢查提交的客戶身份和卡號是否有效,以及二者是否匹配;
2、檢查信用卡是否過期
3、檢查當前的支付額是否超過信用卡額度。
4、通過上述檢查後,才執行支付操作。
防禦式程式設計,預先使用3個查詢語句來檢查這些資訊;
進攻式程式設計,直接支付操作,條件必須滿足上述3個前提;支援成功,@@rowcount=1;反之,@@rowcount=0,這個時候再查詢乙個錯誤集合,以特定的結論來判斷是那個部分錯誤。
執行效率來說,進攻式程式設計要簡潔、更節約時間
個人認為:無論防禦還是進攻,都要以成功且二者輸出一致作為最終判斷;成功執行的基礎上,考慮防禦和進攻策略
閱讀 SQL語言藝術》實踐一
摘要 動作豐富的sql語句 action packed sql statements 此節結論 儘量減少過程邏輯出現在sql語句,比如if else之類 能使用一句sql不要分解為過程邏輯,盡量由資料庫系統來提高更高的效率。為了說明這個問題,我簡要測試以下語句 a update tbuser set...
SQL語言藝術
內容介紹 本書分為12章,每一章包含許多原則或準則,並通過舉例的方式對原則進行解釋說明。這些例子大多來自於實際案例,對九種sql經典查詢場景以及其效能影響討論,非常便於實踐,為你的實際工作提出了具體建議。本書適合sql資料庫開發者 軟體架構師,也適合dba,尤其是資料庫應用維護人員閱讀。您現在正在檢...
sql語言藝術2
先定義問題,再解決問題 problem definition before solution 一知半解是危險的。人們常在聽說了新技術或特殊技術之後 有時的確很吸引人 試圖採 用它作為新的解決方案。普通開發者和設計師通常會立即採納這些新 解決方案 直到後來才 發現它們會產生許多後續問題。現成的解決方案...