ईकामर्स ऑर्डर टेबल। कीमतों को बचाएं, या ऑडिट / हिस्ट्री टेबल का उपयोग करें?


13

Im मेरा पहला ईकामर्स स्कीमा डिजाइन करना। मैं थोड़ी देर के लिए विषय के आसपास पढ़ रहा हूं, और ए order_line_itemऔर ए के बीच के संबंध के बारे में थोड़ा भ्रमित हूंproduct

A productखरीदा जा सकता है। इसमें विभिन्न विवरण हैं, लेकिन सबसे महत्वपूर्ण है unit_price

एक order_line_itemके लिए एक विदेशी कुंजी है product_idखरीदा है, quantityखरीदा है और unit_priceकुछ ही समय में बिंदु पर ग्राहक उत्पाद खरीदा।

मैंने जो पढ़ा है, उनमें से अधिकांश का कहना है कि unit_priceपर order_line_itemस्पष्ट रूप से जोड़ा जाना चाहिए (यानी के माध्यम से संदर्भित नहीं product_id)। समझ में आता है, क्योंकि स्टोर भविष्य में कीमत बदल सकता है जो ऑर्डर रिपोर्ट, ट्रैकिंग, अखंडता आदि को गड़बड़ कर देगा।

जो बात मुझे समझ में नहीं आ रही है, वह यह है कि सीधे unit_priceमूल्य को क्यों बचाया जाए order_line_item?

क्या ऑडिट / हिस्ट्री टेबल बनाना बेहतर नहीं होगा जो दस्तावेजों के unit_priceबदलाव को दर्शाता है product?

जब एक order_line_itemबनाया जाता है, तो product_auditतालिका की विदेशी कुंजी जोड़ दी जाती है और वहां से मूल्य (संदर्भ द्वारा) प्राप्त किया जा सकता है।

मुझे लगता है कि इस दृष्टिकोण का उपयोग करने के लिए बहुत कुछ सकारात्मक हो सकता है (डेटा का कम दोहराव, मूल्य परिवर्तन इतिहास आदि), इसलिए इसे अधिक बार उपयोग क्यों नहीं किया जाता है? मैं इस दृष्टिकोण का उपयोग करने वाले एक ईकामर्स स्कीमा के उदाहरण में नहीं आया हूं, क्या मुझे कुछ याद आ रहा है?

UDPATE: ऐसा लगता है कि मेरा प्रश्न धीरे-धीरे बदलते आयाम से संबंधित है । मैं अभी भी उलझन में हूँ क्योंकि धीरे-धीरे बदलते आयाम डेटा वेयरहाउस और OLAPs से संबंधित हैं। तो क्या स्लो चेंजिंग डाइमेंशन टाइप्स को मेरे मुख्य बिजनेस ट्रांजेक्शन प्रोसेस डेटाबेस (OLTP) पर लागू किया जा सकता है? मैं सोच रहा था कि मैं बहुत सारी अवधारणाओं को मिला रहा हूं, कुछ मार्गदर्शन की बहुत सराहना करेंगे।


मैं वास्तव में दोनों करूंगा: बिक्री मूल्य को ऑर्डर_लाइन में स्टोर करूं और उत्पाद की कीमतों के इतिहास को संग्रहीत करूं । क्योंकि दोनों अलग-अलग उद्देश्यों से सेवा करते हैं। बिक्री मूल्य को संग्रहीत करने से ऑर्डर पर प्रश्न बहुत आसान और तेज़ हो जाएंगे । दूसरी ओर आप उन उत्पादों के लिए भी पुरानी कीमतों को पुनः प्राप्त करना चाह सकते हैं जिन्हें बेचा नहीं गया है।
a_horse_with_no_name 11

निश्चित रूप से ऑर्डर क्वेरी को आसान बनाना हर बार अंतिम मूल्य को बचाने के पीछे एकमात्र ड्राइवर नहीं हो सकता है। यह सब के बाद एक रिलेशनल डेटाबेस - क्वेरीज़ इतना कठिन नहीं होगा।
गज़_एज

