2008-11-22 14 views
16

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

कोई भी स्कीमा + एसक्यूएल संयोजन का सुझाव दे सकता है जो विशेष रूप से पेज 11 पर छवि में वर्णित सभी कार्यक्षमताओं को समाहित करता है। अंतर और यूनियन काफी स्पष्ट हैं - जटिलता 'टेम्पोरल एक्सप्रेशन' का प्रतिनिधित्व करने में निहित है, जो परिवर्तनीय पैरामीटर लेती है और अलग-अलग व्याख्या की जानी चाहिए, और फिर उन्हें 'टेम्पोरल सेट' में संयोजित करना चाहिए।

स्पष्ट होने के लिए, संबंधपरक डेटाबेस में पुनरावर्ती घटनाओं की अवधारणा का प्रतिनिधित्व करने के कई तरीके हैं। मैं इस विशेष मॉडल को कैसे मैप करना चाहता हूं, इस बारे में हर किसी के इनपुट को मैं चाहता हूं।

कुछ संभव विकल्प:

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

पैरामीटर सूची है कि विधि के रूप में एक समाधान सेट आधारित प्रश्नों :)

उत्तर

2

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

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

फिर जब आपको पता होना चाहिए "क्या आज (या किसी दिए गए दिनांक) शेड्यूल का हिस्सा है?" उचित पंक्ति को देखना और सत्य/झूठा कॉलम देखना बहुत आसान है। प्रति वर्ष 365 पंक्तियों को संग्रहीत करना किसी भी डेटाबेस के लिए छोटा है।

यह धोखाधड़ी की तरह प्रतीत हो सकता है, लेकिन जैसा कि मैंने कहा, एसक्यूएल डेटा के सेट के बारे में है, तर्क नहीं।

+0

विचार के लिए धन्यवाद ... हालांकि एक तत्काल समस्या जो मैं देखता हूं, दिन-सेट उत्पन्न करने के लिए उपयोग किए जाने वाले नियमों का पुनर्निर्माण करने में सक्षम नहीं है। "हर सोमवार" को सहेजने से आपको 52 (या 53) डेटा पॉइंट मिलेंगे, लेकिन उन बिंदुओं को लोड करने से "हर सोमवार" को जरूरी नहीं माना जाएगा। – majelbstoat

+0

मॉडल समय बेहतर है। साल के दिनों, सप्ताह के दिनों, महीनों, आदि, सभी समय सारिणी से जुड़े हैं। फिर आप इन तालिकाओं पर चयन का उपयोग कर किसी भी (दिन-आधारित) नियम को व्यक्त कर सकते हैं। – SquareCog

+0

@ डिमिट्री: यहां तक ​​कि यदि आप ऐसा करते हैं, तो आपको कौन सी तालिकाओं में शामिल होने की समस्या है, और शर्तों को गठबंधन करने के लिए WHERE खंड में किस बूलियन अभिव्यक्ति का उपयोग करना है। यह कोई समस्या नहीं है कि एसक्यूएल को हल करने के लिए डिज़ाइन किया गया था। –

24

मुझे डर है कि इस उत्तर के संदर्भ और बहुत कम व्यावहारिक कोड का एक बहुत हो जाएगा हूँ, और यह कुछ समय के बाद से मैं पिछले इस के साथ गड़बड़ कर दिया गया है, लेकिन ...

मैं दो प्रौद्योगिकियों आप चाहते हैं लगता है यहां मिश्रण करने के लिए 'active databases' और 'temporal databases' हैं।

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

सक्रिय डेटाबेस ऐसे डेटाबेस हैं जो नियमों का उपयोग करके संग्रहीत तथ्यों में परिवर्तनों पर प्रतिक्रिया कर सकते हैं। ये नियम कार्यान्वयन विशिष्ट भाषाओं में निर्दिष्ट हैं, लेकिन हर दिन चर्चा Event-Condition-Action rules (ईसीए नियम) आम ​​हैं। सक्रिय डेटाबेस सिस्टम के परिचय के लिए लेख The Active Database Management System Manifesto और Active Database Systems पढ़ें। ईसीए नियमों के बारे में कुछ और जानकारी के लिए, Logical Events and ECA Rules देखें (पृष्ठ रिवर्स ऑर्डर o_0 में हैं) और Events in an Active Object-Oriented Database System

