實體聯系模型|如何用ER圖繪制業務實體(更新了一下配圖)

24 評論 110137 瀏覽 422 收藏 6 分鐘

當你設計一個新的功能模塊,服務端童鞋一定會追問你具體有哪幾種實體以及之間的關系,如果你沒想清楚或者描述含糊,那么就有必要學習一下ER圖。

你是否碰到過類似的問題?

  • 設計優惠券模塊,有幾個概念容易混淆。比如運營新建的一批優惠券,然后用戶領了其中一張優惠券,而這一張有可能可以多次使用(比如uber)。請問這3種分別是什么,之間的關系,以及如何區分這3者……
  • 設計商品模塊,spu、sku、商品很容易混淆,更進一層有商品條形碼、商品編碼等等。怎么和服務端童鞋解釋清楚他們是一件很頭疼的事情。
  • 更復雜一點,如果設計商城系統,服務端童鞋會問你這個商城的怎么搭建,核心有哪些東西。

這些問題該怎么解決?

其實這些看似復雜的問題,作為PM先用ER圖來梳理清楚,再和服務端確認是最合適的工作方法。你要知道文字很難描述清楚。而原型線框圖無法直接表現這些。

ER圖是什么?

先說概念,ER圖是用來描述現實世界中的實體關系模型,所謂實體是指客觀上或者邏輯上存在并且可以區分的人事物。

ER圖有什么作用?

ER圖會促使你以最適合技術理解實現的方法,來規范的描述功能模塊的核心要素,其實就是數據庫的物理結構。而這種描述是無二義的,最清晰傳達PM的設計思想。

優惠券的ER圖

拿上面的案例1來畫一張ER圖,這樣子表述就很清晰,其中聯系“生成”屬性可以不畫。

當然如果業務不一樣,比如限定每張領到的券和線下商場一樣只能用一次。那圖應該是這樣,注意區別。

ER圖包含哪幾種要素?

實體

是指客觀上或者邏輯上能夠相互區分的事物。

在ER圖中用矩形表示,矩形框內寫明實體名。

屬性

實體所具有的某一特性,一個實體可由若干個屬性來刻畫。

在ER圖中用橢圓形表示,并用無向邊將其與相應的實體連接起來。

聯系

也稱關系,反映實體內部或實體之間的關聯。實體內部的聯系通常是指組成實體的各屬性之間的聯系;實體之間的聯系通常是指不同實體集之間的聯系。

在ER圖中用菱形表示,菱形框內寫明聯系名,并用無向邊分別與有關實體連接起來,同時在無向邊旁標上聯系的類型(1 : 1,1 : n或m : n)。

連接線

實體與屬性之間;實體與聯系之間;聯系與屬性之間均用直線相連,并在直線上標注聯系的類型。

ER圖該怎么畫?

要素如何表示

畫圖步驟

  • 首先確定這個模塊有哪幾個核心的對象以及具體有哪些特征,
  • 其次思考這些對象之間的關系,如何相互轉變。
  • 最后把他們用ER圖的方法表述出來。
  • 當然需要盡量精簡實體以及優化屬性。

接下來把最開始的2個案例也畫一下,方便大家理解。

B2C商城的商品模塊

B2C商城的系統

注意里面有個倉庫的概念。

總結

ER圖是一種高效傳達功能的手段,狀態機也是。千萬不要以為不學會就沒辦法做產品,但是學會了這些方法之后,對于設計和實現層面會有極大的效率提升。

#專欄作家#

浪子,業務型PM。公眾號langzisay,人人都是產品經理專欄作家。

本文原創發布于人人都是產品經理。未經許可,禁止轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 一個學生對應班級,一個班級可以有多個學生。兩個框框從兩頭解讀一個是1.1一個是1對多。到底咋寫

    回復
    1. 你的實體‘學生’的含義是什么?

      來自北京 回復
    2. 你從兩頭解讀完,有多的那一邊自然是多,而兩邊都解讀為1的,自然是一了

      來自遼寧 回復
  2. 受教了,寫的真好!

    來自廣東 回復
  3. 浪子,你好。訂單和sku,會不會是n:m的關系呢?圖中畫的1:n,個人認為不太對

    來自湖北 回復
  4. 寫的真好

    回復
  5. 大神寫的很好,很有用。有點疑惑,請教大神,B2C商城的那張圖里面,sku 和訂單的關系,sku 和購物車的關系 大神畫的是n:1,我怎么理解是1:n,一個sku 可以加入不同的購物車,加入不同的訂單。不知是否理解有誤?

    來自北京 回復
    1. 1購物車后面對的是1個用戶,也就是1個用戶對應1個購物車,1個購物車有很多sku。這是我的理解,不一定對哈

      來自四川 回復
    2. 嚴謹

      來自江蘇 回復
    3. 我的理解是:從不同的角度去看待會有不同的關系,若是對于管理系統來說,這里的關系就是:一類sku會對應放在多個不同的購物者的購物車中。但要從購物者的角度出發,關系確實是:將多個不同的sku放在一個自己的購物車中。

      來自山西 回復
  6. 打擾大神,我有個地方不懂:菱形表示關系,矩形表示實體,實體可以用屬性來刻畫,請問關系也可以用屬性來刻畫嗎?如果可以,那它刻畫的是兩個實體共有的屬性嗎?

    來自上海 回復
    1. 我在其他文章中看到過,這類描述兩個實體間關系的屬性被稱為“聯系屬性”,我個人的理解是:“聯系屬性”并不是兩個實體共有的屬性,而是這兩個實體間產生聯系之后所形成的整體才具備的屬性,就像是餃子,可以把“肉餡”看作為一個實體,把“面皮”看做另一個實體,這兩個實體產生“包餃子”的關系后形成的“餃子”才具備應有的“皮薄餡嫩”屬性。

      來自山西 回復
  7. 每一篇文章反復看了三遍,收獲很大,感謝分享

    來自廣東 回復
  8. 不是技術出身的我,沒看懂m、n、1是什么意思,能針對這點再解釋下嗎?

    來自廣東 回復
    1. 1:n意思是1對多,1:1意思是1對1,m:n意思是多對多,舉個上面的例子:用戶和購物車是1:1,也就是一個用戶只能有一個購物車,其余類似。

      來自上海 回復
  9. 有推薦的免費的工具能畫ER的嗎

    來自北京 回復
    1. axure感覺就夠了,visio也可以。

      來自上海 回復
    2. chrom 的gliffy

      來自北京 回復
  10. 建議再深一點,把數據關系除了這個1:N,N:M之外也加上他們之間的數據關系。

    來自北京 回復
    1. 可以有,只是覺得用的比較少。

      來自浙江 回復
  11. 沒有說出:強包含、弱包含、關聯等關系

    來自北京 回復
    1. 是的,但是感覺APP設計中只要懂文中的知識點就夠用了。

      來自浙江 回復
  12. 感謝,大學學的東西又用起來了

    來自浙江 回復
  13. 寫的不錯,下次再長點,深點

    回復