हर बार मुझे एक नया डेटाबेस डिजाइन करने की आवश्यकता होती है, मैं यह सोचने में काफी समय बिताता हूं कि परिवर्तनों का ऑडिट लॉग रखने के लिए मुझे डेटाबेस स्कीमा कैसे सेट करना चाहिए।
इस बारे में कुछ प्रश्न पहले ही यहां पूछे जा चुके हैं, लेकिन मैं इस बात से सहमत नहीं हूं कि सभी परिदृश्यों के लिए एक ही सर्वोत्तम तरीका है:
- संशोधन के लिए डेटाबेस डिजाइन
- परिवर्तन लॉग ऑडिटिंग डेटाबेस तालिका के लिए सर्वश्रेष्ठ डिज़ाइन
- ऑडिट ट्रेल्स पर कब्जा करने के लिए डेटाबेस डिजाइन पर विचार
मैंने इस दिलचस्प लेख को एक लॉग ऑफ़ डेटाबेस चेंजेज बनाए रखने पर ठोकर खाई है जो प्रत्येक दृष्टिकोण के समर्थक और विपक्ष को सूचीबद्ध करने की कोशिश करता है। यह बहुत अच्छी तरह से लिखा गया है और दिलचस्प जानकारी है, लेकिन इसने मेरे फैसलों को और भी कठिन बना दिया है।
मेरा सवाल यह है कि: क्या कोई संदर्भ है जो मैं उपयोग कर सकता हूं, शायद एक किताब या निर्णय के पेड़ की तरह कुछ है जिसे मैं यह तय करने के लिए संदर्भित कर सकता हूं कि मुझे किस तरह कुछ इनपुट चर पर आधारित होना चाहिए, जैसे:
- डेटाबेस स्कीमा की परिपक्वता
- लॉग को कैसे क्वियर किया जाएगा
- संभावना है कि यह रिकॉर्ड को फिर से बनाने की आवश्यकता होगी
- क्या अधिक महत्वपूर्ण है: प्रदर्शन लिखना या पढ़ना
- लॉग किए जा रहे मानों की प्रकृति (स्ट्रिंग, संख्या, बूँदें)
- संग्रहण स्थान उपलब्ध है
मैं जो दृष्टिकोण जानता हूं वे हैं:
1. निर्मित और संशोधित तिथि और उपयोगकर्ता के लिए कॉलम जोड़ें
तालिका उदाहरण:
- आईडी
- मान_1
- मान_2
- VALUE_3
- रचना तिथि
- संशोधित तिथि
- के द्वारा बनाई गई
- द्वारा संशोधित
प्रमुख विपक्ष: हम संशोधनों का इतिहास खो देते हैं। कमिट के बाद रोलबैक नहीं कर सकते।
2. केवल टेबल डालें
- आईडी
- मान_1
- मान_2
- VALUE_3
- से
- सेवा
- हटा दिया गया (बूलियन)
- उपयोगकर्ता
प्रमुख विपक्ष: विदेशी चाबियों को कैसे रखें? विशाल स्थान की आवश्यकता
3. प्रत्येक तालिका के लिए एक अलग इतिहास तालिका बनाएं
इतिहास तालिका उदाहरण:
- आईडी
- मान_1
- मान_2
- VALUE_3
- VALUE_4
- उपयोगकर्ता
- हटा दिया गया (बूलियन)
- टाइमस्टैम्प
प्रमुख विपक्ष: सभी अंकेक्षित तालिकाओं की नकल करने की आवश्यकता। यदि स्कीमा बदलता है तो सभी लॉग को माइग्रेट करने की भी आवश्यकता होगी।
4. सभी तालिकाओं के लिए एक समेकित इतिहास तालिका बनाएं
इतिहास तालिका उदाहरण:
- तालिका नाम
- मैदान
- उपयोगकर्ता
- नया मूल्य
- हटा दिया गया (बूलियन)
- टाइमस्टैम्प
प्रमुख विपक्ष: क्या मैं आसानी से जरूरत पड़ने पर रिकॉर्ड्स (रोलबैक) को फिर से बना पाऊंगा? New_value कॉलम को एक विशाल स्ट्रिंग होने की आवश्यकता है ताकि यह सभी विभिन्न स्तंभ प्रकारों का समर्थन कर सके।