商城 商品模塊 數據庫 表設計

要實現一個商城,對於商品模塊中的數據庫表設計不懂,主要是:相同類別的產品的產品參數相同,不同類別的不同,這裏就不懂要怎麼設計了,所以上網找幾篇博客瞭解


 

 


什麼是SPU、SKU、ARPU

這是一篇存檔性筆記,我自己存檔一下對這3個詞的理解。如果你已經明瞭了這3個詞的意思,請直接忽略之

首先,搞清楚商品與單品的區別。例如,iphone是一個單品,但是在淘寶上當很多商家同時出售這個產品的時候,iphone就是一個商品了。

商品:淘寶叫item,京東叫product,商品特指與商家有關的商品,每個商品有一個商家編碼,每個商品下面有多個顏色,款式,可以有多個SKU。

SPU = Standard Product Unit (標準化產品單元)
  • 1

SPU是商品信息聚合的最小單位,是一組可複用、易檢索的標準化信息的集合,該集合描述了一個產品的特性。通俗點講,屬性值、特性相同的商品就可以稱爲一個SPU。

例如,iphone4就是一個SPU,N97也是一個SPU,這個與商家無關,與顏色、款式、套餐也無關。以化妝品爲例,下圖是拍拍商城給出的SPU信息: 
這裏寫圖片描述

在商品信息電子化過程中,商品的特性可以由多個“屬性及對應的屬性值對”進行描述。“屬性及對應的屬性值對”完全相同的商品,可以抽象成爲一個SPU。同 時,這些“屬性及對應的屬性值對”也在SPU中固化下來,逐步標準化。基於SPU的商品信息結構,可以實現豐富的應用,比如商品信息與資訊、評論、以及其 它SPU的整合。

P.s:從這個意義上講,我認爲比較購物的產品庫以SPU爲標準來建立是最合適的。

SKU=stock keeping unit(庫存量單位)
  • 1

SKU即庫存進出計量的單位, 可以是以件、盒、托盤等爲單位。在服裝、鞋類商品中使用最多最普遍。 例如紡織品中一個SKU通常表示:規格、顏色、款式。

也有人解釋說SKU就是庫存的最小單位,在服裝行業,正常情況是“單款單色單碼”,國內品牌有把“單款單色”當做一個SKU、也有把“單款”的幾個色當一個SKU、也有把一塊麪料的幾個個款式當一個SKU,這些都是誤讀。

同時,引申出另外一個概念:SKC:單款、單色。如果一定要打比方的話:SKC是一個桔子,SKU是一瓣桔子,但不管怎麼說,一個桔子是桔子,一瓣桔子也是桔子。

不過,SKU是物理上不可分割的最小存貨單元。在使用時要根據不同業態,不同管 理模式來處理。比如一香菸是50條,一條裏有十盒,一盒中有20支,這些單位就要根據不同的需要來設定SKU。比如倉儲批發式大賣場,一定是按照一箱來設 定的。普通大賣場一定是按照條來設定的。菸酒專賣店一定是按照盒來設定的。過去上海等地的街邊小店一定是按一支來設定的。這樣一支就是煙的最小零售單位。 但要根據自己的業態和服務模式來設定。

P.s:關於什麼是SKU、SKC,可以參考阿福先生的這篇博客

【總結一下】:SPU是標準化產品單元,區分品種;SKU是庫存量單位,區分單品;商品特指與商家有關的商品,可對應多個SKU

ARPU=Average Revenue Per User(每用戶平均收入)
  • 1

ARPU注重的是一個時間段內運營商從每個用戶所得到的利潤。因此,高端的用戶越多,ARPU越高。在這個時間段裏,從運營商的運營情況來看,ARPU值高說明利潤高,這段時間效益好。

原文地址:http://www.ikent.me/blog/3017


PHP商城 商品模塊 數據庫 表設計

這裏寫圖片描述

表關係: 
分類表 <= 商品表 <= SKU表(庫存表) 
分類表 <= 屬性名 <= 屬性值 
商品表 <= 商品和屬性關係表 => 屬性名|屬性值

業務邏輯: 
1.同一商品不同SKU庫存和售價不同. 
2.不同類型的商品具有不同的屬性名和屬性值(如汽車和服飾),所以屬性需要支持後期添加和維護. 
3.在某個商品分類下通過屬性篩選商品. 
4.商家某件商品的銷量統計,該件商品內幾個不同SKU的銷量統計. 
5.更多…

分類表:
(商品分類編號, 分類名稱, 父分類編號)
(1, 男裝, 0)
(2, 褲子, 1)
(3, 外套, 1)
(4, 內褲, 1)
(5, 襪子, 1)

商品表:
(商品編號, 商品名稱, 商品分類編號, 賣家編號, SPU銷量, 評論數)
(1, '褲子名', 2, 1, 0)
(2, '外套名', 3, 1, 0)
(3, '內褲名', 4, 1, 0)
(4, '襪子名', 5, 1, 0)

