क्या लॉग टेबल को एक आईडी फ़ील्ड या प्राथमिक कुंजी मिलनी चाहिए?


12

मेरे पास एक लॉग टेबल है जो उस समय के डेटाइम स्टैम्प को पकड़ती है जब कुछ फाइलों को दूसरे सिस्टम में एक्सपोर्ट किया जाता था।

ExportLog तालिका में वर्तमान में तीन फ़ील्ड हैं:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)

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

क्या मुझे idमैदान हटा देना चाहिए ?

मैं पर या तो एक प्राथमिक कुंजी होना चाहिए messageIdया exportedDateTimeया दोनों?


2
यह किस डीबीएमएस के लिए है?
ypercube y

जवाबों:


10

क्या मुझे आईडी फ़ील्ड निकालनी चाहिए?

मैं इसे रखने की सलाह दूंगा।

अब आपको फ़ील्ड की आवश्यकता नहीं हो सकती है , लेकिन भविष्य में, यह वास्तव में आपकी सहायता कर सकता है - क्या होगा यदि आपको प्रत्येक लॉग प्रविष्टि के लिए फ़ाइलों का विवरण संग्रहीत करने की आवश्यकता है?

मुझे नहीं पता कि यह तालिका कितनी बड़ी होगी और कितनी जल्दी, लेकिन एक बड़ी तालिका में एक कॉलम जोड़ना आम तौर पर एक महंगा ऑपरेशन है। यदि तालिका अपेक्षाकृत छोटी है, तो भंडारण स्थान के संदर्भ में रखना कोई बड़ी बात नहीं है। IMO, कॉलम रखें और बाद में एक संभावित सिरदर्द को बचाएं।

क्या मुझे या तो MessageId या ExportDateTime या दोनों पर एक प्राथमिक कुंजी चाहिए?

यह messageIdअकेले नहीं लगता है कि इस तालिका में अद्वितीय होगा (हालांकि मैं गलत हो सकता है), और अकेले / समय स्तंभ पर विशिष्टता बनाने से संभवतः डुप्लिकेट (और इसलिए त्रुटियां) पैदा हो सकती हैं। एकमात्र विकल्प बचा है 2-कॉलम कुंजी, जो विशेष रूप से उस परिदृश्य को देखते हुए आकर्षक नहीं है जिसे मैंने ऊपर सेट किया था।


अनिवार्य रूप से, इस उत्तर के बारे में मेरा कहना है कि कॉलम को रखना कोई बड़ी बात नहीं है (मैं मान रहा हूँ), लेकिन बाद में इसकी ज़रूरत होना बड़ी बात हो सकती है और इसे वापस लाने के लिए अतिरिक्त काम की आवश्यकता होती है।


6
  • यदि आपके पास इस तालिका में शामिल नहीं हैं, कोई अद्यतन नहीं है और कोई विलोपन नहीं है, तो आपको चाबियों की आवश्यकता नहीं है।

  • यदि यह मामला नहीं है, और messageIdअद्वितीय है, तो आप इसे प्राथमिक कुंजी बना सकते हैं।

  • यदि यह अद्वितीय नहीं है, लेकिन (messageId, exportedDateTime)है, तो इसे एक समग्र प्राथमिक कुंजी बनाएं।

  • यहां तक ​​कि अगर (messageId, exportedDateTime)संयोजन डुप्लिकेट और अपडेट दे सकता है और हटाए जाने की आवश्यकता हो सकती है (गलती से डाली गई पंक्तियों को हटाने के लिए कहें), तो आप बेहतर idफ़ील्ड को छोड़ देंगे ।


0

प्राथमिक कुंजी को चोट नहीं पहुंचेगी ... यदि आप लॉग / ऑडिट ट्रेल के उद्देश्य पर विचार करते हैं, तो संभवतया इसका उपयोग (क्वेर) भविष्य में किसी समस्या को सुलझाने या डेटा को पुनर्स्थापित करने आदि के लिए किया जाएगा और संभवतः अन्य में शामिल हो जाएगा। उस प्रकार के कार्य करने के लिए मौजूदा गैर-लॉग / ऑडिट टेबल।

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