2010-11-18 15 views
8

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

  1. फ़ील्ड आईडी के साथ एक एकल तालिका | टेबल | कॉलम | पंक्ति | old_value | new_value | टाइमस्टैम्प | यूज़र आईडी। यह एक ही स्थान पर सभी तालिकाओं में सभी परिवर्तनों को ट्रैक करेगा और तालिकाओं की संख्या को कम करने का लाभ होगा। यह थोड़ा मुश्किल पूछताछ करता है, लेकिन असंभव नहीं है।
  2. टेबल कॉलम के बिना # 1 जैसे एकाधिक टेबल। यह प्रत्येक तालिका से परिवर्तन को अपनी खुद की इतिहास तालिका में अलग करेगा।
  3. एकाधिक टेबल जो ट्रैक करने के लिए मूल तालिकाओं की स्कीमा दर्पण करते हैं। इससे ट्रिगर्स को लिखना बहुत आसान हो जाएगा, अगर कोई विशिष्ट रिकॉर्ड पर वापस लौटना चाहता है तो डेटा को बहाल करना आसान होगा, लेकिन भंडारण की कीमत पर आएगा, हर क्षेत्र के रूप में, भले ही यह नहीं बदला गया हो, तो होगा डुप्लीकेट, संभवतः कई बार हो। साथ ही, यह जानना मुश्किल हो जाएगा कि कौन से फ़ील्ड एक संस्करण से दूसरे संस्करण में बदल गए हैं।

इनमें से प्रत्येक तीन विकल्प सक्षम हैं, और जहां तक ​​मैं कह सकता हूं कि कार्यक्षमता ऐसी नहीं है जो किसी अन्य में असंभव है। तो ऐसा कुछ होना चाहिए जो मैं विचार नहीं कर रहा हूं या कुछ पैटर्न जो अधिक मानक है। यदि इससे कोई फर्क पड़ता है, तो यह समाधान mysql और sql सर्वर दोनों के लिए काम करना चाहिए (हालांकि मैं बाद में कोड के विनिर्देशों को काम कर सकता हूं)।

+0

मैं संख्या 3 का संस्करण लागू करता हूं। SQL सर्वर में, ट्रिगर संशोधित किए गए प्रत्येक कॉलम की पहचान कर सकता है। मैं उस संपूर्ण पंक्ति के साथ स्टोर करता हूं जो संशोधित है + कुछ ऑडिट विशिष्ट कॉलम (ऑडिटटाइटाइम, उपयोगकर्ताइन्फो, आदि)। मैं हैश स्टोर करता हूं, लेकिन एक ऐसा दृश्य बनाता हूं जो हैश को डीकोड करता है और प्रभावित कॉलम सूचीबद्ध करता है। – datagod

उत्तर

5

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

हम दो नंबर की तरह कुछ करते हैं, सिवाय इसके कि हमारे पास प्रति टेबल दो टेबल हैं (एक जो परिवर्तनों के उदाहरणों को संग्रहीत करता है और जो वास्तविक डेटा संग्रहीत करता है। इससे टेबल पर अमीलियन रिकॉर्ड आयात में संग्रहीत सभी रिकॉर्ड्स ढूंढना आसान हो जाता है। उदाहरण के लिए, क्योंकि वे सभी एक ही उदाहरण हैं। इसका मतलब है कि हम आसानी से नए ऑडिट टेबल बनाने के लिए स्क्रिप्ट कर सकते हैं क्योंकि नई टेबल जोड़े गए हैं।

दूसरे के मामले में, मैं एक विशिष्ट रिकॉर्ड को पुनर्स्थापित करने के लिए एक proc लिखने का सुझाव देना चाहता हूं यह बहाल करना आसान है और आपको इसे हर बार समझना नहीं है।

+0

एचएलजीईएम एक अच्छा मुद्दा बनाता है। प्रदर्शन कारणों से इसे तोड़ना बहुत समझ में आता है और यदि आपके पास बहुत सारे पढ़ने/लिखने (लाखों प्रति दिन) या बड़े बैच अपडेट हैं तो एचएलजीईएम का समाधान एक अच्छा है।हालांकि, यदि आपकी ज़रूरतें लगभग उच्च नहीं हैं तो विकल्प संख्या 1 प्रदर्शन और रखरखाव के बीच एक अच्छा समझौता है। डेटाबेस बहुत संभाल सकता है और स्थिति के आधार पर अनुकूलन अनुकूलन एक गलती हो सकती है। – theChrisKent

+0

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

+0

@ बॉब Baddeley, हाँ। – HLGEM

0

मैं नंबर 1 हाथ नीचे चुनूंगा। यदि आप अपनी ट्रैकिंग में अतिरिक्त फ़ील्ड जोड़ने का निर्णय लेते हैं और WHERE तालिका = की आवश्यकता को हटाने के अलावा बहुत कम जोड़ते हैं तो नंबर 2 को बनाए रखना मुश्किल होगा? खंड। संख्या 3 ओवरकिल है। बैकअप के लिए यही है।

1

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

दो पिछले उत्तर [TheChrisKen, HLGEM] सहमत नहीं हैं, फिर भी - उन्होंने पहले जो काम किया है उसके आधार पर - मैंने शर्त लगाई है कि वे दोनों सही हैं। यदि आप सोचते हैं कि उनका उपयोग कैसे किया जाएगा और उस उपयोग की प्रदर्शन आवश्यकताओं, थाई यह निर्धारित करने में आपकी सहायता कर सकती है कि आपकी स्थिति के लिए कौन सा मॉडल सबसे अच्छा है।

+0

उनका उपयोग 1 के लिए किया जाएगा) उपयोगकर्ताओं की सदस्यता लेने के लिए परिवर्तनों की अधिसूचनाएं (तात्कालिक, दैनिक, साप्ताहिक, या मासिक आवृत्ति पर) 2) रिकॉर्ड के बगल में एक रिकॉर्ड में परिवर्तन की एक तालिका प्रदर्शित करना 3) पिछले संशोधन में वापस लौटना परिवर्तन गलत या अनुचित हैं। डेटा रिकॉर्ड का हिस्सा है और कभी शुद्ध नहीं होता है। मैं देख सकता हूं कि कैसे ChrisKen और HLGEM दोनों अलग-अलग स्थितियों में उनके समाधान उपयुक्त पाएंगे। हम ऐसे समाधान की उम्मीद कर रहे हैं जो अच्छी तरह से स्केल करता है, हालांकि यह कुछ सौ उपयोगकर्ताओं (<50 एक बार में) या कुछ हज़ार पंक्तियों को ट्रैक करने के लिए नहीं मिलेगा। –

संबंधित मुद्दे