2011-02-25 18 views
5

मैं टिकट बेचने वाला एप्लिकेशन बना रहा हूं जो टिकटों की एक सूची ट्रैक करता है, जब कोई विशेष टिकट बेचा जाता है तो उन्हें निष्क्रिय कर दिया जाता है।डेटाबेस में सूची जारी करने के लिए सर्वोत्तम अभ्यास

मैं सोच रहा हूं कि ऑर्डर को वापस स्टोर में जारी करने के लिए सबसे अच्छा अभ्यास क्या है जब ऑर्डर को मध्य-मार्ग से छोड़ दिया जाता है।

वर्तमान प्रवाह:

  • उपयोगकर्ता line_items के रूप में एक order को items जोड़ सकते हैं और order के रूप में सफल भुगतान
  • items पर पूरा चिह्नित है एक quantity_available कि उनके line_items
  • मैं स्वीप के आधार पर अपडेट किया जाता है है समय-समय पर orders के लिए> 20 मिनट में कोई कार्रवाई नहीं के साथ, उन आदेशों को 'line_item एस हटाएं और quantity_available
  • अपडेट करें

ऐसा लगता है कि मुझे इसके साथ कुछ याद आ रही है। एक के लिए, मैं विस्तारित आदेशों की विस्तार से समीक्षा करने की क्षमता खो देता हूं (मेरे पास अभी भी कोई भुगतान/गिरावट है, आदि ... लेकिन कोई लाइन आइटम नहीं)। और यदि कोई उपयोगकर्ता 21 मिनट के बाद पुराने आदेश को फिर से शुरू करने का प्रयास करता है तो उन्हें ताजा शुरू करना होगा।

इसके विपरीत, यह 20 मिनट के लिए सूची से जुड़ा हुआ है जो एक शो लगभग बेचा जाता है जब हमें बिक्री खो सकता है।

किसी भी अंतर्दृष्टि की सराहना की जाएगी। धन्यवाद।

+0

