我們真的用好 SQL 數(shù)據(jù)庫(kù)了嗎?
本文轉(zhuǎn)載自微信公眾號(hào)「有關(guān)SQL」,作者Lenis。轉(zhuǎn)載本文請(qǐng)聯(lián)系有關(guān)SQL公眾號(hào)。
CRUD,其實(shí)也有難的時(shí)候
早年在電子廠,開(kāi)發(fā)MES的時(shí)候,我經(jīng)常自以為是的修改老王師傅的代碼。王師傅,真的是姓王,(不是隔壁老王玩笑話里的老王)
老王,55歲了,35歲上的大學(xué),自學(xué)計(jì)算機(jī)編程。
印象中,最深刻的是,BOM結(jié)構(gòu)和工藝流程路線。這兩個(gè)要素,可以說(shuō)是整個(gè)MES與ERP中最復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
可能外人一看,比如隔壁開(kāi)發(fā)UI的朋友,覺(jué)得也沒(méi)什么。不就是一增一刪,一改一查么,能比 angular 雙向綁定,適配IE/Chrome 瀏覽器還難么
但,做過(guò)的朋友,肯定做夢(mèng)都在發(fā)誓,以后絕壁不碰這兩玩意兒了。
玩笑歸玩笑,但凡老板笑著來(lái)跟你談點(diǎn)需求,你一定會(huì)拍著胸脯說(shuō),今天下班前搞定!你看做技術(shù)的朋友,就是沒(méi)什么心眼兒,做事太直男。既然拍著胸脯說(shuō)的,加班也要搞定,不是么
那么我呢,經(jīng)常在這樣拍胸脯的場(chǎng)景中,修改老王的代碼,認(rèn)為老王那種過(guò)度設(shè)計(jì)工藝路線的方法,簡(jiǎn)直耽誤開(kāi)發(fā)進(jìn)度,差點(diǎn)意思。
在這里,我要解釋下兩個(gè)名詞兒:
一,是MES, Manufacturing Execution System, 生產(chǎn)制造執(zhí)行系統(tǒng)
MES是個(gè)龐然大物,成熟的行業(yè)應(yīng)用軟件。舉例來(lái)說(shuō),制造一臺(tái)iPhone所經(jīng)過(guò)的所有工序,工人,機(jī)器,場(chǎng)地以及材料和經(jīng)費(fèi),都會(huì)被MES采集到。
通過(guò)分析這些數(shù)據(jù),提高質(zhì)量,控制成本,擴(kuò)大產(chǎn)能。所以,制造型企業(yè),要上數(shù)字化戰(zhàn)略,MES肯定先行一步。
二,是工藝路線,即零部件制造流程
下圖是我在硅材料加工廠,做晶圓制造時(shí),常用的制造工藝流程圖。
一個(gè)程序員對(duì)芯片生產(chǎn),能有多少理解?想當(dāng)然的就認(rèn)為,它的生產(chǎn)就是一個(gè)有序的事件流,步驟1,2,3,4 ……按部就班的走下去。
于是我就設(shè)計(jì)一張表,記錄產(chǎn)品的生產(chǎn)進(jìn)度,每個(gè)生產(chǎn)記錄,都有一個(gè)工序字段,當(dāng)?shù)拦ば蜃鐾辏妥詣?dòng)進(jìn)入設(shè)計(jì)好的下一道工序。也就是大家在圖里看到的黑線流水圖。
我本以為天衣無(wú)縫,自動(dòng)化到了極致,但事實(shí)上,并不是我想的那么簡(jiǎn)單。
圖中,還有紅色箭頭部分。
由于每道工序,都可以單拎出來(lái),貢獻(xiàn)它的生產(chǎn)力。甚至,有的工序間,還有來(lái)回的加工。因此,真正上線運(yùn)行時(shí),狀況百出。
當(dāng)我規(guī)定了黑色箭頭的流程,寫好了響應(yīng)程序。等正式上線用的時(shí)候,果不其然,沒(méi)多久,工廠負(fù)責(zé)錄入數(shù)據(jù)的操作員,就來(lái)書記辦公室抱怨了。
“你們小黃寫的程序,怎么到了拋光檢測(cè)(一道硅材料工序),就沒(méi)有清洗(又一道硅材料工序)了”
“那你們也沒(méi)有提,在拋光后檢測(cè)后,不直接入庫(kù),還要繼續(xù)做清洗啊。我以為就是一步步往下流的”
“來(lái)了這么久,不知道工序之間是可以相互回流的嗎?你不去生產(chǎn)車間考察的嗎”
我x
徹底懵了
閉門造車,我完全被帶到溝里去了。我以為的程序,竟然完全沒(méi)有按照我以為的那樣跑。
這些計(jì)件拿錢的工人,那憤怒的眼神,就像是要沖上來(lái),狠狠地打我的臉。“你小子坐著辦公室,吹著空調(diào),就寫出來(lái)這些狗屎東西,白白浪費(fèi)老娘的時(shí)間”
就這樣,除了修補(bǔ)數(shù)據(jù),我連夜把程序修改成配置工藝路線模式。心驚了好幾天!
后來(lái)團(tuán)建時(shí),跟老王說(shuō)到這個(gè)事兒,他也不禁笑呵呵的說(shuō)到,這事兒我就知道你要翻車。工藝路線,我那么寫,就是為了能讓操作員有更大的靈活度,也方便記錄不同工藝的優(yōu)劣。寫死了,你就只能填坑式地補(bǔ),最后補(bǔ)錄數(shù)據(jù),自然就都成了你的事兒。
嗯,姜還是老的辣
多年后我再回顧與老王交談的那個(gè)下午,我依然覺(jué)得,數(shù)據(jù)庫(kù)模式設(shè)計(jì)的魅力,深深打動(dòng)著我。
一個(gè)好的設(shè)計(jì),抵得上好幾百個(gè)小時(shí)的缺陷修補(bǔ)。項(xiàng)目做的越多,我就越害怕設(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)。設(shè)計(jì)得有缺陷,自己就是那個(gè)別人口中的“豬隊(duì)友”。設(shè)計(jì)的好,大家都認(rèn)為那是理所當(dāng)然。
新開(kāi)一個(gè)項(xiàng)目,就像醫(yī)生新接一個(gè)病人??鄻?lè)自知,明知風(fēng)險(xiǎn)大,依然吾往矣。
那么有沒(méi)有一招吃遍天下的設(shè)計(jì)呢,顯然是沒(méi)有的。電商,社交,租約,哪怕是問(wèn)卷,都有各自的難處。但凡帶有這種占便宜,趕進(jìn)度的想法,最終都會(huì)在某個(gè)時(shí)刻,讓你墜入深淵,將你打個(gè)措手不及。
再看kimball的維度建模,縱然他總結(jié)了每個(gè)行業(yè)的最佳設(shè)計(jì),但行業(yè)一直在改變,模式設(shè)計(jì)還是必須日新月異。他的思想,給我最大的啟發(fā),不是那20多個(gè)經(jīng)典的設(shè)計(jì)思維,而是永遠(yuǎn)不要因循守舊,必須小心謹(jǐn)慎,大膽創(chuàng)新。