2011-02-25 149 views
5

我正在構建一個售票應用程序,用於跟蹤門票庫存,並在特定門票售罄時停用門票。在數據庫中釋放庫存的最佳做法

我想知道最好的做法是什麼時,訂單是通過廢棄中途釋放庫存回到店裏。

電流的流向:

  • 用戶添加itemsorderline_items和成功付款
  • items爲完成order標有是基於他們的line_items
  • 我掃更新quantity_available定期爲orders,在> 20分鐘內無動作,刪除這些訂單的'line_item s並更新quantity_available

這種感覺就像我失去了這個東西。首先,我喪失了詳細審查遺棄訂單的能力(我仍然有任何付款/退貨等,但沒有訂單項)。如果用戶在21分鐘後試圖恢復舊訂單,他們將不得不重新開始。

相反,它佔用了庫存了20分鐘,這可能會失去我們的銷售在演出幾乎銷售一空。

任何有識之士將不勝感激。謝謝。

+0

作爲後續:我想在運行時計算'line_items'以獲取當前的庫存[如此處所述](http://stackoverflow.com/questions/287097/inventory-database-design)。對於我來說,似乎需要在每一筆交易中執行該查詢的速度很慢,並且緩存數量會更好。不過,很可能我錯了。 – 2011-02-25 18:16:48

+2

很難避免這種情況,但是我會存儲每個預訂/購買,當某人註冊時,您會檢查count_available(不應該被調整)的count(r + p)。如果你不這樣做,你可以有一些腳本/過程調整數字的情況,但你不明白爲什麼 - 這可能導致賣出超賣/賣出。僅供參考我運行了幾個這樣的軟件系統,並沒有遇到「如果有人想要它,但別人有它保留,並沒有使用」的情況 - 但(儘管我也擔心它) – Rudu 2011-02-25 19:07:14

回答

6

如何引入不同的標籤:保留或什麼。在處理訂單時,您可以標記保留的票據,用於減少總庫存盤點數量。但是你現在知道確切地說有多少張門票處於閒置狀態。

在20個您分鐘長的命令,如果手頭的項目數量非常低或爲空,則可以將更新發送給用戶。 「訂單停滯了5分鐘,票務銷售進展很快,請儘快完成訂單,以確保您的票仍可用。」

你也可以告訴潛在買家,有保留門票有可能成爲可用的x個,所以他們應該回來看看什麼的。也許他們可以註冊收到一封電子郵件,如果一張預訂券返回系統。

+0

我喜歡警告的想法增加這種緊迫感。這肯定會增加一些前端的複雜性,但它可能是值得的。 – 2011-02-25 19:07:05

+0

我最終做了這樣的事情 - 我在'line_items'中添加了一個名爲'affect_inventory'的列,對於完成和掛起的訂單是'true',對於放棄的訂單''false'。 – 2011-03-01 05:09:43

+0

是的,前端變得更加複雜,可能AJAXy,但作爲一個消費者,我欣賞那些消息。這可能會降低您的放棄率。 – 2011-03-01 13:10:23

0

我想知道爲什麼你會根據未處理的訂單合併庫存?我正在考慮像Newegg和亞馬遜這樣的熱門網站的工作方式。我可以創建一個購物車,它將無限期地生活。但它對我的庫存沒有任何影響,它只是數據庫中的記錄。有了Newegg,我可以在幾個月之後回到這個網站,我的廢棄購物車仍然在那裏(過去對我來說非常方便)。

您只能在用戶完成訂單時修改庫存。這也將允許您運行放棄購物車的報告,因爲您只需使用上次修改日期和訂單完成結合來確定哪些購物車已放棄。

+1

例如,當只有一張票時,會發生什麼情況,並且該票的兩個訂單都在進行中。從理論上說,他們可以同時付款,其中一個將不幸運。 – 2011-02-25 18:28:40

+0

你必須爲此編碼。如果您使用數據庫交易,您可以始終檢查是否是其他任何訂單耗盡庫存的最後一步。如果是這樣,回滾。 – 2011-02-25 18:30:17

+2

當你在看路由器時,你得到哪一個並不重要。如果你在談論保留的座位,這非常重要。如果不是我選擇的確切席位,我可能不想完成交易。 – 2011-02-25 18:34:31

0

如果我理解正確的這個,這聽起來像你應該封裝的不同步驟成回滾或暫停,如果不及時完成一個單一的交易 - 也就是你剛纔提到的20分鐘。這樣,您可以鎖定和解鎖line_items記錄,而無需來回添加它們。

這聽起來像是你需要考慮如何定義'訂單'。您可能需要介紹一些更多步驟。通過訂單的過程是「預訂」,只有在付款後才能確認。通過這種方式,您可以釋放庫存以「預訂」(超過預訂即可),並且第一個進行付款的人將獲得訂單。其他人失敗 - 他們應該更快!

+0

我很猶豫是否有人會在結帳頁面結束並發現它們速度不夠快。這可能是唯一的方法,但我知道,作爲一名消費者,如果我開始訂購,我會很生氣,去拿我的信用卡,然後回來發現我錯過了。 – 2011-02-25 19:05:46

+0

@AlexDunae,我分兩步解決了這個問題。首先打一個滴答滴答的時鐘,告訴他們無論是處於最後階段還是提供CC信息,都需要幾分鐘和幾秒時間完成訂單。第二次,當訂單正在進行(付款正在進行)網關響應正在等待。如果減價計數器用完,並且付款被拒絕 - 那麼客戶會收到錯誤消息並且清空購物車。這樣它工作正常!並在付款信息發送到gatway時維持庫存我簡單地將其標記爲待付款 – KMX 2013-08-26 20:11:47

+0

@AlexDunae,並且我在保留標準中計算待付款狀態。如果付款被拒絕,那麼如果減價計數器用完,狀態將變爲掛起或被拒絕或過期! – KMX 2013-08-26 20:13:24

相關問題