很早的時候,我被我們領導灌輸過乙個思想,我們領導當時是做web出身的,他非常重視web
的功能。在他眼裡,資料庫只是存放資料的箱子,不應該把過多的業務邏輯交給資料庫去處理,
應該只把他看做是存放資料的箱子,我們當時是用mysql + php,那時候mysql比較弱一些,
不支援儲存過程、觸發器,事務等等,正好符合我們領導所提倡的理念。
後來接觸了erp,發現資料量很大,全部用vb等處理效率低、速度也慢,採用儲存過程效率高,
而且有些bug,新功能只要在資料庫伺服器上進行修改儲存過程就可以了,客戶端都不用修改
程式,感覺這個儲存過程很強大,而且通過儲存過程還可以做其他軟體的資料庫介面,自從那
以後就瘋狂痴迷於儲存過程、資料庫技術,經常研究這些方面的技術。
又過了些日子,接觸了oracle,發現與sqlsever裡的儲存過程不相容,有些寫法、用法、理
念差距也很大,移植問題是個很大的麻煩,雖然理論是完全可以移植的,但是要維護2套這樣
的系統,麻煩很多,所以開始漸漸的放棄寫儲存過程這個愛好了,盡量寫一些簡單的sql語句
的組合,盡量把商業邏輯都寫在c#裡,好除錯些,隨著對c#語法的深入理解,商業邏輯寫在
c#裡的開發速度,比寫在儲存過程裡還快了很多,再接著對系統整體功能的定位,漸漸放棄
了區域性功能的優化思想,以考慮全域性為重,不差那麼0.1秒的效能速度提高,不在乎這些一點
點的差距。
最近幾年,由於對面向服務程式設計的深入理解,徹底放棄寫儲存過程了,盡量商業邏輯都寫在c#
裡,因為客戶有可能是買了正版的oracle或者購買了正版的sqlserver, 他們希望你的程式能
跑在他們的正版資料庫系統上,而不是為了使用你的系統,又重新購買另一套正版軟體。
基於儲存過程的資料庫指令碼的主要缺點是除錯起來麻煩,資料庫中的表字段變動了,也不提示
關聯錯誤,也沒有版本控制,很容易丟失指令碼程式,而且人人都有乙個本地資料庫,很容易把
儲存過程搞亂套了,最後會導致誰都不知道到底哪個才是最新的儲存過程,而且給上百個儲存
過程起個合理的名稱,這個命名工作統一規範化也是個要命的問題。
把商業邏輯寫在c#裡的好處就很多了,有相應的版本控制器,以前的**也可以找出來,不怕
丟失**,有些修改程式等造成的錯誤,在開發環境編譯階段就能發現錯誤在**,好進行關
聯修正,多種版本的資料庫上移植也簡單些,也不用同時兩邊作戰,又要維護資料的版本,又
要維護程式的版本,發布時也會遇到2方面都需要更新的問題。還是單邊作戰比較簡單一些,同
時與其他系統的介面等,交給相應的服務程式進行處理,由服務程式來負責與其他系統的互動,
這個互動又比底層資料庫的互動強大很多。
我曾經寫過乙個小軟體,裡面大量採用了儲存過程,給我的痛苦總結下來是,
1. 資料庫中的表進行了修正了,我不知道哪幾個儲存過程需要修正?
2. 有時候手上好幾個資料庫,測試來測試去,很容易不知道到底哪個是最新的,特別是過了一
年半載,再去找對應的資料庫時,這個問題很明顯。
3. 除錯c#程式很容易,除錯儲存過程,相對麻煩一些。
4. 引數有變動時,還要修改儲存過程的引數,有時候還有關聯的儲存過程需要修正,很折騰人,
而且執行了,才能發現這些問題。
3. 還有這個程式只能跑在sqlserver上,還好我們用的都是d版,想安裝就裝了,也不要錢,
若真要錢,那不是開玩笑的。
現在我們開發的很多系統裡,根本看不到儲存過程的影子了,當然我們也不是走極端,在平時
一些簡單的系統裡,還真沒多大必要用到儲存過程,能不用就不用吧,多一事不如少一事,現
在總結已經走過的路,感覺還是商業邏輯盡量寫在c#裡是省心省力的正確道路。
將許可權管理、工作流管理做到我能力的極致,乙個人只能做好那麼很少的幾件事情。
儲存過程之BLOG物件到資料庫
1 在 建立img 資料夾 注意 檔案目錄一定要和資料庫在同一臺機器上 2 在資料夾中放入 3 用pl sql 登入oracle 4 在oracle 中建立blobdir 目錄,並與img 資料夾關聯 5 建立表 1 create table tbl monitor car info clxxbh ...
資料庫 儲存過程
儲存過程,stored procedure,是在大型資料庫系統中,一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。模擬於c中的函式。mysql與sqlserver是不同的。建立儲存過程 conn getconnec...
資料庫 儲存過程
在資料庫中,儲存過程屬於一種物件,是一種高效的安全的訪問資料庫的方法。下邊我們就資料庫中的儲存過程總結它的相關知識點。我們分為概述,實現和管理三個方面來總結。一,儲存過程的概述 1,概念 儲存過程 storedprocedure 是在資料庫伺服器端執行的一組t sql語句的集合,經編譯後存放在資料庫...