在電子商城項目開發中, 會存在同一種商品存在不同規格的情況, 如圖某型號手機在售賣時用戶可以選擇的不同規格:
這裏商品的庫存量單位(SKU)便不再是該商品, 而是到具體屬性組合出的規格, 每種規格可能會有不同的售價、運費與庫存剩餘情況, 所以用戶在購買時, 不僅需要記錄所購買的商品 ID, 同時也需要記錄購買的該商品的具體規格。
直觀分析圖示中的規格情況, 網絡類型、機身顏色、機身內存 屬於商品不同屬性的名稱, 與之對應的爲屬性可選擇的的具體值, 屬於一對多關係, 在 MySQL 數據庫表結構中反應出爲:
# 商品屬性名 CREATE TABLE `item_attr_key` ( `attr_key_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, # 主鍵, 自增 ID `item_id` INT(10) UNSIGNED NOT NULL, # 關聯到商品 `attr_name` VARCHAR(50) NOT NULL, # 屬性名稱 PRIMARY KEY (`attr_key_id`) ); # 商品屬性值 CREATE TABLE `item_attr_val` ( `attr_key_id` INT(10) UNSIGNED NULL DEFAULT NULL, # 對應 item_attr_key 表的 attr_key_id, 完成一對多關聯 `item_id` INT(10) UNSIGNED NULL DEFAULT NULL, # 關聯到商品 `symbol` INT(10) NULL DEFAULT NULL, # 屬性編碼 `attr_value` VARCHAR(255) NULL DEFAULT NULL # 屬性值 );
加入數據後表內容如圖:
symbol 字段是對指定商品 ID 下的屬性值的一個序號標記, 是爲了提高在後面使用到時的檢索效率。該值在不同商品間可以重複, 在同一商品的屬性中需要保證唯一。
以上就完成了商品 ID 爲 6 的商品多屬性的存儲工作。
爲了能夠記錄和快速查詢出每種屬性組合出的商品的價格、庫存等信息, 我們還需要張表來維護這部分數據, 建立 item_sku 表:
# 商品庫存量單位表 CREATE TABLE `item_sku` ( `sku_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, # 主鍵, 自增 ID `item_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', # 關聯到商品 `attr_symbol_path` VARCHAR(255) NOT NULL, # 屬性組合出的規格路徑 `price` DOUBLE(15,2) NOT NULL DEFAULT '0.00', # 價格 `freight` DOUBLE(15,2) NULL DEFAULT '0.00', # 運費 `stock` INT(10) UNSIGNED NOT NULL DEFAULT '0', # 庫存數量 PRIMARY KEY (`sku_id`) );
該表是用戶在添加完商品屬性後, 由系統負責生成的該商品所有的可以選擇的屬性組合方案, attr_symbol_path 字段即是該商品不同屬性值的 symbol 字段組合後的路徑, 用來指示該規格具體指代哪些屬性。
如 attr_symbol_path 字段值爲 1,4,7, 則對應 item_attr_val 表中 item_sku.item_id = item_attr_val.item_id 條件下 symbol 字段值爲 1, 4, 7 的屬性組合: TD-LTE/FDD-LTE/TDS/WCDMA/EVDO/GSM - 深空灰 - 16GB。
將示例中具有三種網絡類型、三種機身顏色、三種機身內存的屬性數據生成 SKU 後的 item_sku 表數據圖示:
從圖中數據看出, 該商品共有27種不同規格可選, 那麼這時在確定用戶選擇的某種規格的價格等信息時只需一條 SQL 語句即可完成:
select * from `item_sku` where `item_id`=6 and `attr_symbol_path`='1,4,7';
轉——PHP 實現商品的無限規格實現思路
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
grep,sed,awk
曉晶
2019-02-23 13:58:27
linux命令學習記錄一
ssjywlb
2019-02-23 13:58:00
>>>>2007年IT業回顧之哀兵糗事篇:華爲帶頭鑽法律空子<轉>
ahgyyubo
2019-02-23 13:56:41
CCNA實驗二:手動建立靜態路由表
蝸牛001號
2019-02-23 13:53:33
C#實現的18位身份證格式驗證算法
sccdliangl
2019-02-23 13:53:12
安裝mvwareworstation
zhumingqiang
2019-02-23 13:52:48
ShareTech 防火牆 使用手冊(適用型號:LB-2225)
yzy747
2019-02-23 13:50:59
科技部網站是這樣回答無聊問題的....
張富貴
2019-02-23 13:49:41
zabbix3.0安裝
民工騎士
2019-02-23 13:46:35
關於HTML標記的
pengtingwei
2019-02-23 13:42:40
修改收藏夾的默認路徑
zongxn
2019-02-23 13:41:43
redis數據庫隨筆
simuls
2019-02-23 13:34:47