前言 程序員
在電商系統中,商品模型相當重要,是整個電商的核心,下面經過一個簡單的分析,設計一個基礎的商品模型。 網站
商品模型的演化 搜索引擎
在之前,那時CMS很流行,最多見的模型是欄目-文章模型。因而作電商的時候,天然就繼承了這種一對多的關係。只是欄目變成了分類,文章變成了商品。商品也具有了獨特的業務屬性。如今不少電商網站上左側的菜單,也就是這個分類。 spa
後來咱們慢慢發現一個問題,只有分類並不能適應全部的需求,好比nike鞋和nikeT恤,用戶可能但願先看nike的全部商品,這個模型就不能知足。咱們想在這個關係中,加入「品牌」概念。因而: 設計
這樣基本用戶能夠在首頁上經過分類或者品牌找到本身想要的商品,也能夠直接查看熱門的商品和新上架的商品。可是問題也來了,用戶在進入分類後,展現在用戶面前的是不少不少商品,用戶但願再經過篩選查詢出更接近他目標的商品。因而優秀的產品設計師,設計出了相似這樣的UI: orm
用戶能夠經過這些篩選條件進一步縮小本身的目標範圍,那麼問題又來了,這樣的產品需求排在程序員面前,怎麼去實現它?通過分析,咱們找出了一個方法,咱們知道商品之間的屬性可能存在着較大的差異,好比牛仔褲它有版型、腰型、褲長等屬性;而電腦它有CPU、顯卡等屬性,各種商品的屬性是不一樣的。再進一步想,休閒褲也版型、腰型、褲長等屬性;臺式電腦或者筆記本電腦都有CPU、顯卡等屬性。因此咱們得出:一個分類對應若干屬性,而一個屬性,對應若干屬性選項,而一個具體商品又對應若干屬性選項(例如具體一條牛仔褲,他的褲長:7分,褲型:直筒)。有點繞,仔細品味一下。 blog
從圖上能夠看出,分類和屬性的關係(例如:「牛仔褲」分類下有褲型、褲長、版型等屬性)、屬性和屬性選項的關係(例如:褲長屬性有長款、九分褲、七分褲的選項)、商品和屬性選項的關係(例如某條牛仔褲的褲長是7分褲)。至此,咱們知道一個商品的分類、品牌以及它有什麼屬性和對應的屬性值。那麼經過篩選條件,天然就能夠查詢出指定的商品。這裏特別說一句,價格也是屬性,不要設想用商品表中的價格字段去作計算。這不利於查詢也增長了複雜度,讓商家編輯人員用屬性來設置並保證他的正確性。 繼承
有了這個模型,咱們大概就能夠看到如下界面(請不要太關注左邊,重點在右邊和下面): 索引
這個頁面展現商品的全部信息,按照以前的設計好像均可以知足。可是咱們彷佛感受錯過了什麼,在圖上右邊咱們發現該商品當前的顏色和尺寸,而且容許用戶能夠選擇其餘的顏色和尺寸。這給咱們帶來了疑惑,這裏的「顏色」和「尺寸」是什麼,一件商品的不一樣顏色不一樣尺寸是算一個商品仍是多個商品。通過思考後,咱們發現咱們混淆了兩個概念——「商品」和「貨品」。不一樣規格的貨品做爲獨立的商品。好比一條褲子的有L尺寸、M尺寸、一個U盤有16G仍是32G的,都是一樣的貨品,不一樣規格的商品。能夠認爲貨品和商品是一對多的關係。弄清了這個概念,處理這個需求就容易多了,這裏的「顏色」、「尺寸」咱們就做爲「規格」來處理,而紅色、黑色;L號、M號咱們視爲規格的選項或者說規格值。一件貨品對應若干規格,而具備某一規格值的貨品就是商品。 圖片
好了,如今好像差很少了。基於這個模型能夠知足基本的商品搜索、展現的需求。搜索引擎也能夠根據這個模型數據生成對應的商品索引,達到準確搜索的目的。商品模塊還會和其餘模塊一塊兒協做,好比用戶系統、訂單系統、支付系統等。通常狀況下咱們會把商品業務獨立出來作成「商品中心」的服務,集中處理商品查詢、更新、發佈等業務,支撐其餘業務。