產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

5 評論 13577 瀏覽 193 收藏 14 分鐘

本文基于RBAC權(quán)限管理模塊為例子,以產(chǎn)品經(jīng)理的視角,一步步完成數(shù)據(jù)庫邏輯設(shè)計實踐,希望能給大家?guī)硪稽c啟發(fā)!

我畢業(yè)后進入了一家B端公司做產(chǎn)品,在臨近轉(zhuǎn)正的時候,要考核的一點是SQL查詢語言的運用能力,因為工作中需要經(jīng)常查詢數(shù)據(jù)來輔助分析,而以往呆過的公司都不需要產(chǎn)品經(jīng)理很懂數(shù)據(jù)庫,只要會基本的SQL查詢即可,就一直沒有進一步了解它。

但現(xiàn)在隨著公司對產(chǎn)品經(jīng)理的要求越來越高,尤其是B端產(chǎn)品經(jīng)理,懂基本的數(shù)據(jù)庫設(shè)計是個很好的加分項。最近看到招聘網(wǎng)站上一家知名的B端公司jd里,對產(chǎn)品經(jīng)理崗位的其中一條要求是:“了解主流數(shù)據(jù)庫的原理,具備較強的數(shù)據(jù)庫設(shè)計能力”。這種能力我們可以理解為基礎(chǔ)的數(shù)據(jù)庫邏輯設(shè)計能力。

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

而數(shù)據(jù)庫分為關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,本文主要討論的是關(guān)系型數(shù)據(jù)庫。

  • 關(guān)系型數(shù)據(jù)庫是依據(jù)關(guān)系模型來創(chuàng)建的數(shù)據(jù)庫,所謂關(guān)系模型就是“一對一、一對多、多對多”等關(guān)系模型,比如一個學(xué)號對應(yīng)一個學(xué)生,一個班級對應(yīng)多個學(xué)生,多個老師對應(yīng)多個學(xué)生。一個關(guān)系型數(shù)據(jù)庫是由二維表及其之間的聯(lián)系組成的一個數(shù)據(jù)組織。
  • 非關(guān)系型數(shù)據(jù)庫是一種相對松散且可以不按照嚴格的結(jié)構(gòu)規(guī)范進行存儲的數(shù)據(jù)庫。最常見的是鍵值對模型:存儲的數(shù)據(jù)是一個個“鍵值對”,比如age:18,那么age這個鍵里面存的值就是18。

拿知識星球來說,用戶發(fā)了一條動態(tài),數(shù)據(jù)庫會建立一個索引,并將此動態(tài)存入數(shù)據(jù)區(qū)中。如果用戶刪掉此動態(tài),數(shù)據(jù)庫首先會刪掉索引區(qū)的索引,數(shù)據(jù)區(qū)中的動態(tài)根據(jù)數(shù)據(jù)庫的存儲性能和容量可能會保留一段時間,保留的那段時間的狀態(tài)是假刪除,也叫邏輯刪除。如果用戶再新發(fā)布一條新的動態(tài),新的索引和動態(tài)會直接覆蓋上一條假刪除的數(shù)據(jù),此時就是真刪除了,也叫物理刪除。

為了防止覆蓋數(shù)據(jù)后變真刪除,還能這么設(shè)計:即把用戶假刪除的數(shù)據(jù)打上標記,存在另一個數(shù)據(jù)庫表中,當要恢復(fù)數(shù)據(jù)的時候再修改標記。

基本原理弄清楚了,接下來就要思考,怎么去設(shè)計了。

1. 什么是數(shù)據(jù)庫設(shè)計?

簡單來說,數(shù)據(jù)庫設(shè)計是根據(jù)業(yè)務(wù)系統(tǒng)的具體需要,結(jié)合我們所選用的數(shù)據(jù)庫管理系統(tǒng),為這個業(yè)務(wù)系統(tǒng)構(gòu)造出最優(yōu)的數(shù)據(jù)存儲模型。并建立好數(shù)據(jù)庫中的表結(jié)構(gòu)以及表與表之間的關(guān)聯(lián)聯(lián)系的過程。使之能有效的對應(yīng)系統(tǒng)中的數(shù)據(jù)進行存儲,并可以高效的對已經(jīng)存儲的數(shù)據(jù)進行訪問。

