मैं लेनदेन की तरह चालान में हेरफेर करने के लिए एक इंटरफ़ेस बनाना चाहता हूं।कई PHP अनुरोधों में MySQL लेनदेन
डेटाबेस में एक चालान तालिका होती है, जिसमें बिलिंग जानकारी होती है, और एक चालान_लाइन तालिका होती है, जिसमें चालान के लिए लाइन आइटम होते हैं। वेबसाइट स्क्रिप्ट का एक सेट है जो चालानों और उनके संबंधित लाइनों को जोड़ने, संशोधन और हटाने की अनुमति देती है।
मेरी समस्या यह है कि, मैं वेब अनुप्रयोग में डेटाबेस के एसीआईडी गुणों को प्रतिबिंबित करना चाहता हूं।
- परमाणु: उपयोगकर्ता बचाने के हिट करते हैं, या तो पूरा चालान संशोधित किया गया है या पूरे चालान बिल्कुल नहीं बदली है।
- संगत: एप्लिकेशन कोड पहले से ही स्थिरता सुनिश्चित करता है, लाइनों को मौजूद मौजूदा चालान में जोड़ा नहीं जा सकता है। चालान आईडी को डुप्लिकेट नहीं किया जा सकता है।
- पृथक: यदि कोई उपयोगकर्ता किसी चालान में परिवर्तनों के सेट के बीच में है, तो मैं उपयोगकर्ता को सहेजने तक अन्य उपयोगकर्ताओं से उन परिवर्तनों को छिपाना चाहता हूं।
- टिकाऊ: यदि वेबसाइट मर जाती है, तो डेटा सुरक्षित होना चाहिए। यह पहले से ही काम करता है।
यदि मैं डेस्कटॉप एप्लिकेशन लिख रहा था, तो यह हर समय MySQL डेटाबेस से कनेक्शन बनाए रखेगा, जिससे मुझे संपादन और शुरुआत के अंत में BEGIN ट्रांज़ेक्शन और COMMIT का उपयोग करने की अनुमति मिल जाएगी।
जो मैं समझता हूं उससे आप एक PHP पृष्ठ पर ट्रांसफर नहीं कर सकते हैं और एक अलग पृष्ठ पर COMMIT कर सकते हैं क्योंकि कनेक्शन पृष्ठों के बीच बंद है।
क्या एक्सटेंशन के बिना इसे संभव बनाने का कोई तरीका है? जो मैंने पाया है, केवल SQL Relay यह करता है (लेकिन यह एक एक्सटेंशन है)।
इस विचार के साथ समस्या यह है कि कोई अन्य उपयोगकर्ता मेरे अंतर्गत डेटा संपादित कर सकता है। प्रत्येक चालान में परिवर्तनों को ट्रैक करने के लिए इसके लिए अतिरिक्त कोड की आवश्यकता होती है (यानी, संशोधन संख्या)। मूल लेन-देन केवल एक प्रतिबद्ध संघर्ष फेंक देगा और मेरा आवेदन उपयोगकर्ता को उस पर पुनर्स्थापित कर सकता है। – Martin
@ मार्टिन: समवर्ती मुद्दों से निपटने के लिए, तालिका में एक संस्करण कॉलम जोड़ें ताकि रिकॉर्ड को अपडेट/हटाया न जा सके जब तक कि संस्करण मान वर्तमान में संपादित नहीं हो रहा है और वर्तमान में डीबी क्या संग्रहीत कर रहा है। –
उस स्थिति में आपको किसी अन्य उपयोगकर्ता को ऐसा करने से रोकने के लिए निराशावादी या आशावादी लॉकिंग तंत्र बनाना होगा। अन्य उपयोगकर्ताओं को पदानुक्रमित करना, पदानुक्रम के एक हिस्से से एक कुंजी के आधार पर जहां आप अवरुद्ध करना चाहते हैं - या आशावादी (यह मानते हुए कि यह अक्सर नहीं होगा) उन्हें अपने डेटा को दोबारा दर्ज करने के लिए कहकर। –