database - what - डेटाबेस के प्रकार




डेटाबेस तालिका में डेटा परिवर्तन कैसे ट्रैक करें (6)

आपको यहां कुछ समस्याएं मिली हैं जो एक-दूसरे के लिए अच्छी तरह से संबंधित नहीं हैं

बुनियादी डाटाबेस स्तर पर आप एक अलग तालिका वाले बदलावों को ट्रैक कर सकते हैं, जो INSERT / UPDATE / DELETE स्टेटमेंट पर ट्रिगर्स के माध्यम से इसे जोड़ा जाता है। एक डेटाबेस तालिका में परिवर्तन पर नज़र रखने का सामान्य तरीका है।

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

ऐसा करने का कोई सही तरीका नहीं है, संभवतः आप एक अलग तालिका चाहते हैं कि जब आपका उपयोगकर्ता कोड अन्य तालिका में कुछ डेटा अपडेट करता है, जिसमें उपयोगकर्ता, टाइमस्टैम्प और आईडी रिकॉर्ड किए गए रिकॉर्ड शामिल होते हैं, तो आपके एप्लिकेशन कोड में एक रिकॉर्ड डाला जाएगा।

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

डेटाबेस तालिका में बदलावों को ट्रैक करने का सबसे अच्छा तरीका क्या है?

कल्पना कीजिए कि आप एक ऐसा एप्लिकेशन प्राप्त कर सकते हैं जिसमें उपयोगकर्ता (एप्लिकेशन के संदर्भ में डीबी उपयोगकर्ता नहीं) डेटा को बदलने में सक्षम हैं जो कुछ डेटाबेस तालिका में स्टोर हैं। सभी परिवर्तनों के इतिहास को ट्रैक करने का सबसे अच्छा तरीका क्या है, ताकि आप यह दिखा सकें कि कौन-सा उपयोगकर्ता किस समय किस डेटा को बदलता है?


एक अलग तालिका में लॉग इन करें (आईडी कॉलम के साथ, संभवतः टाइमस्टैंप के साथ)?

क्या आप परिवर्तनों को भी पूर्ववत करना चाहते हैं - शायद पूर्ववृत्त बयान (हर आईएनएसईआरटी, एक (संयुक्त राष्ट्र) के लिए प्रत्येक सामान्य अपडेट के लिए डिलीट) को पूर्व-बनाते हैं और इसे ट्रेस में बचा सकते हैं?


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

इस तरह के अनुप्रयोगों के लिए उपयोग करने वाली भाषाओं में ऐसे पहल-उन्मुख प्रोग्रामिंग का समर्थन करने वाली भाषा एक अच्छी तकनीक हो सकती है। ऑडिटिंग डेटाबेस तालिका परिवर्तन एक प्रकार का ऑपरेशन है जिसे आप आमतौर पर सभी कार्यों के लिए लॉग इन करना चाहते हैं, इसलिए एओपी बहुत अच्छी तरह से काम कर सकता है

ध्यान रखें कि डेटाबेस परिवर्तन करने से बहुत सारे डेटा पैदा होंगे और सिस्टम को धीमा कर देगा। एप्लिकेशन के आकार के आधार पर, ऑडिट लॉग को पूरा करने के लिए एक संदेश-क्यू समाधान और एक अलग डेटाबेस का उपयोग करने के लिए यह समझदार हो सकता है।

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


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


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


मान लीजिए मेरे पास 10 कॉलम के साथ एक व्यक्ति तालिका है जिसमें PersonSid और UpdateDate शामिल हैं अब, मैं व्यक्ति तालिका में किसी भी अपडेट का ट्रैक रखना चाहता हूं। यहाँ मैं इस्तेमाल सरल तकनीक है:

  1. एक person_log तालिका बनाएं

    तालिका person_log बनाएं (तारीख datetime2, sid int);

  2. व्यक्ति तालिका पर एक ट्रिगर बनाएँ जो व्यक्ति तालिका अपडेट हो जाने पर person_log तालिका में पंक्ति डालेंगी:

    डीबो पर ट्रैगर ट्रिगर बनाएं
    अद्यतन के लिए
    के रूप में person_log में डालें (तारीख, sid) चयनित डीटीटीएम चुनें, PersonSID डाला से

किसी भी अपडेट के बाद, query_man_log तालिका और आप उस व्यक्ति को देख पाएंगे जो कि अद्यतन की गई थी। उसी के लिए आप सम्मिलित करें, हटाएं।

उदाहरण के ऊपर एसक्यूएल के लिए, मुझे किसी भी प्रश्न के मामले में पता है या इस लिंक का उपयोग करें: http://www.4guysfromrolla.com/webtech/042507-1.shtml







database