3
ऑर्डर लाइन में बिक्री मूल्य संग्रहीत करना "गैर-संबंधपरक" नहीं है (और मैं इसे सामान्यीकृत मानता हूं और साथ ही बिक्री मूल्य मेरी राय में ऑर्डर लाइन का एक प्रत्यक्ष गुण है)। रिलेशनल डेटाबेस का उपयोग करने की कला सीमा जानने के बारे में है। यदि आप एक दिन में 100 उत्पादों और 5 ऑर्डर के साथ एक दुकान चला रहे हैं, तो पुरानी कीमतों को संग्रहीत और पुनर्प्राप्त करना कोई समस्या नहीं है। यदि आप प्रति मिनट लाखों उत्पादों, हजारों डीलरों और आदेशों के हुंडरों के साथ एक बाज़ार चला रहे हैं, तो उस इतिहास को समझना एक समस्या होगी
a_horse_with_no_name

आप इतिहास की कीमतों को कहाँ स्टोर करेंगे? मैं जो पढ़ रहा हूं उससे मुझे दो डेटाबेस की आवश्यकता होगी। OLAP के लिए OLTP में से एक। OLAP में इतिहास जाता है?
गज़_एज

जवाबों:


10

जैसा कि आपने पहचाना है, ऑर्डर पर मूल्य संग्रहीत करना तकनीकी कार्यान्वयन को आसान बनाता है। हालांकि यह फायदेमंद हो सकता है क्यों कई व्यावसायिक कारण हैं।

वेब लेनदेन के अलावा, कई व्यवसाय अन्य चैनलों के माध्यम से बिक्री का समर्थन करते हैं, जैसे:

  • फोन पर
  • बिक्री एजेंटों "सड़क पर"
  • एक भौतिक स्थान पर (जैसे दुकान, कार्यालय)

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

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

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

यहां तक ​​कि अगर आप केवल वेब लेनदेन का समर्थन करते हैं और अपेक्षाकृत सरल मूल्य निर्धारण संरचना का समर्थन करते हैं, तब भी काबू पाने के लिए एक दिलचस्प समस्या है - उड़ान लेनदेन में मूल्य वृद्धि को कैसे नियंत्रित किया जाना चाहिए? क्या व्यवसाय जोर देता है कि ग्राहक को भुगतान करना चाहिए या क्या वे मूल मूल्य का सम्मान करते हैं (जब उत्पाद को टोकरी में जोड़ा गया था)? यदि यह बाद का है तो तकनीकी कार्यान्वयन जटिल है - आपको यह सुनिश्चित करने का तरीका खोजने की आवश्यकता है कि आप सत्र में मूल्य संस्करण को सही ढंग से बनाए रख रहे हैं।

अंत में, कई व्यवसाय अत्यधिक गतिशील मूल्य निर्धारण का उपयोग करना शुरू कर रहे हैं। किसी दिए गए उत्पाद के लिए एक निश्चित मूल्य नहीं हो सकता है - यह हमेशा कारकों के आधार पर गणना की जाती है जैसे दिन का समय, उत्पाद की मांग और इसी तरह। इन मामलों में कीमत पहली जगह में उत्पाद के खिलाफ संग्रहीत नहीं की जा सकती है!


3

मैं कुछ व्यावहारिक बिंदु जोड़ूंगा जो मैंने देखे हैं।

  1. उत्पाद क्षणिक हैं।

    आज वे जो संकेत कर सकते हैं, वही नहीं हो सकता है जैसा कि वे एक साल पहले करते थे। समान स्क्यू कोड (और इसलिए product_id), विभिन्न चरणों में विभिन्न प्रकार / उत्पाद को संदर्भित कर सकता है।

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

  2. आदेश देने और शिपिंग शर्तों के आधार पर अलग-अलग कीमतें

    जैसा कि उपयोगकर्ता @Chris ने उल्लेख किया है, अलग-अलग परिदृश्यों में अलग-अलग कीमतें लागू हो सकती हैं।

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

  3. चिंताओ का विभाजन

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

  4. कई प्रणालियों में आसान मापनीयता

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

  5. तेजी से विकास और चलने का समय

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

    कल्पना कीजिए कि आपको एक साल पहले दिए गए महीने के आधार पर दिन के आधार पर दी जाने वाली छूट के लिए ऑन-डिमांड रिपोर्ट बनाने के लिए कहा गया था। यदि आपके पास मूल मूल्य है, तो ऑर्डर, ऑर्डर आइटम विवरण के साथ 1-2 तालिकाओं में रियायती मूल्य, यह बहुत सीधे आगे है। यदि हां, तो आपको किसी अन्य तालिका से कीमतें प्राप्त करनी होंगी, और फिर किसी अन्य तालिका से लागू छूट, और फिर विवरण का पता लगाना होगा, विकास और चलने का समय दोनों अधिक होंगे।

