- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
在電子商務業務流程中,一筆訂單在成立到出貨中間商品還是儲存在倉庫中。商品會在出貨的時候才會從倉庫中減少現有數量,此指令碼會將訂單購買的商品數量與商品庫存作關聯
商品「可購買庫存量」為:「商品庫存資料表數量」減「未出貨訂單中購買的商品總數量」
訂單流程並未實作在範例程式碼
建立訂單時若訂單中有一筆商品「可購買庫存量」少於訂單購買的數量時,就不進行該筆訂單的建立作業
當消費者在商品出貨前取消訂單時,系統不需要進行商品庫存的回補作業,該商品在訂單中購買庫存會自動減少
接下來開始建立以上述邏輯為基礎的資料庫物件
修改資料庫物件
執行 procedure-default.sql 修改 Products.GetProductValidStorage 與 Orders.AddOrder 資料庫物件
執行搶購模擬
使用下面指令進行搶購模擬
dotnet eShop.Loader.dll -t 2500 -e 11:37
啟用後會等待直到設定時間

執行時會持續做商品購買作業

執行完成後點選任意按鍵結束應用程式

模擬結束後開啟資料表查詢確認商品購買的狀態
確認結果
檢查 Events.AddEventDatabaseError 是否有預存程序執行錯誤

沒有錯誤產生
執行 validation.sql 指令碼確認查詢結果是否有超賣

查詢結果顯示訂購的商品總量超過庫存資料表的商品量
額外檢視
確認 Orders.OrderMains 訂單資料表是否有異常情況

主索引與訂單編號的順序並不相同,從建立日期看到建立時間是相同的
從 Events.EventBuying 資料表紀錄中顯示有 87 次的下單失敗

因為下單的商品跟數量是隨機產生,此數量沒有甚麼實際意義
結論
此資料庫設計在搶購情況下會有商品超賣的情況產生,並不是一個好的設計方式
接下來介紹另外一種資料庫設計方式
扣除購買商品的商品庫存量
章節清單
- 電子商務網站商品搶購模擬 - 使用預存程序
- 建立 eShop 資料庫
- 模擬搶購應用程式簡介
- 將購訂單商品數量與庫存量作關聯
- 扣除購買商品的商品庫存量
延伸閱讀
在 Orders.AddOrder 預存程序中有保留設定交易隔離層級的 Transact-SQL 指令碼 可以自由設定確認是否依樣會有超賣的情況
留言
張貼留言