डेटाबेस: रिकॉर्ड हटाने या हटाने के लिए नहीं


117

मुझे नहीं लगता कि मैं इस बारे में सोचने वाला एकमात्र व्यक्ति हूं। आप आमतौर पर डेटाबेस व्यवहार के बारे में क्या अभ्यास करते हैं? क्या आप डेटाबेस से भौतिक रूप से कोई रिकॉर्ड हटाना चाहते हैं? या केवल रिकॉर्ड को सक्रिय या निष्क्रिय करने के लिए "हटाए गए" ध्वज या बूलियन कॉलम के साथ रिकॉर्ड को फ़्लैग करना बेहतर है?


67
... क्या झंडे में फूट और अतिरेक को झेलने के लिए डेटाबेस में टिस नोबेलर, या DELETE को रिकॉर्ड की एक तालिका में लेने के लिए, और हटाकर, उन्हें समाप्त करें। हटाने के लिए, सोने के लिए;
रात

7
अरे! मैं एक टिप्पणी को कैसे वोट करूं ??
निफ़ल

जवाबों:


48

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

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

यदि आप सक्रिय रूप से डेटा को पूरी तरह से बहाल करने की कोशिश नहीं कर रहे हैं, लेकिन आप इसे अभी भी निगरानी (या समान) उद्देश्यों के लिए रखना चाहेंगे। मेरा सुझाव है कि आप एक एकत्रीकरण योजना का पता लगाएँ (निश्चित रूप से संभव है), और दूसरी तालिका से अलग करें। यह आपकी प्राथमिक तालिका को 'हटाए गए' डेटा को साफ रखेगा, साथ ही निगरानी उद्देश्यों (या जो भी आपके मन में था) के लिए अपनी द्वितीयक तालिका को अनुकूलित रखेगा।

अस्थायी डेटा के लिए, देखें: http://talentedmonkeys.wordpress.com/2010/05/15/temporal-data-in-a-relational-database/


30

हटाए जाने वाले ध्वज का उपयोग करने का नियम:

  1. यदि आपको इसकी आवश्यकता है, तो आपको बाद में डेटा वापस मिल सकता है,
  2. डिलीट ऑपरेशन (झंडे को अपडेट करना) वास्तव में इसे हटाने की तुलना में तेज है

डिलीट फ्लैग का उपयोग करने की विधि:

  1. AND DeletedFlag = 'N'अपनी SQL में कहीं याद करना बहुत आसान है
  2. डेटाबेस के लिए धीमी उन पंक्तियों को खोजने के लिए जिन्हें आप सभी बकवास में रुचि रखते हैं
  3. आखिरकार, आप संभवतः इसे वैसे भी हटाना चाहते हैं (यह मानते हुए कि आपका सिस्टम सफल है। उस रिकॉर्ड के 10 साल पुराना होने पर क्या होगा और मूल रूप से बनाए जाने के 4 मिनट बाद इसे "हटा दिया गया")
  4. यह एक प्राकृतिक कुंजी का उपयोग करना असंभव बना सकता है। आपके पास प्राकृतिक कुंजी के साथ एक या एक से अधिक हटाई गई पंक्तियाँ हो सकती हैं और एक वास्तविक पंक्ति उसी प्राकृतिक कुंजी का उपयोग करना चाहती है।
  5. आपके कानूनी या अनुपालन कारण हो सकते हैं कि आप वास्तव में डेटा को हटाने के लिए क्यों हैं।

23

सभी पदों के पूरक के रूप में ...

हालांकि, यदि आप रिकॉर्ड को चिह्नित करने की योजना बनाते हैं, तो सक्रिय रिकॉर्ड के लिए, एक दृश्य बनाने पर विचार करना अच्छा है। यह आपको अपनी SQL क्वेरी में ध्वज को लिखने या भूलने से बचाएगा। आप गैर-सक्रिय रिकॉर्ड के लिए भी एक दृश्य पर विचार कर सकते हैं, अगर आपको लगता है कि एक उद्देश्य की भी सेवा करें।


