商品多規(guī)格
最近面試的時候遇到一個問題,大概意思是說商城一件衣服愈捅,顏色有藍(lán)遏考、白、黑蓝谨,尺碼有 S灌具、M青团、L 碼,不同的顏色和尺碼搭配的價格和庫存是不一樣的咖楣,這種關(guān)系如何設(shè)計數(shù)據(jù)庫呢督笆?
之前也沒用遇到過這種問題,第一感覺就是以衣服表為主表诱贿,再分表建立子表:顏色表和尺碼表以及顏色-尺碼管理表娃肿。
商品表字段(item):id name…
顏色表字段(color):id name item_id …
尺碼表字段(chima):id name item_id …
顏色-尺碼表(c-c):id item_id color_id chima_id number price …
回來后上網(wǎng)搜索了相關(guān)的內(nèi)容,發(fā)現(xiàn)其實早就有這種 庫存 SKU 的文章和設(shè)計珠十,關(guān)于上面的問題有如下的具體解決方案
商品的無限規(guī)格實現(xiàn)
我們發(fā)現(xiàn)上面的衣服的庫存量單位(SKU)便不再是該商品, 而是到具體屬性組合出的規(guī)格, 每種規(guī)格可能會有不同的售價料扰、運費與庫存剩余情況, 所以用戶在購買時, 不僅需要記錄所購買的商品 ID, 同時也需要記錄購買的該商品的具體規(guī)格 。
直觀分析圖示中的規(guī)格情況, 尺碼焙蹭、顏色屬于衣服不同屬性的名稱, 與之對應(yīng)的為屬性可選擇的的具體值, 屬于一對多關(guān)系, 在 MySQL 數(shù)據(jù)庫表結(jié)構(gòu)中反應(yīng)出為:
插入數(shù)據(jù)后:
symbol 字段是對指定商品 ID 下的屬性值的一個序號標(biāo)記, 是為了提高在后面使用到時的檢索效率晒杈。該值在不同商品間可以重復(fù), 在同一商品的屬性中需要保證唯一。 以上就完成了商品 ID 為 128 的商品多屬性的存儲工作孔厉。 為了能夠記錄和快速查詢出每種屬性組合出的商品的價格拯钻、庫存等信息, 我們還需要張表來維護這部分?jǐn)?shù)據(jù), 建立 item_sku 表:
將示例中具有三種顏色、三種尺碼的屬性數(shù)據(jù)生成 SKU 后的 item_sku 表數(shù)據(jù)圖示:
從圖中數(shù)據(jù)看出, 該商品共有 9 種不同規(guī)格可選, 那么這時在確定用戶選擇的某種規(guī)格的價格等信息時只需一條 SQL 語句即可完成:
總結(jié)
如何屬性規(guī)則再多撰豺,也可以利用上述方法粪般,如果設(shè)計運費還可以在 SKU 表中加入運費字段。