डेटाबेस टेबल को टाइमस्टैम्प का उपयोग कब करना चाहिए?


19

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

मैं सोच रहा था कि जब एक डेटाबेस तालिका में एक निर्मित और अद्यतन टाइमस्टैम्प जोड़ा जाना चाहिए?

पहला स्पष्ट उत्तर यह है कि यदि किसी व्यावसायिक तर्क को यह जानना आवश्यक है कि कब कुछ अद्यतन किया गया था (जैसे लेन-देन पूर्ण होने की तारीख आदि) तो उसे अवश्य जाना चाहिए।

लेकिन गैर-व्यावसायिक तर्क मामलों के बारे में क्या? उदाहरण के लिए, मैं उन परिदृश्यों के बारे में सोच सकता हूँ जहाँ यह उस तारीख के समय को जानना उपयोगी होगा कि पंक्तियाँ गलती खोजने में मदद करने के लिए बदल गई हैं। एक और पंक्ति जो त्रुटि का कारण बन रही है।

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

हर टेबल को एक टाइमस्टैम्प देना निश्चित रूप से एक डेटाबेस को जल्दी से समाप्त करने का एक शानदार तरीका है (हालांकि गलत हो सकता है)।

तो एक डेटाबेस तालिका का उपयोग टाइमस्टैम्प बनाने और अद्यतन करने के लिए कब करना चाहिए?


2
मुझे लगता है कि आप पहले से ही इस सवाल का जवाब खुद दे चुके हैं। केवल एक ही उत्तर दे सकता है "यह परिदृश्य पर निर्भर करता है"।
फिलिप

3
व्यवहार में मेरे पास लगभग हर मेज पर टाइमस्टैम्प्स हैं (ज्यादातर आपके द्वारा उल्लिखित कारणों के लिए)। जहां तक ​​मैं कह सकता हूं कि प्रदर्शन पर इसका कोई नकारात्मक प्रभाव नहीं है, कम से कम उन प्रकार के डेटाबेस के लिए जो आमतौर पर कुछ 30.000 लेखों और सैकड़ों हजारों आदेशों के साथ वेब विकास में उपयोग किए जाते हैं (जिन्हें वैसे भी टाइमस्टैम्प की आवश्यकता होती है)। किनारे के मामले हो सकते हैं, लेकिन उदाहरण के लिए हमारी ईआरपी प्रणाली (माइक्रोसॉफ्ट नेवीसन) उन टाइमस्टैम्प को सबसे अधिक तालिकाओं पर रखती है।
थरस्टेन मुलर

2
आप कहते हैं कि हर टेबल को टाइमस्टैम्प देना निश्चित रूप से एक डेटाबेस को जल्दी से समाप्त करने का एक शानदार तरीका है , लेकिन आप ऐसा नहीं कहते हैं। लगभग हर डीबीएमएस में, एक टाइमस्टैम्प एक बहुत छोटा मूल्य है - आमतौर पर 8 बाइट्स या उससे कम। जब तक आप सूचकांक नहीं जोड़ते, वह नगण्य है।
रॉस पैटरसन

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

@PieterB कुछ तालिकाओं के लिए इतिहास रखने में निश्चित रूप से मूल्य है, लेकिन मैं कभी भी ऐसे मामले में नहीं आया हूं जहां आप हर तालिका के लिए ऐसा करना चाहते हैं - YMMV।
रॉबी डी

जवाबों:


5

एक बेहतर और अधिक व्यापक डेटाबेस प्रबंधन और सबसे बुद्धिमान अभ्यास के लिए ऐसा करना है।

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

इसके अलावा, जब भी आपको सांख्यिकीय उद्देश्यों के लिए डेटाबेस पर की गई गतिविधियों पर नज़र रखने की आवश्यकता होती है

एक और, यह अक्सर ऐसा होता है कि हो सकता है कि समय के लिए आपको अपने डेटाबेस की गतिविधियों पर नज़र रखने की आवश्यकता न हो, लेकिन यह भविष्य में आपके होने की संभावना है। यह आज आपके समय की आवश्यकता होगी, लेकिन भविष्य में आपको अधिक खरीदता है


15

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

सीधे शब्दों में कहें:

