में पेड़ शाखा डेटा एकत्रीकरण को अनुकूलित करना मेरे पास एक सारणी है जिसमें कुछ परियोजनाओं के चरण और उप-चरण हैं, और विशिष्ट कार्य और अनुमानित लागत वाली तालिका है।
मुझे यह देखने के लिए कि प्रत्येक लागत कितनी लागत है, लेकिन इसे न्यूनतम प्रदर्शन लागत पर करने के लिए प्रत्येक स्तर (चरण/उप-चरण) को एकत्र करने के लिए कुछ तरीका चाहिए। निम्न डेटा के साथSQL सर्वर 2008 (रिकर्सन)
CREATE TABLE stage
(
id int not null,
fk_parent int
)
CREATE TABLE task
(
id int not null,
fk_stage int not null,
cost decimal(18,2) not null default 0
)
:
इसे दर्शाने के लिए, मैं निम्नलिखित डेटा संरचना का उपयोग करेगा
==stage==
id fk_parent
1 null
2 1
3 1
==task==
id fk_stage cost
1 2 100
1 2 200
1 3 600
मैं प्रत्येक शाखा पर कुल लागत से युक्त एक मेज प्राप्त करने के लिए चाहते हैं। कुछ ऐसा:
Stage ID Total Cost
1 900
2 300
3 600
लेकिन, मैं यह भी उत्पादक बनना चाहता हूं। मैं The worst algorithm in the world जैसे बेहद खराब समाधानों के साथ समाप्त नहीं करना चाहता हूं। मेरा मतलब है कि यह मामला है। यदि मैं stage
तालिका में सभी वस्तुओं के लिए डेटा का अनुरोध करूंगा, कुल लागत के साथ, प्रत्येक कुल लागत का मूल्यांकन D
बार किया जाएगा, जहां D
पेड़ (स्तर) में गहराई है, जहां यह स्थित है। मुझे डर है कि मैं बहुत सारे स्तरों के साथ बड़ी मात्रा में डेटा पर बेहद कम प्रदर्शन करता हूं।
अतः,
मैं कुछ जो मुझे इस सवाल यहाँ का आग्रह करने के लिए फैसला किया।
मैंने कैशिंग के लिए stage
तालिका में 2 और कॉलम जोड़ने का निर्णय लिया।
...
calculated_cost decimal(18,2),
date_calculated_cost datetime
...
तो क्या मैं करना चाहता था, एक datetime
मूल्य है जो समय के बराबर है जब इस प्रक्रिया को शुरू किया गया था (काफी अनूठा) कोड के भीतर एक और चर जाते हैं। इस तरह, यदि stage
पंक्ति में पहले से ही date_calculated_cost
है जो कि मैं ले जा रहा हूं, उसके बराबर है, तो मैं इसे फिर से गणना करने की परेशानी नहीं करता, और केवल calculated_cost
मान वापस लौटाता हूं।
मैं कार्य के साथ ऐसा नहीं कर सकता है (एक बार लागतों की गणना अद्यतन, stage
तालिका के लिए आवश्यक हैं)
मैं प्रक्रिया के साथ यह नहीं कर सका
मैं (चल कर्सर भीतर प्रत्यावर्तन नो-गो है) मुझे यकीन नहीं है कि अस्थायी सारणी उपयुक्त हैं क्योंकि यह एक ही प्रक्रिया के समवर्ती अनुरोधों की अनुमति नहीं देगी (जो कम से कम संभावना है, लेकिन वैसे भी मैं इसे सही तरीके से करना चाहता हूं)
मैं अन्य तरीकों को समझ नहीं पाया।
मुझे अपने प्रश्न का एक निश्चित उत्तर की उम्मीद नहीं है, लेकिन मैं किसी भी अच्छे विचार को पुरस्कृत करूंगा, और सबसे अच्छा जवाब के रूप में चुना जाएगा।
उत्तर के लिए इंतजार करते समय, मैंने अपनी समस्या (मुझे लगता है) हल किया। मैंने कुछ फ़ील्ड जोड़े, मैं एक ट्रिगर के अंदर मंच के 'स्तर' की गणना करता हूं, फिर सभी चरणों के खिलाफ एक कर्सर चलाता हूं, स्तर से उतरने का आदेश देता है, और वांछित परिणाम प्राप्त करता हूं। सभी लेनदेन के अंदर किया जाता है जो सभी संसाधनों को ताला लगा देता है, इसलिए पेड़ में कोई पत्ता संशोधित नहीं किया जा सकता है। ऐसा लगता है कि काम कर रहा है, लेकिन मुझे कुछ वास्तविक डेटा प्राप्त करने और परीक्षण करने के लिए एकीकरण भाग को समाप्त करने की आवश्यकता है, फिर मैं इसे यहां भी पोस्ट करूंगा। आपके उत्तर सही होने लगते हैं, और मेरे लिए बहुत दिलचस्प है। आपका समय देने के लिए आपका बहुत बहुत धन्यवाद। – AlexanderMP