SKU表(庫存表):
(SKU編號, 商品編號, SKU屬性, 價格, 庫存, SKU銷量)
(1, 1, [1:1,2:3], 99, 400, 0) 其中 [1:1,2:3] 表示 "顏色爲黑色,尺碼爲X"
(2, 1, [1:1,2:4], 99, 200, 0) 其中 [1:1,2:4] 表示 "顏色爲黑色,尺碼爲XL"
(3, 1, [1:2,2:3], 99, 300, 0) 其中 [1:2,2:3] 表示 "顏色爲白色,尺碼爲X"
(4, 1, [1:2,2:4], 99, 100, 0) 其中 [1:2,2:4] 表示 "顏色爲白色,尺碼爲XL"
上面只列出商品1這個分類的4個SKU.

屬性名:
(屬性名編號, 屬性名, 商品分類編號, 父屬性編號)
(1, 顏色, 2, 0)
(2, 尺碼, 2, 0)
(3, 品牌, 2, 0)
上面只列出褲子這個分類的3個屬性名.

屬性值:
(屬性值編號, 屬性值, 屬性名編號)
(1, 黑色, 1)
(2, 白色, 1)
(3, X,  2)
(4, XL, 2)
(5, 七匹狼, 3)
(6, 九牧王, 3)
上面只列出褲子這個分類的6個屬性值.

商品和屬性關係表:
(自增編號, 商品編號, 屬性名編號, 屬性值編號)
(1, 1, 1, 1) 商品1顏色爲黑色
(2, 1, 1, 2) 商品1顏色爲白色
(3, 1, 2, 3) 商品1尺碼爲X
(4, 1, 2, 4) 商品1尺碼爲XL
上面只列出商品1的4個屬性關係.

商品和屬性篩選表:
(商品編號, 商品具有的屬性值編號)
(1, [1,2,3,4])
用SQL全文檢索實現篩選.
如:
select * from 商品表 
inner join 商品和屬性篩選表 
on 商品表.商品編號 = 商品和屬性篩選表.商品編號
where 商品表.商品分類編號 = 2 
and 商品和屬性篩選表.商品具有的屬性值編號 MATCH '1 3'
order by 商品表.評論數 DESC LIMIT 10 OFFSET 20;

商品搜索表:
(商品編號, 商品標題和內容)
(1, [無需詞典,二元分詞])
用SQL全文檢索實現搜索.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

裏面有這麼一些表結構設計思想: 
名值: id, name, value (用於實現自定義字段如屬性的存儲) 
父子: id, pid (用於實現關係樹如分類和子分類的存儲) 
其中”名值”的思想應該就是EAV(Entity-Attribute-Value)實體屬性值模型思想. 
留意過WordPress數據表的也會看到類似設計: 
wp_postmeta(meta_id,post_id,meta_key,meta_value) 
wp_commentmeta(meta_id,comment_id,meta_key,meta_value) 
wp_usermeta(umeta_id,user_id,meta_key,meta_value) 
wp_options(option_id,option_name,option_value,autoload) 
“父子”存儲無限極分類: 
wp_term_taxonomy(term_taxonomy_id,term_id,taxonomy,parent)

上面提到的無需詞典的二元分次算法示例: 

<?php 
function cws($str) { 
//找出字符串中的英文單詞和數字 
if(preg_match_all('%[A-Za-z0-9_-]{1,}%', $str, $matches)) { 
$arr = $matches[0]; 

//以非中文(中文包括簡體和繁體)進行正則分割 
$sections = preg_split('%[^\x{4e00}-\x{9fa5}]{1,}%u', $str); 
foreach($sections as $v) { 
//注意:foreach中多次正則匹配會降低性能 
switch(true) { 
case ($v === ''): continue; break; 
case (mb_strlen($v, 'UTF-8') < 3): $arr[] = $v; break; 
case (preg_match_all('%[\x{4e00}-\x{9fa5}]%u', $v, $matches)): 
//前後倆倆組合,實現冗餘分詞. 
//如"中國好聲音"將被分詞爲: 中國 國好 好聲 聲音 
$size = count($matches[0]); 
for($i = 0; $i <= $size-2; $i++) { 
$word = ''; 
for($j = 0; $j < 2; $j++) { 
$word .= $matches[0][$i+$j]; //echo $i.' '.$j.' '.$matches[0][$i+$j]."\n"; 

$arr[] = $word; //echo "\n"; 

break; 


return array_unique($arr); 

© 著作權歸作者所有 
分類:工作日誌 字數:1050 
標籤: 商品庫 商城 SKU SQL 數據庫設計

原文鏈接:https://my.oschina.net/eechen/blog/857845

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章