एक अच्छे डिजाइन को भविष्य के लिए उतना ही अनुकूलित करने की कोशिश करनी चाहिए, जितनी वर्तमान के लिए होनी चाहिए।


2

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


संपादित करें: नीचे दिए गए मेरे अनुवर्ती टिप्पणी में, जो मैं ऊपर कह रहा था, उस पर विस्तार करने के लिए, और ऊपर दिए गए @a_horse_with_no_name ने ऊपर जो छुआ है, लेनदेन डेटा में अतिरेक न केवल महत्वपूर्ण है, बल्कि पैमाने पर भी आवश्यक है।

मैं मान रहा हूं कि आप OOP का उपयोग कर निर्माण कर रहे हैं और इसलिए आपके पास लेनदेन की वस्तु होनी चाहिए और या तो उत्पाद वस्तु और / या मूल्य वस्तु शामिल होनी चाहिए। अपने स्वयं के व्यक्तिगत अनुभव में, मैं अपने इतिहास में क्रियात्मक होना पसंद करता हूं, भंडारण अपेक्षाकृत चीप है।

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

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

यह इसके लायक है, मुझ पर विश्वास करो!


वास्तव में यह कहने का कोई मतलब नहीं है कि आप इसका उपयोग नहीं करते क्योंकि इसे हटाया जा सकता है। आप किसी भी डेटा को ओवरराइड कर सकते हैं। किसी भी रणनीति को बैकअप रखना चाहिए
Gaz_Edge

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

क्या होगा यदि मैं आदेशों पर रिपोर्ट चलाना चाहता हूं? जैसे कि कितने उत्पाद x खरीदे गए हैं? या y राशि पर कितने आदेश? XML के रूप में सहेजने का मतलब है कि आप डेटा को क्वेरी करने की क्षमता खो देते हैं, जब तक कि मैं गलत नहीं हूँ
Gaz_Edge

@Gaz_Edge सच नहीं है, यदि आप MySQL से बात कर रहे हैं, तो आपको मिल गया है SELECT ExtractValue(field_name, '/x/path/');ताकि आप चीजों के लिए फ़िल्टर कर सकें, एक विशिष्ट मुद्रा में सभी लेनदेन, या एक निश्चित न्यूनतम कर मूल्य के साथ सभी लेनदेन, या जो भी हो। ऑब्जेक्ट इतिहास से बड़े पैमाने पर रिपोर्ट की जा सकती है। बड़े पैमाने पर रिपोर्ट के लिए आप एक elasticsearchसर्वर / इंस्टेंस सेट कर सकते हैं जिसमें बिगडाटा स्टाइल रिपोर्टिंग है और यह आसानी से कई लाखों डॉक्स + में तब्दील हो जाता है।
14

@ Gaz_Edge मुझे भी उल्लेख करना चाहिए, जिन रिपोर्टों के बारे में आप बात कर रहे हैं (मूल्य से अधिक की खरीद, उत्पाद की बिक्री, आदि) सामान्य रिपोर्टें हैं और उन मूल्यों को तेजी से प्रसंस्करण के लिए लेनदेन रिकॉर्ड के साथ स्तंभ मान के रूप में संग्रहीत किया जाना चाहिए। कुछ भी जो महत्वपूर्ण है, लेकिन जरूरी नहीं कि अक्सर बताया गया हो XML में जा सकता है। स्नैपशॉट डेटा वास्तव में केवल दो चीजों के लिए है, 1. धीरे-धीरे बदलते आयाम मुद्दा, और 2. ग्राहक द्वारा शिकायत करने पर सत्यापन और तुलना, और आपको जल्दी से यह देखने की जरूरत है कि कौन सही है। यह हर दिन के उपयोग के लिए नहीं है।
ओसीएल

1

मेरा वोट आपके लाइन आइटम पर इकाई मूल्य को स्टोर करना और आपके उत्पादों के मूल्य निर्धारण इतिहास को एक अलग तालिका में ट्रैक करना होगा। इसके लिए मेरा औचित्य अतिरिक्त लचीलेपन के लिए है।

