डेटाबेस इतिहास तालिका / ट्रैकिंग तालिका


13

वर्तमान में मैं इस तरह से एक ट्रैकिंग / इतिहास तालिका तैयार करना चाहता हूं:

  • प्राइमरीके - आईडी
  • अन्यटेबल - fk
  • फ़ील्डनाम - उस क्षेत्र का नाम जिसका ट्रैकिंग है
  • OLDVALUE
  • नया मूल्य
  • उपयोगकर्ता नाम
  • CreateDateTime

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

लक्ष्य संपादित करें : वर्तमान में केवल 2 फ़ील्ड हैं जिन्हें हम ट्रैक करना चाहते हैं। एक क्षेत्र को इतिहास दिखाने के लिए एक वेब पेज पर दिखाया जाएगा, दूसरे क्षेत्र को केवल एक विभाग द्वारा एक्सेस किया जाएगा और उनके पास डेटाबेस के एक दृश्य तक पहुंच होगी जिसे वे क्वेरी करने में सक्षम होंगे। वे केवल इस एक क्षेत्र के बारे में जानकारी प्राप्त करने के लिए क्वेरी करेंगे कि किसने फ़ील्ड को बदल दिया है और क्या करना है। यही कारण है कि हम इसे सेट करना चाहते थे जहां एक डेटाबेस फ़ील्ड टेबल रिकॉर्ड इतिहास की एक सटीक प्रतिलिपि होने के बजाय टेबल कॉलम को परिभाषित करता है। हम केवल दो क्षेत्रों को भविष्य में खेतों को जोड़ने या हटाने की संभावनाओं के साथ ट्रैक करना चाहते हैं।

धन्यवाद!


क्या आप पहले से जानते हैं कि आप कितनी टेबल पर नज़र रखेंगे?
कोफी सरफो

यह तालिका केवल एक अन्य तालिका को ट्रैक करेगी, अब तक हम केवल इस एक तालिका को ट्रैक कर रहे हैं।
user76982

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

1
फ्लिप पर क्वेरी को यह देखने के लिए कि आपके द्वारा प्रस्तावित दृष्टिकोण का उपयोग करके कौन से कॉलम सबसे अधिक बार बदलते हैं, आसान हो जाएगा।
कोफी सरफो

आप dba.stackexchange.com पर खोजना चाह सकते हैं ; इसी तरह के प्रश्न वहाँ पूछे गए हैं और कुछ ऐसे उत्तर हो सकते हैं जिनका आप उपयोग कर सकते हैं।
FrustratedWithFormsDesigner

जवाबों:


8

छिद्रण छेद: क्या होगा यदि डेटाबेस स्कीमा को बाद में उसी बिंदु पर बदल दिया जाता है, और स्तंभ नाम बदल जाता है, या स्तंभ पूरी तरह से हटा दिया जाता है? डेटाबेस सिस्टम के बहुत सारे यह अनुमति देते हैं। तब आपके "फ़ील्डनाम" का क्या होगा?

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

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

वास्तव में, यदि आपको सभी स्तंभों (और स्तंभों का सिर्फ एक छोटा उपसमूह) सहित विशिष्ट तालिका की पूरी पंक्तियों को ट्रैक करने की आवश्यकता है, तो आपको @ sarfeast के सुझाव पर विचार करना चाहिए। नाम-मूल्य-जोड़ी मॉडल की कमियों के बारे में यह लेख पढ़ें ।


8

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

अंतिम लक्ष्य, यानी आप ऑडिट किए गए डेटा के साथ क्या करना चाहते हैं, यह मूल्यांकन करने में मदद करेगा कि प्रत्येक दृष्टिकोण कितना उपयुक्त हो सकता है।


हैलो सरफ़्फ़ट, मैंने वह अंतिम लक्ष्य जोड़ा, जिसे मैं प्राप्त करना चाहता हूँ। इसे शुरू करने के लिए शामिल नहीं करने के लिए क्षमा करें।
user76982

इस दृष्टिकोण की अपनी कमियां हैं। : यहां पढ़ें database-programmer.blogspot.co.uk/2008/07/history-tables.html
Tuukka Haapaniemi

7

संक्षेप में: आपको उन तालिकाओं के लिए ऑडिट ट्रेल तंत्र स्थापित करने की आवश्यकता है जो आप मूल्य परिवर्तन को ट्रैक करना चाहते हैं।

एकल ऑडिट ट्रेल टेबल :

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

यह कैसे प्राप्त करने के लिए पटकथा के साथ एक अच्छी पोस्ट है - ऑडिट ट्रेल्स बनाना

देखने के लिए अन्य उपयोगी संदर्भ :


दूसरा लिंक अब खराब है।
जेरेमी हैरिस

@cillosis, यह ध्यान देने के लिए धन्यवाद। यह अब अपडेट किया गया है :)
यूसुबोव

3

आप विचारों के लिए NHibernate Envers परियोजना प्रलेखन की जाँच करना चाहते हो सकता है ।

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

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