के रूप में एक अनुवर्ती: मैं कार्यावधि में 'line_items' गिनती मौजूदा सूची उपलब्ध पाने के लिए [के रूप में यहाँ पर चर्चा] के बारे में सोचा (http://stackoverflow.com/questions/287097/inventory-database-design)। मेरे लिए ऐसा लगता है कि प्रत्येक लेनदेन पर उस क्वेरी को करने की धीमी गति से आवश्यकता होगी, और मात्रा को कैशिंग करना बेहतर होगा। बहुत संभव है कि मैं इसके बारे में गलत हूं, यद्यपि। –

+2

इससे बचना मुश्किल है, हालांकि मैं प्रत्येक आरक्षण/खरीद को स्टोर करता हूं, जब कोई साइन अप करता है तो आप 'quantity_available' (जिसे कभी समायोजित नहीं किया जाना चाहिए) के विरुद्ध गिनती (आर + पी) की जांच होगी। यदि आप ऐसा नहीं करते हैं तो आपके पास ऐसा मामला हो सकता है जहां कुछ स्क्रिप्ट/प्रक्रिया ने संख्या को समायोजित किया लेकिन आप नहीं देख सकते कि क्यों - जो बिक्री/बिक्री के अधीन हो सकता है। एफवाईआई मैं ऐसे कई सॉफ़्टवेयर सिस्टम चलाता हूं और "अगर कोई इसे चाहता है लेकिन किसी और ने इसे आरक्षित किया है और इसका उपयोग नहीं किया है" स्थिति में भाग नहीं लिया है - फिर भी (हालांकि मुझे यह भी डर है) – Rudu

उत्तर

6

एक अलग टैग शुरू करने के बारे में: आरक्षित या कुछ। ऑर्डर प्रोसेसिंग करते समय, आप आरक्षित टिकट को चिह्नित कर सकते हैं जो कुल सूची गिनती को कम करता है। लेकिन अब आप जानते हैं कि लिम्बो में कितने टिकट हैं।

अपने 20 मिनट के लंबे आदेश के दौरान, यदि हाथों की संख्या बहुत कम या खाली है, तो आप उपयोगकर्ता को अपडेट भेज सकते हैं। "ऑर्डर 5 मिनट के लिए स्थिर रहा है। टिकट की बिक्री तेजी से बढ़ रही है, कृपया यह सुनिश्चित करने के लिए जल्द ही अपना ऑर्डर पूरा करें कि आपका टिकट अभी भी उपलब्ध है।"

आप संभावित खरीदारों को यह भी बता सकते हैं कि आरक्षित टिकटों की संख्या x उपलब्ध हो सकती है, इसलिए उन्हें वापस या कुछ जांचना चाहिए। यदि आरक्षित टिकट सिस्टम में वापस आता है तो शायद वे एक ईमेल प्राप्त करने के लिए साइन अप कर सकते हैं।

+0

मुझे चेतावनियों का विचार पसंद है तात्कालिकता की भावना जोड़ें। यह निश्चित रूप से सामने की जटिलता का थोड़ा सा जोड़ देगा लेकिन यह इसके लायक हो सकता है। –

+0

मैंने ऐसा कुछ किया है - मैंने 'variable_inventory 'नामक' line_items' में एक कॉलम जोड़ा है जो पूर्ण और लंबित आदेशों के लिए 'सत्य' है और छोड़े गए आदेशों के लिए 'झूठा' है। –

+0

हां, फ्रंट एंड अधिक जटिल हो जाता है, और शायद AJAXy, लेकिन एक उपभोक्ता के रूप में मैं उन तरह के संदेशों की सराहना करता हूं। यह आपकी त्याग दर में कमी हो सकती है। –

0

मुझे आश्चर्य है कि आप एक अप्रतिबंधित आदेश के आधार पर सूची क्यों बांधते हैं? मैं न्यूगेग और अमेज़ॅन के काम जैसे लोकप्रिय साइटों के बारे में सोच रहा हूं। मैं एक शॉपिंग कार्ट बना सकता हूं और यह अनिश्चित काल तक जी रहेगा। लेकिन यह मेरी सूची में कुछ भी नहीं करता है, यह सिर्फ डेटाबेस में एक रिकॉर्ड है। न्यूगेग के साथ, मैं साइट के महीनों बाद वापस जा सकता हूं और मेरी छोड़ी गई शॉपिंग कार्ट अभी भी वहां है (जो अतीत में मेरे लिए बहुत आसान रही है)।

जब उपयोगकर्ता ऑर्डर पूरा करता है तो आप केवल सूची को संशोधित करते हैं। यह आपको छोड़े गए शॉपिंग कार्ट पर रिपोर्ट चलाने की भी अनुमति देगा क्योंकि आप केवल अंतिम संशोधित दिनांक का उपयोग करके ऑर्डर के साथ संयुक्त कर सकते हैं कि यह पता लगाने के लिए कि कौन से गाड़ियां छोड़ी गई हैं।

+1

क्या होता है जब केवल एक टिकट छोड़ा जाता है, उदाहरण के लिए, और उस टिकट के लिए दो आदेश दोनों प्रगति पर हैं। सैद्धांतिक रूप से वे दोनों एक ही समय में भुगतान कर सकते हैं और उनमें से एक भाग्य से बाहर होगा। –

+0

आपको इसके लिए कोड करना होगा। यदि आप डीबी लेनदेन का उपयोग करते हैं तो आप यह देखने के लिए हमेशा अंतिम चरण के रूप में जांच सकते हैं कि कोई अन्य आदेश सूची को समाप्त कर चुका है या नहीं। यदि हां, तो रोलबैक। –

+2

जब आप राउटर को देख रहे हों, इससे कोई फर्क नहीं पड़ता कि आपको कौन सा मिलता है। यदि आप आरक्षित सीटों के बारे में बात कर रहे हैं, तो यह बहुत मायने रखता है। मैं लेनदेन के साथ नहीं जाना चाहूंगा यदि यह सही सीट नहीं है तो मैंने चुना है। –

0

यदि मैं इसे सही ढंग से समझता हूं, तो ऐसा लगता है कि आपको एक ही लेन-देन में अलग-अलग चरणों को समाहित करना चाहिए जो समय-समय पर पूरा नहीं हुआ है, या फिर निलंबित हो जाता है - यानी आपने 20 मिनट का उल्लेख किया है। इस तरह आप लाइन_इटम्स रिकॉर्ड को लॉक और अनलॉक कर सकते हैं बिना उन्हें आगे जोड़कर।

ऐसा लगता है कि आपको इस बारे में सोचना होगा कि आप 'ऑर्डर' को कैसे परिभाषित करते हैं।आपको शायद कुछ और कदम पेश करने की जरूरत है। आदेश के माध्यम से जाने की प्रक्रिया 'रिजर्व' है, केवल तभी भुगतान किया जाता है जब यह पुष्टि की जाती है। इस तरह आप स्टॉक को 'रिजर्व' (रिजर्व पर ठीक कर सकते हैं) को जारी कर सकते हैं और भुगतान करने वाले पहले व्यक्ति को आदेश मिल जाता है। अन्य असफल हो जाते हैं - वे जल्दी से होना चाहिए था!

+0

लोगों को चेकआउट पेज पर समाप्त होने के लिए संकोच है और पता लगाना कि वे पर्याप्त तेज़ नहीं थे। यह एकमात्र तरीका हो सकता है, लेकिन मुझे पता है कि एक उपभोक्ता के रूप में अगर मैं एक आदेश शुरू करता हूं तो मैं बहुत परेशान होता हूं, मेरा क्रेडिट कार्ड प्राप्त करने के लिए चला गया और मुझे पता चला कि मैं छूट गया था। –

+0

@AlexDunae, मैंने इस मुद्दे को दो चरणों में संबोधित किया। सबसे पहले एक टिक नीचे घड़ी बताएं कि आदेश पूरा करने के लिए मिनटों और सेकंड में कितना समय शेष है, इससे कोई फर्क नहीं पड़ता कि वे अंतिम चरण में हैं या यहां तक ​​कि सीसी जानकारी भी प्रदान करते हैं। दूसरा जब आदेश प्रगति पर है (भुगतान किया जा रहा है) गेटवे प्रतिक्रिया का इंतजार है। यदि टिक डाउन काउंटर समाप्त हो गया है और यदि भुगतान अस्वीकार कर दिया गया था - तो ग्राहक को त्रुटि संदेश के साथ सूचित किया जाता है और कार्ट खाली हो जाता है। इस तरह यह ठीक काम करता है! और भुगतान जानकारी को गेटवे पर भेजे जाने पर सूची को बनाए रखने के लिए, मैं इसे – KMX

+0

@AlexDunae लंबित भुगतान चिह्नित करता हूं, और मैं आरक्षित मानदंडों में लंबित स्थिति का भुगतान करता हूं।यदि भुगतान अस्वीकार कर दिया गया था तो टिक टिक काउंटर समाप्त होने पर स्थिति लंबित हो जाएगी या अस्वीकार कर दी जाएगी या समाप्त हो जाएगी! – KMX

संबंधित मुद्दे