क्या अलग-अलग कॉलम में तारीख और समय रखने के कोई अच्छे कारण हैं?


9

मैं तिथि और समय को अलग-अलग कॉलम में रखने के लिए हमारे सॉफ़्टवेयर विक्रेता के निर्णय को समझने की कोशिश कर रहा हूं। उदाहरण के लिए, जब पंक्ति बनाई या अपडेट की गई थी। दोनों समय और तारीख DateTime कॉलम हैं। हम SQL Server 2005 का उपयोग कर रहे हैं।

डेटाबेस हमारे ईआरपी सिस्टम का डेटा रखता है और मेरा मानना ​​है कि सबसे बड़ी तालिकाओं में लगभग ~ 3 मिलियन पंक्तियाँ हैं। अधिकांश तालिकाएं लगभग 100 000 - 1 000 000 पंक्तियों के बीच हैं।

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

क्या तिथि और समय खराब करना अलग है या इस डिजाइन में कुछ बहुत ही शानदार है जो मुझे समझ में नहीं आता है?

जवाबों:


4

मेरा अनुमान है कि यह एक विरासत समर्थन बात है (यानी उनके सॉफ़्टवेयर के संस्करण 1 में, उनके पास अलग-अलग क्षेत्रों में तारीख और समय था और उन्हें इसका समर्थन करने के लिए मजबूर किया गया है क्योंकि यह हमेशा उस तरह से काम करता है)।

उस ने कहा, तारीख और समय के बारे में कुछ भी शानदार नहीं है, इसलिए ऐसा कुछ नहीं है जो आप गायब हैं।

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


4

आम तौर पर, यह उपयोग पर निर्भर करता है। यदि कई प्रश्न एक साथ उप-तत्वों में शामिल हो रहे हैं, तो उन्हें एक साथ संग्रहीत करने पर विचार करें और फिर उन दुर्लभ अवसरों पर उन्हें अलग करने के लिए ओवरहेड पर ले जाएं। बेशक, विभाजन कभी-कभी अधिक जटिल (या असंभव) होता है: एक person_full_nameविशेषता पर विचार करें जिससे आपको निकालने की आवश्यकता होती है person_family_name। उस ने कहा, एक अस्थायी मूल्य कास्टिंग तुच्छ है इसलिए मैं आम तौर पर एक साथ तारीख और समय संग्रहीत करना पसंद करूंगा।

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


3

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

आप कोर डेटाइम कॉलम के आधार पर गणना किए गए कॉलम के रूप में दिनांक और समय भी प्रस्तुत कर सकते हैं।


0

ConcernedOfTunbridgeWe की टिप्पणी में जोड़ने के लिए, यदि आपके पास DateDimension और TimeDimension तालिका है, तो एक क्वेरी प्रदर्शन लाभ है। इस तथ्य पर विचार करें कि तालिका में डेटडिमेन्केय और टाइमडिमेंशनकेय दोनों हैं। यदि आप सुबह 8 से शाम 5 बजे के बीच किसी चीज़ की संख्या का पता लगाना चाहते हैं, तो आप बस कर सकते हैं

SELECT COUNT(1) FROM FactTable f Inner Join TimeDimension t on f.TimeDimensionKey = t.TimeDimension WHERE t.Hour BETWEEN 8 AND 17.

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

टाइमडिमेशन टेबल के बिना, आपको निम्नलिखित की तरह कुछ करना होगा,

SELECT COUNT(1) FROM FactTable f WHERE DatePart(mintue, f.Date) BETWEEN 8 AND 17

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

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