起因
剛接觸互聯網時,從事的是前端崗位,跟一個40多歲的老大哥合作項目,項目推進的時候老大哥各種擺譜不按計劃來,那種被扼住咽喉的感覺讓我暗下決心,一定要能獨擋一面,一個人要有搞定一個項目的能力和視野。最后被逼成為了一個偽全棧。
窘迫感
當自己真有能力搞定前后端的時候,發現在設計數據庫的時候很困難。
- 這個字段該不該放這個表?
- 這個表該不該設置一個冗余字段避免聯表查詢?
- 復雜的表字段很多的時候該不該拆分?
剛開始接觸后段開發,一個項目設計到開發能正常運行就開心到飛起了。后來熟練一些后發現很多跟數據庫設計的問題涌上來了,總感覺設計得很別扭。就在想有沒有參考標準或者規范?還真有!
數據庫范式
本文不作為一個面面俱到的文章,盡量幫助想嘗試自己設計數據庫的(前端Or其他)小伙伴自己設計出符合基礎規范的數據庫,少走一些彎路。同時也作為自己的經驗總結,寫成文章作為重構復盤參考
數據庫范式規定的是數據表之間字段聯系合理性程度。符合范式設計的數據庫具有如下好處
- 數據結構冗余最小化
- 數據表操作是否方便
- 數據操作高性能
第一范式
數據表中每一個字段具有原子性,不可再分
學生編號 |
學生姓名 |
地址 |
1 |
張雷 |
陜西省西安市未央區 |
2 |
趙芬 |
湖南省長沙市芙蓉區 |
地址 字段不符合第一范式,可再分
省 |
市 |
區 |
區 |
1 |
陜西省 |
西安市 |
未央區 |
2 |
湖南省 |
長沙市 |
芙蓉區 |
第二范式
表中每列字段都要跟數據表主鍵關聯,不要出現部分依賴
學生編號 |
學生姓名 |
課程名稱 |
分數 |
1 |
張雷 |
語文 |
150 |
2 |
趙芬 |
物理 |
100 |
課程名稱和分數 字段不符合第二范式,兩個字段跟主鍵編號沒有太大關聯
學生編號 |
課程名稱 |
分數 |
1 |
語文 |
150 |
2 |
物理 |
100 |
第三范式
表中每列字段都要跟數據表主鍵直接關聯,不要出現傳遞依賴
學生編號 |
學生姓名 |
課程編號 |
課程名稱 |
代課老師 |
分數 |
1 |
張雷 |
1 |
語文 |
劉老師 |
150 |
2 |
趙芬 |
2 |
物理 |
周老師 |
100 |
課程名稱、代課老師和分數 不符合第三范式,這些字段依賴課程編號,課程編號依賴學生編號,存在傳遞依賴.且課程相關繼續拓展字段,會產生更多的依賴
學生分數記錄表
學生編號 |
課程編號 |
分數 |
1 |
2 |
150 |
2 |
1 |
100 |
課程相關表
課程編號 |
課程名稱 |
代課老師 |
1 |
語文 |
劉老師 |
2 |
物理 |
周老師 |
題外話
專注能力和自我定位很重要。如果不是被迫成為全棧工程師,盡量把精力集中在自己擅長的領域,如果你想縱向發展,就專注某一個技術點成為No1。如果你想獨當一面,可以獨自完成一個項目,為創業做準備可以考慮把視野放開,創業前期,你所有會的技能都能幫你抵御一些投入成本和風險。(專業的事交給專業的人做、合作共贏這兩句話絕對沒錯,但是大部分人白手起家創業,都不具備這種前提條件...)
作者:winyh
鏈接:
https://juejin.cn/post/7168822614096347172