商品庫存表設計

netkiller發表於2016-05-14

Netkiller MySQL 手札

MySQL MariaDB…

MrNeo Chan陳景峰(BG7NYT)

中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890
+86 755 29812080

文件始創於2010-11-18

版權 © 2011, 2012, 2013 Netkiller(Neo Chan). All rights reserved.

版權宣告

轉載請與作者聯絡,轉載時請務必標明文章原始出處和作者資訊及本宣告。

文件出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

 

$Date: 2013-04-10 15:03:49 +0800 (Wed, 10 Apr 2013) $

 

商品庫存表

		
+------------+              +----------------+               +------------------+
| product    |              | product_store  |               | user_order       |
+------------+              +----------------+               +------------------+
|id          | <--+         |id              | <---+         |id                |
|price       |    +--1:1--o |product_id      |     |         |user_id           |
|quantity    |              |sn              |     +--1:n--o |product_store_id  |
|...         |              |status          |               |                  |
|category_id |              +----------------+               +------------------+
+------------+
		
		

product 是產品表總表,product_store每個產品一條記錄,同時將sn編號對應到物理產品,這時記錄庫存需要

select count(id) from product_store where product_id=`xxxxx` and status = `sell`
		

商品銷售

begin;
select id from product_store where status = `sale` and product_id=`xxxxx` for update;
insert into user_order(user_id,product_store_id) values(`xxxxxx`,`xxxxx`);
update product_store set status = `sold` where status = `sale` and product_id=`xxxxx`;
commit;
		

售出的商品與使用者的訂單項一一對應的。

注意上面,這裡使用了排它鎖與事務處理,防止一個商品賣給兩個人。

根據上面的思路我們可以將商品屬性與product_store表進行一對一匹配,這樣每個商品都有它自己的商品屬性,甚至價格也可以移到product_store表中,例如不同顏色售價不同。


相關文章