Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

21.8. 商品庫存表

		
+------------+              +----------------+               +------------------+
| 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表中,例如不同顏色售價不同。