2. 為什么要進行數(shù)據(jù)庫設(shè)計?

數(shù)據(jù)庫相當于一個大樓的地基,如果地基打好了,大樓就會穩(wěn)固,否則就很容易轟然倒塌。

那么好的數(shù)據(jù)庫設(shè)計和糟糕的數(shù)據(jù)庫設(shè)計有什么特點呢?

3. 數(shù)據(jù)庫設(shè)計的步驟是什么?

(1)需求分析

第一步要進行需求分析,梳理出系統(tǒng)中所要存儲的數(shù)據(jù)屬性、存儲特點和生命周期。

比如有的數(shù)據(jù)有時效性,有的數(shù)據(jù)無時效性。有實效性的數(shù)據(jù)可以采取過期清理的方式來進行存儲,比如小米云服務(wù)里的用戶主動刪除的照片、視頻、便簽等數(shù)據(jù)會進入回收站保留一定期限,到期后回收站自動清空。

還有的數(shù)據(jù)增長很快數(shù)據(jù)量也很大,但不是核心數(shù)據(jù),那就可以采用分庫分表的方式進行存儲,也叫數(shù)據(jù)庫表的水平拆分。

比如我前公司的一個大客戶給他們的用戶發(fā)了大量的郵件,系統(tǒng)會不斷的返回相關(guān)的狀態(tài)信息數(shù)據(jù),這些數(shù)據(jù)都在一張表里,當這些數(shù)據(jù)達到百萬甚至千萬級別時,用戶查詢數(shù)據(jù)的效率和速度都會降低,在界面上的體現(xiàn)是會發(fā)現(xiàn)搜索或跳轉(zhuǎn)頁面的時候特別卡,這個時候?qū)?shù)據(jù)庫進行分庫分表就是個不錯的方案。

舉一個我以前做的RBAC權(quán)限管理功能為例子,這個功能包括組織架構(gòu)模塊、角色模塊、菜單權(quán)限模塊、人員管理模塊這四個核心模塊,復(fù)雜一點的還會有其他模塊,在這里不做說明。

我們設(shè)計好原型圖之后,可以梳理出各個模塊實體的主鍵、外鍵以及其他的屬性。其中主鍵是唯一標識一條記錄的,比如每個學(xué)生的學(xué)號是唯一的,學(xué)號就是一個主鍵。外鍵是用來和其他表建立聯(lián)系用的,A表的外鍵往往是B表的主鍵。

組織架構(gòu)模塊:

  • 包含的屬性:組織id(一般不在前端展示)、組織機構(gòu)類型、機構(gòu)名稱、單位類型、聯(lián)系人、郵箱、電話等等
  • 可選唯一標識的屬性(又稱主鍵):組織id或機構(gòu)名稱
  • 存儲特點:永久存儲

角色模塊:

  • 包含的屬性:角色id、角色分類、角色名稱、角色描述、角色排序id、創(chuàng)建人、創(chuàng)建時間等等
  • 可選唯一標識的屬性:角色id或角色名稱
  • 存儲特點:永久存儲

菜單權(quán)限模塊:

  • 包含的屬性:菜單id、菜單排序id、菜單名稱、菜單路徑url等等
  • 可選唯一標識的屬性:菜單id或菜單名稱
  • 存儲特點:永久存儲

人員管理模塊:

  • 包含的屬性:用戶id、姓名、單位職務(wù)、級別、手機號、登錄名等等
  • 可選唯一標識的屬性:人員id
  • 存儲特點:永久存儲

(2)邏輯設(shè)計

第二步是邏輯設(shè)計,也是產(chǎn)品經(jīng)理要重點學(xué)習的。

我們將上述模塊的需求轉(zhuǎn)化為數(shù)據(jù)庫的邏輯模型,一般用ER圖表示。

簡易版可以在紙上畫出來,作為初稿:

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

輸出的圖例規(guī)范如下:

矩形表示實體集,菱形表示聯(lián)系集,橢圓表示實體的屬性,線段表示兩者之間的連接。

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