घटनाक्रम प्रसंस्करण संयुक्त घटनाओं को संभालने और उनके कार्यों को उचित तरीके से ट्रिगर करने के तरीके से निपटने वाले नियमों का एक विशेष मामला है। इसके बारे में एक दिलचस्प पठन Composite Events for Active Databases: Semantics, Contexts and Detection और Anatomy of a Composite Event Detector है। Complex Event Processing साइट और Event Stream Processing और Complex Event Processing विकिपीडिया लेख भी देखें।

टेम्पोरल डेटाबेस डेटाबेस के रूप में देखा जा सकता है जो समय को समझ सकता है, और विशेष रूप से दो विशिष्ट प्रकार के समय; वैध समय और लेनदेन-समय। रिकॉर्ड का वैध समय वह समय अवधि है जिसके दौरान वह रिकॉर्ड मान्य होता है, और रिकॉर्ड का लेनदेन-समय वह समय होता है जब यह डेटाबेस में मौजूद होता है। एक अच्छा व्यावहारिक परिचय के रूप में मैं पुस्तक को अनुशंसा करता हूं कि SQL में अस्थायी डेटाबेस कैसे करें: Developing Time-Oriented Database Applications in SQL रिचर्ड टी। स्नोडग्रास द्वारा।

अन्यथा, जो संभवतः आप अस्थायी डेटाबेस के बारे में जानना चाहते हैं, उन्हें Temporal Database Entries for the Springer Encyclopedia of Database Systems में पढ़ा जा सकता है जो एक सुंदर व्यापक दस्तावेज है (मैं 'टेम्पोरल डाटाबेस' प्रविष्टि से शुरू होता हूं), लेकिन थोड़ा तेज़ शुरू करने के लिए, चेक आउट Temporal Database Glossary जो ब्राउज़ करना और पढ़ना आसान है, और साइट Time Center जिसका प्रकाशन भाग क्षेत्र में सबसे उल्लेखनीय प्रकाशनों के लिंक (या था ...) है।

तो, अब आप इस बारे में सब कुछ जानते हैं, आप जल्दी से देखते हैं कि पृष्ठ 11 पर छवि को समग्र घटना के रूप में व्यक्त किया जा सकता है, और पाया जा सकता है जैसे कि आपने एक समग्र घटना के उचित आवश्यक सबसेट को लागू किया है डिटेक्टर, और बाकी को अस्थायी पहलुओं के साथ तालिकाओं में प्रविष्टियों के रूप में व्यक्त किया जा सकता है :)

मार्टिन फाउलर अपने आप को Patterns for things that change with time में अपने आप को संबोधित करता है जो समय के साथ सौदा करने वाले कई पैटर्न को सारांशित करता है।

अंत में, मैं शायद अस्थायी जानकारी के लिए डेटाबेस स्कीमा तैयार करता हूं और या तो सक्रिय भागों के लिए डीबी नियमों का उपयोग करता हूं या एप्लिकेशन में उस भाग को लागू करता हूं (हालांकि ड्रैगन हो सकता है)। यदि आप PostgreSQL का उपयोग करते हैं, तो नियम तंत्र को दस्तावेज़ों के The Rule System भाग में वर्णित किया गया है।

पढ़ने के लिए बहुत, लेकिन अगर आप अच्छी तरह से यह सब अपने पेशेवर निवल मूल्य को समझने काफ़ी :)

इसके अलावा तक जा सकता है, अच्छा शर्तों के 'अस्थायी डेटाबेस', 'सक्रिय डेटाबेस', 'ईसीए हैं नियम '।

+0

बहुत ही रोचक चीजें, और देखने के लिए बहुत सारे, धन्यवाद! – majelbstoat

+0

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

+1

बिलकुल नहीं - बस 'अस्थायी डेटाबेस' शब्द ने मुझे इस पुस्तक सहित कुछ नया स्थान दिया: http: //www.cs.arizona .edu/people/rts/tdbbook.pdf - जो कि अगर मुझे बिल्कुल वही नहीं है, तो भी दिलचस्प होगा :) – majelbstoat

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