किसी भी तालिका के लिए जहां रिकॉर्ड जोड़े जाते हैं (लेकिन कभी अपडेट नहीं किए जाते हैं) जैसे लॉगिन आदि मैं एक DATE_CREATED कॉलम जोड़ना चाहूंगा।

किसी भी तालिका के लिए जहां रिकॉर्ड जोड़े और अपडेट किए जाते हैं, मैं एक DATE_CREATED और DATE_UPDATED कॉलम जोड़ना चाहूंगा।

मैंने कई स्थानों पर काम किया है जहाँ DATE_CREATED और DATE_UPDATED प्रत्येक तालिका में डिज़ाइन के भाग के रूप में शामिल हैं।

लाखों / अरबों पंक्तियों वाले बड़े डेटाबेसों के लिए जहां डेटाबेस अपडेट कुछ दिनों के दौरान चला, हमने कुछ तालिकाओं के लिए एक SOURCE कॉलम भी जोड़ा, जिसमें ट्रैक किया गया था कि कौन सा डेटा पॉट अपडेट का कारण बनता है जैसे 3rd पार्टी फीड, उपयोगकर्ता अद्यतन, DBA संशोधन, डेटा साफ़ करना आदि।


6

जिस तरह से सवाल किया जाता है, आप चीजों की एक सूची के लिए पूछ रहे हैं। मैं सीधे आपके सवाल का जवाब नहीं देने का जोखिम उठा रहा हूं, लेकिन जब आपको वैकल्पिक समाधान का उपयोग करना चाहिए तो जवाब देना चाहिए।

मैं उन परिदृश्यों के बारे में सोच सकता हूं, जहां गलती का पता लगाने में मदद करने के लिए पंक्तियों को बदलने की तिथि समय जानना वास्तव में उपयोगी होगा

क्या दिए गए रिकॉर्ड के लिए सभी अपडेट का लॉग होना अधिक उपयोगी होगा? बस आखिरी अपडेट जानने के बाद, पर्याप्त जानकारी नहीं हो सकती है। इस लॉग को एक अलग तालिका में रखा जा सकता है। एक ही लॉग फ़ाइल (एस) में कई तालिकाओं से परिवर्तनों को ट्रैक करना अधिक सुविधाजनक होगा (इसमें तालिका होना आवश्यक नहीं है)। यह एकत्रित करने के लिए सभी तालिका change_dates के कुछ बड़े पैमाने पर यूनियन क्वेरी को रोकता है। यह आपके सिस्टम में अधिक घटनाओं की रिकॉर्डिंग देखने में आपकी मदद करके मुसीबत-शूटिंग को भी लाभान्वित करेगा।

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


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

किसी भी क्वेरी को अपडेट करने और लॉग करने के लिए टेबल को बचाने के लिए एक सरल समाधान होगा?
गज़_एडज

यह एक और तरीका है, हालांकि यह उच्च मात्रा / अपडेट की आवृत्ति के साथ तालिकाओं के लिए अनिर्दिष्ट हो सकता है। इसे एक बाहरी तालिका बनाने से कुछ समस्याओं का सामना करना पड़ सकता है ...
रॉबी डी

1

डेटाबेस तालिका में निर्माण और संशोधन टेम्पलेट शामिल होने चाहिए, जब निम्न में से कोई भी सत्य हो:

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

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


0

निजी राय:

मुझे किसी modifiedकॉलम में मान दिखाई नहीं देता है ।

created, बिल्कुल, हर डेटाबेस तालिका में जोड़ा जाना चाहिए जब तक कि ऐसा करने के लिए एक असाधारण औचित्य न हो। वहाँ होने में इसका बहुत मूल्य है।

हालांकि, updatedएक बेकार लगता है। सिर्फ पूरे हॉग पर ही क्यों न जाएं, दो डेटाबेस टेबल बनाएं, एक वह जो एक डॉक्यूमेंट आईडी और दूसरा डॉक्यूमेंट वर्जन निर्दिष्ट करता है। एक बहुत ही सरल मामले में

create table document (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create table version (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    document_id INT NOT NULL REFERENCES document(id),
    content TEXT NOT NULL,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

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

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