यहां तक ​​कि अगर आपके मूल्य निर्धारण की संरचना कठोर और अच्छी तरह से परिभाषित है और उन विविधताओं के लिए अनुमति नहीं देता है जो @Chris Saxon ऊपर उल्लिखित हैं, तो क्या आप सहज हैं कि यह हमेशा उसी तरह से रहेगा? यहां तक ​​कि अगर आप आश्वस्त हैं, तो अपने आप को एक कोने में क्यों पेंट करें? मुझे लगता है कि लाइन आइटम डिटेल पर इसे स्टोर करना एक अच्छा विचार होगा क्योंकि मैं इसे अलग रखने के लिए एक सम्मोहक कारण के बारे में नहीं सोच सकता।

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

हालाँकि, यदि आप अपने OLTP ईकॉमर्स डेटाबेस को डिज़ाइन करने के साथ-साथ डेटा वेयरहाउस स्कीमा और ETL प्रक्रिया को डिज़ाइन करने के साथ खुद को चिंता नहीं करना चाहते हैं, तो यह इतिहास निश्चित रूप से हमारे ईकॉमर्स डेटाबेस में कैद हो सकता है। यह एक अलग product_audit तालिका बनाने के साथ वर्णित किया जा सकता है, जो उत्पाद तालिका के बंद होने पर होती है और इसमें किसी उत्पाद के उस संस्करण के प्रारंभ और समाप्ति की तारीख होती है। यह उत्पाद तालिका में प्रारंभ और समाप्ति तिथियों को जोड़कर स्वयं भी किया जा सकता है ताकि यह इंगित किया जा सके कि वर्तमान में कौन सा उत्पाद सक्रिय है। हालाँकि, आपकी कंपनी द्वारा किए गए उत्पादों और संख्या या मूल्य परिवर्तनों के आधार पर, यह आपकी उत्पाद तालिका को उद्देश्य से बहुत बड़ा बना सकता है और बाद में क्वेरी के प्रदर्शन के मुद्दों का कारण बन सकता है।

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


जवाब के लिए धन्यवाद। मुझे लगता है कि मैं जिस रणनीति के साथ जा रहा हूं वह प्रति पुस्तक OLTP को डिजाइन करने वाली है। मैं वास्तव में रिपोर्टिंग के लिए डेटा वेयरहाउस होने के विचार को पसंद करता हूं। यद्यपि यह कुछ अतिरिक्त कार्य जोड़ता है (एक नया स्कीमा बना रहा है) स्कीमा को OLAP के अनुरूप बनाया जा सकता है। एक परिदृश्य से बचने के लिए जहां मैं एक गोल छेद में एक वर्ग खूंटी को फिट करने की कोशिश कर रहा हूं।
गज़_एज

@ Gaz_Edge: मेरी नई परियोजना के लिए निर्णय लेने के संदर्भ में समान स्थिति में हूं। क्या आप इस बारे में अपने विचार साझा करने की कृपा कर सकते हैं कि आपने एक साल पहले क्या डिजाइन दृष्टिकोण अपनाया था? यह अच्छी तरह से काम किया?
कोडर एब्सोल्यूट

@CoderAbsolute मेरा मूल समाधान बहुत 'डेटाबेस' केंद्रित था। मेरा आवेदन अब एक सेवा उन्मुख वास्तुकला के आसपास केंद्रित है। अब मेरे पास कई छोटे डिकोड्ड डेटाबेस स्कीमा हैं, बजाय एक कसकर युग्मित किए हुए। एक बड़े स्कीमा में 3N की जरूरत अब जा चुकी है। इसलिए मैं अब केवल यूनिट मूल्य को सीधे ऑर्डर में जोड़ता हूं। ऐतिहासिक उत्पाद मूल्य में बदलाव अब गायब हो गया है क्योंकि यह एक व्यावसायिक आवश्यकता नहीं थी। उम्मीद है की वो मदद करदे।
गाज़_एडज

0

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


कुछ छोटे उदाहरण आपके उत्तर को समझने में बहुत आसान बना देंगे। विशेष रूप से वाक्य जैसे 'आदेश आपके आवेदन के जीवनचक्र में एक बहुत ही विशेष घटना का एक कैप्चर किया गया स्नैपशॉट है'।
dezso
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.