運用數(shù)據(jù)庫范式設(shè)計具體的表:

數(shù)據(jù)庫的范式有很多種,包括第一范式、第二范式、第三范式等等,這些設(shè)計范式的晦澀的術(shù)語定義不會出現(xiàn)在本文中。直接用相關(guān)的案例將它們描述出來,相信能夠被更多人看懂。

第一范式:

采用這種范式設(shè)計出來的是一張二維表,且這種二維表的字段是不可以繼續(xù)再分的,比如“聯(lián)系方式”字段下面不能再拆分為“郵箱”和“電話”兩個字段。這也是最簡單且最容易遵守的一種范式。舉個例子,下面的表格就是符合第一范式的。

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

第二范式:

這種范式是在第一范式的基礎(chǔ)上定義的,下面的表中結(jié)合了組織架構(gòu)和人員管理兩張表的屬性。

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

所以符合第二范式的表如下:

【人員管理表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

【組織架構(gòu)表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

【關(guān)聯(lián)表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

第三范式:

這種范式是在第二范式的基礎(chǔ)上定義的,下面這張表包含了組織架構(gòu)、人員管理和角色管理這三張表的屬性。

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

大家可以看到,一個組織架構(gòu)下面會有很多用戶,一個用戶也會有很多角色。所以按照第三范式設(shè)計的表如下:

【人員管理表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

【組織架構(gòu)表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

【角色表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

【關(guān)聯(lián)表】

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

小結(jié):第一范式和第二范式的區(qū)別在于有沒有分出兩張表,第二范式是說一張表中包含了多種不同的實體屬性,那么必須要分成多張表, 第三范式是要求已經(jīng)分成了多張表,那么一張表中只能有另一張表中的主鍵,而不能有其他的任何信息(其他的信息一律用主鍵在另一表中查詢)。

其實除了以上三個范式,還有第四、第五、BC以及反范式化設(shè)計,這里不做擴展,有興趣的可以自行查詢了解。

綜上,結(jié)合范式和ER圖輸出的表結(jié)構(gòu)如下:

產(chǎn)品經(jīng)理的技術(shù)進階:數(shù)據(jù)庫邏輯設(shè)計

為了方便理解,表中的屬性字段命名我寫成了中文,實際上在數(shù)據(jù)庫里都是英文,比如用戶id可以命名為UserId,命名的工作在物理設(shè)計中進行,一般是架構(gòu)師去處理。

(3)物理設(shè)計

第三步是物理設(shè)計,一般是架構(gòu)師做的事,產(chǎn)品經(jīng)理簡單了解下即可,同樣也不做擴展說明。

  • 選擇合適的數(shù)據(jù)庫管理系統(tǒng)
  • 定義數(shù)據(jù)庫、表及字段的命名規(guī)范
  • 根據(jù)所選的數(shù)據(jù)庫管理系統(tǒng)選擇合適的字段類型。

結(jié)尾

了解了以上的知識并不能使你精通數(shù)據(jù)庫,尤其是像這種底層的東西,僅靠一篇文章是很難完全掌握的。比如在業(yè)務(wù)需求、性能和數(shù)據(jù)冗余之間達到一個平衡就需要深厚的數(shù)據(jù)庫功底。

但通過本文可以了解最基礎(chǔ)的數(shù)據(jù)庫邏輯設(shè)計應(yīng)該怎么做,會對業(yè)務(wù)系統(tǒng)的技術(shù)實現(xiàn)有更深刻的認識,若有SQL基礎(chǔ)則能更容易理解。

 

本文由 @葩說產(chǎn)品 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 求樓主推家相關(guān)書籍,或者你開課講一講,付費學(xué)習

    來自云南 回復(fù)
  2. 太厲害了 想請問下樓主是學(xué)過程序方面的技術(shù)么 如果沒有的話這些知識是如何進行學(xué)習的呢

    來自廣東 回復(fù)
    1. 看書

      來自廣東 回復(fù)
  3. 牛皮

    來自北京 回復(fù)
  4. 講得非常清楚點贊 ??

    來自廣東 回復(fù)