B端產品數(shù)據(jù)庫設計的原則
本文結合實戰(zhàn)經驗,列舉了數(shù)據(jù)庫設計中一般容易犯的錯誤,以及產生的后果。
今天我們來說說B端產品失敗的主要原因之一,產品的業(yè)務建模以及數(shù)據(jù)庫設計不合理。
B端產品的數(shù)據(jù)庫設計究竟有多重要呢?怎么說呢,如果產品定位決定了一個產品有沒有市場,那么數(shù)據(jù)庫的設計很多時候決定了這個產品能夠走多遠的問題,數(shù)據(jù)庫的設計合理性是一個產品好壞最重要的指標之一。關于數(shù)據(jù)庫設計步驟以及規(guī)范的技術文章已經很多了,今天我更多偏產品以及業(yè)務層面來解釋一下其重要性。
有些從C端轉型來做B端的產品技術人可能會不以為然,數(shù)據(jù)庫設計有這么重要嗎?
實際上B端產品數(shù)據(jù)庫設計的合理性要比C端產品數(shù)據(jù)庫設計的合理性重要很多,C端產品一般來說業(yè)務相對簡單,數(shù)據(jù)之間的耦合度低,很多用非關系型數(shù)據(jù)來進行支持,數(shù)據(jù)庫的設計相對簡單,即使前期設計不當,后期調整起來問題也影響不大。而B端產品,業(yè)務復雜,數(shù)據(jù)關系聯(lián)系也多,一般用關系型數(shù)據(jù)庫來進行支持,設計好一個復雜B端產品的數(shù)據(jù)庫結構,難度是不小的。
數(shù)據(jù)庫設計一般容易犯哪些錯誤以及產生哪些后果呢,我在這里說明幾個常見的非技術規(guī)范方面的問題:
1. 數(shù)據(jù)表格中放置了大量的冗余字段
在TO C產品設計的時候,我們?yōu)榱藬?shù)據(jù)的讀取速度,避免關聯(lián)表格讀取信息,表格里面放置大量的冗余信息字段。
在TO B場景中,往往數(shù)據(jù)量不如TO C,大多數(shù)情況性能不會成為瓶頸,如果放置很多冗余字段,會導致后端邏輯的耦合度極其高,后續(xù)的可擴展性以及維護成本極高(B端產品因為業(yè)務復雜,可擴展性以及可維護性是極其關鍵的指標)。這里面說的冗余字段主要包含二類:
- 第一類是業(yè)務對象的屬性字段,作為基本數(shù)據(jù)進行維護。如果這些屬性字段在多個地方冗余,會導致基本數(shù)據(jù)更新的時候,需要更新其他表格大量的數(shù)據(jù)。
- 一類是一些可以被其他字段計算出來的字段,如果這些字段也保存在數(shù)據(jù)庫實體表中,會導致只要參與計算的字段發(fā)生變更的時候,都需要更新這個冗余字段,增加后臺邏輯耦合度。
2. 屬性字段關聯(lián)的對象錯誤
屬性字段需要和什么對象關聯(lián)需要反復斟酌,比如說在ERP中,常見對象有商品,顧客,訂單,庫存等等,哪一些屬性字段放在哪個業(yè)務對象是最合適?是否需要抽象出新的對象來放置屬性字段,這里面衡量各種方案的一個原則就是,看哪個方案最終可以讓綜合數(shù)據(jù)量最小,一般來說就是最佳方案。
3. 對象之間一對一,一對多,多對多關系設置的錯誤
對應關系一旦錯誤,已經有客戶上線之后,后續(xù)要調整,涉及到老客戶的數(shù)據(jù)遷移,是極其痛苦的。常見的,比如說用戶與角色的對應關系,如果用戶角色前期設置了一對一的關系,在復雜業(yè)務系統(tǒng)中,用戶權限復雜的時候,很有可能最終導致需要設置大量角色來滿足用戶功能權限的需求。如果允許一對多的關系,只需要配置幾個可以組合成所有用戶權限的基本角色就可以了。
4. 隨意的增加字段
經??吹降哪J?,是需求人員拿到需求以后給到開發(fā)人員,說我需要一個什么功能,然后開發(fā)人員考慮一下實現(xiàn)方式,很隨意的增加了幾個字段。這個功能應該做嗎(對于功能優(yōu)先級的判斷,請參考前面一篇文章《如何定義B端產品的MVP》上、下)?應該做成怎樣才是最佳方案?數(shù)據(jù)庫對未來業(yè)務的兼容性如何?這些內容都沒有考慮,如此持續(xù)研發(fā)多年,離一個好產品就越來越遠了。
這里有一個原則要注意的就是,數(shù)據(jù)庫不要隨意的增加字段,每個字段或者表格的增加要極其謹慎,因為對于產品來說,增加字段容易,對于老的版本兼容性是沒有問題。但是如果一旦增加了字段,后面要去掉或者調整,難度極大,這里面的工作量包括用戶數(shù)據(jù)的遷移,以及原來邏輯中涉及到需要調整的字段的部分。
另外對于SaaS產品來說,一些基本數(shù)據(jù),比如說城市,戶口類型,國家,以及一些國家,地方規(guī)定的政策等規(guī)則或者參數(shù),這樣的數(shù)據(jù)不要做成跟客戶掛鉤的數(shù)據(jù),盡量做成跨客戶的基本數(shù)據(jù)表,這樣做好處,一是數(shù)據(jù)可以統(tǒng)一,將來統(tǒng)計的時候極其方便,第二是如果需要更新,一次性更新就可以了,不需要一家家客戶的去進行更新。
數(shù)據(jù)庫的設計不當,會經常導致后續(xù)在面對新增業(yè)務的時候,很難用一套數(shù)據(jù)結構來支持多種業(yè)務情況,如果因此而產生了多個產品版本,就會比較糟糕了,會有如下后果:
- 維護多個產品版本成本很高,如果想要統(tǒng)一版本涉及數(shù)據(jù)遷移,用戶教育等等,難度極大。
- 現(xiàn)在都在努力挖掘客戶數(shù)據(jù)的價值,如果數(shù)據(jù)庫不統(tǒng)一,后續(xù)在做跨客戶的數(shù)據(jù)分析或者統(tǒng)計的時候難度極大。
- 和外部第三方合作需要建立標準接口難度大。
- 人員流動導致除了最新版本,沒有人知道老版本的功能是怎樣的。
- 老用戶體驗差,口碑很難維持。運營部門在客戶服務的時候碰到極大難度,用戶的流失率會大大增加。
…….
上面的這些情況綜合的結果,上線的客戶越多,最后產品越走不動,所有的研發(fā)力量只能進行版本的維護,以及小修小改。當然這樣的團隊繼續(xù)做大規(guī)模的產品開發(fā),也是不太合適的。如果已經產品面臨這樣的情況,應該怎樣來應對,后續(xù)我們再來寫對應文章進行分析。
最后要說的一點就是,現(xiàn)在很多公司的數(shù)據(jù)庫設計都在放在下面的普通開發(fā)身上,對于這樣核心關鍵的內容,建議要最好的人類似DataArchitect的角色來把關,如果沒有類似能力的角色,數(shù)據(jù)庫的設計要經常有架構師,核心開發(fā),產品經理等人組成小組來周期性的進行討論和檢查。
作者:李東林(微信公眾號:SaaS產品說;微信號:jianguzhuxin),原ADP大中華區(qū)產品負責人,14年To B研發(fā)與產品設計,團隊管理經驗,主導過多款大型企業(yè)管理軟件的設計、研發(fā)、上線,也有過2年移動互聯(lián)網(wǎng)TO C的創(chuàng)業(yè)經驗。
本文由@李東林 原創(chuàng)發(fā)布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash, 基于CC0協(xié)議。
像推薦權重分的計算涉及到數(shù)據(jù)庫數(shù)據(jù)的計算,若前期不早計算出來進行保存,那會存在進入該頁面會存在數(shù)據(jù)加載慢的問題。但是每次計算保存,又會存在數(shù)據(jù)庫冗余的情況,是不是說這時候的計算的數(shù)據(jù)是虛擬保存,過24小時后進行清理
樓主寫的好專業(yè),質量超棒但是作為一個新手產品還是花了好久時間詢問了開發(fā)和產品同事才理解里面的內容。
有個小小的建議真切希望樓主可以加入一些更通俗易懂的示例輔助,讓我們這種新手可以快速的get到樓主想要表達的內容及實操時的標準;因為初步理解意義其實還簡單些但是在之后的實操中把我找到實操的標準就比較難控制的太嚴不好、放的太松了也不好這就很煩惱了,明明是根據(jù)大佬的規(guī)則來操作的為什么還是會出問題呢~~可能就是我們理解的不夠透徹只存在于初步理解。
??狗頭保命
有更新關于冗余字段解決方案沒?
歡迎大家關注公眾號saas產品說
樓主寫得不錯
現(xiàn)實往往是很殘酷的!DBA 現(xiàn)在很多變成數(shù)據(jù)庫的運維了!
作為ERP的產品經理,這方面的內容是真的深有感觸,當?shù)讓記]有設計好,后續(xù)需要調整起來會非常的麻煩。所以每次都需求都會竟可能的和技術一起溝通,形成最優(yōu)的方案。
作為ERP研發(fā)的pm,深有感觸
數(shù)據(jù)庫基本知識,對于小白很實用