如何寫好上千行的 SQL 存儲(chǔ)過(guò)程(附代碼規(guī)范)
上千行的 SQL 代碼常見,且永不過(guò)時(shí)!
經(jīng)歷了大大小小的 MIS 系統(tǒng),小到幾人用的協(xié)作系統(tǒng),幾十人用的 OA 系統(tǒng),到上千人用的 MES/ERP 系統(tǒng),再到百萬(wàn)人用的電商系統(tǒng),存儲(chǔ)過(guò)程的影子在半個(gè)世紀(jì)以來(lái)從未淡出它的戰(zhàn)場(chǎng)。我們幾個(gè) SQL 老玩家經(jīng)常自吹, SQL 是半衰期最長(zhǎng)的編程語(yǔ)言。玩會(huì)它不用擔(dān)心失業(yè)。
上回我們說(shuō)到如何去拆一個(gè)上千行的 SQL 存儲(chǔ)過(guò)程,提到了四大步驟:理解代碼,分拆代碼,改寫代碼和保存代碼。拆過(guò)無(wú)數(shù)的代碼,從上千行縮減到 2 成,也組裝過(guò)無(wú)數(shù)的代碼,從上百行塞成了上千行,業(yè)務(wù)所需。見過(guò)最長(zhǎng)的 SQL 代碼超 5000 行,已簡(jiǎn)無(wú)所簡(jiǎn),那就實(shí)事求是了。人有分分合合,有生命力的代碼也一樣。
但裝和拆并不是一個(gè)逆反的過(guò)程!
1 理解業(yè)務(wù):
你不可能寫出一個(gè)沒(méi)有業(yè)務(wù)邏輯的代碼。充分理解業(yè)務(wù)邏輯對(duì)你有兩個(gè)好處:一)寫出可執(zhí)行的并且可擴(kuò)展的代碼;二)主動(dòng)了解業(yè)務(wù)將有利于職業(yè)生涯升級(jí)。***個(gè)好處肯定不言而喻,寫代碼寫出頸椎病的程序員,不會(huì)意識(shí)不到代碼的擴(kuò)展性可以讓你少跑多少趟醫(yī)院,讓你霸屏更多次王者。第二個(gè)好處可不是人人都意識(shí)到了。雖然 SQL 是最長(zhǎng)職業(yè)生涯的編程語(yǔ)言,與其一起出現(xiàn)的 VFP 大概 90 后聞所未聞,但顯然沒(méi)人一輩子愿意鼓搗 CRUD 吧。玩吃雞的同學(xué)把你的 iPhone X 放下,家里有礦沒(méi)說(shuō)你。
理解了業(yè)務(wù)你就成了整個(gè)應(yīng)用生態(tài)中不可缺少的一環(huán)。信息化的目的不是寫代碼,最終目的就是為了利潤(rùn)。看二爺(邱岳)就知道這話沒(méi)錯(cuò)。
2 快速實(shí)現(xiàn):
很多朋友(包括我)有時(shí)候碰到需求,苦思冥想,想的是一口氣把 SQL 從頭到尾完整的,暢快淋漓的寫出來(lái)。“Wow” 和漂亮的回車,就是憋著這口氣的期待。
但現(xiàn)實(shí)無(wú)數(shù)次打了我的臉!
越是有這種想法,越是憋得時(shí)間很長(zhǎng)才寫那么一點(diǎn)。總覺(jué)得這里不好,那里不行,這里的變量名稱寫得不夠爽朗,那邊的 Pivot 寫得不夠優(yōu)化。結(jié)果往往是一個(gè)上午就在那里糾結(jié),什么都沒(méi)完成。
你是不是也有類似的經(jīng)歷?不孤獨(dú)
再說(shuō)一次《巴黎評(píng)論》。村上春樹、海明威、博爾赫斯,書里翻翻都是***遍爽快的寫下去了,一旦寫得卡殼了怎么辦,束之高閣,明兒繼續(xù)。所以我后來(lái)明白的事情,大家都可以猜得到了。先把業(yè)務(wù)實(shí)現(xiàn)了再說(shuō),命名規(guī)則,變量申明,事務(wù)控制以及性能優(yōu)化,統(tǒng)統(tǒng)先放起來(lái)。寫好 CRUD 交上***稿,存檔,Over!
3 重構(gòu)與測(cè)試:
如果僅僅到了第二步,就認(rèn)為高枕無(wú)憂,那會(huì)死的很慘。你會(huì)成為別人口中的“豬一樣的隊(duì)友,坑貨……”
《巴黎評(píng)論》中,村上春樹提到他的小說(shuō)經(jīng)常修改 4 - 5 遍才交稿,而且編輯還需要修改。我們一遍過(guò)的 SQL 就免檢了?這個(gè)時(shí)候再檢查命名規(guī)則,變量申明,事務(wù)控制以及性能優(yōu)化。直到滿足 ACID 的最小單元的 代碼塊完整的歸整到一個(gè)存儲(chǔ)過(guò)程或拆解成多個(gè)可重復(fù)使用的存儲(chǔ)過(guò)程中結(jié)束。
將所有的測(cè)試分支跑完測(cè)試,提交!
4 保存代碼:
如果你的團(tuán)隊(duì)沒(méi)有 git, SVN, TFS 這些 Source Code Version Control, 趕緊上一個(gè)。沒(méi)有自動(dòng)化部署工具,自己想辦法整一個(gè)。到 9102 年了,別偷懶吧。
摸著你的良心,看看這個(gè)圖,你都掌握了?