11

मुझे खुशी है कि मुझे यह धागा मिला है। मैं भी सोच रहा था कि लोग इस मुद्दे पर क्या सोचते हैं। मैंने कई प्रणालियों पर लगभग 15 वर्षों तक 'हटाए गए के रूप में चिह्नित' को लागू किया है। जब भी कोई उपयोगकर्ता कुछ कहने के लिए गलती से डिलीट हो जाता है, तो निश्चित रूप से इसे पुनः चिह्नित करने या बैकअप से पुनर्स्थापित करने की तुलना में इसे अन-डिलीट करना बहुत आसान था।

हम पोस्टग्रैसकल और रूबी का उपयोग रेल पर कर रहे हैं, ऐसा लग रहा है कि हम इसे दो में से 1 तरीके से कर सकते हैं, रेल को संशोधित कर सकते हैं या ऑनडिल ट्रिगर जोड़ सकते हैं और इसके बजाय एक pl / pgsql फ़ंक्शन को हटाए जाने के रूप में चिह्नित कर सकते हैं। मैं बाद की ओर झुक रहा हूं।

प्रदर्शन हिट के रूप में, कुछ हटाए गए आइटमों के साथ-साथ कई हटाए गए आइटमों पर बड़े तालिकाओं पर EXPLAIN-ANALYZE के परिणाम देखना दिलचस्प होगा।

समय के साथ उपयोग की जाने वाली प्रणालियों में, नए उपयोगकर्ता गलती से चीजों को हटाने जैसी मूर्खतापूर्ण बातें करते हैं। इसलिए जब लोग एक स्थिति में नए होते हैं तो उनके पास शून्य अनुभव के अलावा उस स्थिति में पहले के व्यक्ति के सभी पहुंच अधिकार होते हैं। गलती से किसी चीज को हटाना और जल्दी ठीक होने में सक्षम होना हर किसी को जल्दी से काम करने के लिए वापस मिल जाता है।

लेकिन जैसा कि किसी ने कहा, कभी-कभी आपको किसी कारण से उस विशेष कुंजी को वापस लेने की आवश्यकता हो सकती है, उस बिंदु पर आपको इसे वास्तव में हटाने की आवश्यकता होगी, फिर रिकॉर्ड्स को फिर से बनाएं (इसे हटा दें और रिकॉर्ड को संशोधित करें)।


1
+1 क्योंकि उपयोगकर्ता मित्रता में भयावह गलतियाँ करने की मेरी क्षमता को सीमित करना शामिल है।
जेसी

6

अगर व्यक्तिगत डेटा शामिल है, तो कानूनी तरीके भी हैं। मुझे लगता है कि यह बहुत निर्भर करता है कि आप कहां हैं (या जहां डेटाबेस है), और उपयोग की शर्तें क्या हैं।

कुछ मामलों में लोग आपके सिस्टम से निकाले जाने के लिए कह सकते हैं, जिस स्थिति में हार्ड डिलीट की जरूरत होती है (या कम से कम सभी व्यक्तिगत जानकारी को क्लीयर करना)।

यदि आप व्यक्तिगत जानकारी शामिल करते हैं, तो किसी भी तरह से रणनीति अपनाने से पहले मैं आपके कानूनी विभाग के साथ जाँच करूँगा।


5

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


2

यदि आप अपने डेटाबेस एक्सेस को धीमा करने वाले "निष्क्रिय" रिकॉर्ड के बारे में चिंतित हैं, तो आप उन पंक्तियों को "संग्रह" तालिका के रूप में कार्य करते हुए किसी अन्य तालिका में ले जाना चाह सकते हैं।


1

उपयोगकर्ता द्वारा दर्ज / प्रबंधित डेटा के लिए, मैंने आपके द्वारा वर्णित ध्वज विधि का उपयोग किया है और उपयोगकर्ता को "खाली कचरा" इंटरफ़ेस दिया है यदि वे चुनते हैं तो वास्तव में आइटम हटा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.