對于一個(gè)項(xiàng)目來說袋励,數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計(jì)是比較重要的一環(huán)。從程序開發(fā)的流程上來說当叭,應(yīng)該先設(shè)計(jì)表再著手進(jìn)行開發(fā)茬故。不過隨著技術(shù)的發(fā)展,很多后端語言都有表結(jié)構(gòu)的映射了蚁鳖。因此磺芭,對于表結(jié)構(gòu)的設(shè)計(jì)就轉(zhuǎn)變成了類結(jié)構(gòu)的設(shè)計(jì)了。這么做無疑是節(jié)省了人工成本醉箕,但帶來的負(fù)面影響是沒有以前設(shè)計(jì)流程中的表結(jié)構(gòu)的文檔了钾腺。
在最近的一個(gè)項(xiàng)目中,恰好就遇見了需要表結(jié)構(gòu)文檔的情況讥裤。雖說可以直接看類定義垮庐,但是這樣畢竟不是最直觀的。不過要對著類定義來做文檔坞琴,又很花費(fèi)精力,同時(shí)文檔與代碼的同步性也是一個(gè)很嚴(yán)重的問題逗抑。在上家公司由于文檔往往都是有延遲或者間隔的剧辐,導(dǎo)致一旦發(fā)生什么,就只能對著源碼來工作邮府。
所以對應(yīng)著這樣的需求荧关,自然就有了制作相關(guān)小工具的想法了。主要的需求就是——生成比較容易閱讀的表結(jié)構(gòu)文檔褂傀。
作為一個(gè)堅(jiān)定的JS愛好者忍啤,二話不說就拿著Node上了。因?yàn)楹蠖嗽谧鲇成涞臅r(shí)候肯定會(huì)生成建表的SQL,那么我只要對這SQL進(jìn)行解析的就完事了嘛~但是轉(zhuǎn)念一想同波,解析SQL文件根本就沒必要蚌贰!既然是拿表的結(jié)構(gòu)未檩,那么直接從數(shù)據(jù)庫里面拿不就好了嘛戴尸!
整體的流程大致如下:
- 連接MySQL,執(zhí)行相關(guān)SQL語句
- 把SQL獲取到的結(jié)果按照對應(yīng)的格式輸出成文檔(表結(jié)構(gòu)與索引相關(guān)信息)
為此我們需要下面幾個(gè)庫來幫我們
邏輯并不是很復(fù)雜冤狡,而且這些庫相信很多同學(xué)也都用過孙蒙,所以也就不在這里展開了。
還是老樣子悲雳,先來看看整體的實(shí)現(xiàn)效果挎峦。
執(zhí)行npm run start
就會(huì)生成出含有表結(jié)構(gòu)以及索引相關(guān)信息的Excel文檔了。
- 沒有樣式是因?yàn)?code>xlsx沒法對Excel的單元格進(jìn)行編輯合瓢。不過相比起手工做表結(jié)構(gòu)坦胶,添加一點(diǎn)樣式的工作量應(yīng)該是少很多了。
目前生成出的字段都是我根據(jù)自己目前項(xiàng)目需要所抽取的歪玲,各位也可以根據(jù)自己的需要來進(jìn)行設(shè)置迁央。
設(shè)置的方法可以查看項(xiàng)目的Readme。
項(xiàng)目地址在這里:mysql-doc
有不足和需要改進(jìn)的地方也請各位多多指點(diǎn)滥崩,如果正好有幫上各位的忙也請不要吝嗇點(diǎn)個(gè)贊唄~