टूर्नामेंट डेटाबेस को डिजाइन करने का सबसे अच्छा तरीका है


13

मैं आगामी यूरो 2012 फुटबॉल टूर्नामेंट के सभी मैचों पर दांव लगाने के लिए एक वेबपेज बना रहा हूं। नॉकआउट चरण के लिए क्या दृष्टिकोण लेना है, यह तय करने में कुछ मदद चाहिए।

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

लेकिन क्वार्टर और सेमी फाइनल को स्टोर करने का सबसे अच्छा तरीका क्या है? वे मैच समूह चरण में परिणाम पर निर्भर करते हैं।

मुझे लगा कि एक दृष्टिकोण matchesतालिका में सभी मैचों को जोड़ रहा है , लेकिन नॉकआउट चरण में मैचों के लिए घर / दूर टीमों को अलग-अलग चर या पहचानकर्ता असाइन करें। और फिर उन पहचानकर्ताओं के साथ कुछ अन्य तालिका भी टीमों के लिए मैप की गई है ... यह काम कर सकता है, लेकिन सही नहीं लगता है।

बुनियादी डेटाबेस डिजाइन


क्या आप MySQL का उपयोग करने के लिए व्यवस्थित हैं या विकल्प के लिए खुले हैं?
जैक का कहना है कि topanswers.xyz

बहुत ज्यादा बसे हुए हैं .. क्या MySQL के साथ कोई फायदे / नुकसान हैं जिनके बारे में मुझे पता होना चाहिए?
हैमपूसोल्सन 17

चेक बाधाओं को लागू नहीं किया जाता है। आम तौर पर डीआरआई के साथ बाधाओं को लागू करने के लिए कम विकल्प - लेकिन क्या आपके लिए यह मामला आपके आवेदन पर बहुत निर्भर करता है। यदि आप अधिक राय चाहते हैं, तो चैट करने के लिए शुभकामनाएं :)
जैक कहते हैं कि 18ans में topanswers.xyz

धन्यवाद, लेकिन मुझे नहीं लगता कि मैं वैसे भी बाधाओं का उपयोग कर सकता हूं क्योंकि मैं इससे बहुत परिचित नहीं हूं। डीबी को भेजे जाने से पहले मेरे आवेदन में सभी डेटा को मान्य करेगा, इसे सरल रखते हुए
हैमपोहोल्सन

अच्छा अच्छा। यह निश्चित रूप से डीबी में सरल है, लेकिन यह एक पूरी बातचीत है ;)
जैक कहते हैं topanswers.xyz

जवाबों:


3

मैं मॉडल में सभी पूर्वनिर्धारित जानकारी को ठीक करने की कोशिश करके शुरू करूँगा जिसमें स्वयं भी शामिल है

  • दिनांक / स्थानों
  • संरचना (अर्थात समूह / नॉकआउट चरण)
  • नियम (यानी अंक स्कोरिंग, टाई-ब्रेक नियम)

इस जानकारी में से कुछ तालिका में डेटा होंगे, कुछ को विचारों में संहिताबद्ध तर्क दिया जाएगा।

कुछ इस तरह शायद:

  • टीम (team_id, group_code enum ('A', 'B', 'C', 'D'), नाम)
  • मैच (मैच_ड, किकऑफ_अट)
  • group_match (match_id, team_id_home, team_id_away, group_code)
  • पीटा
  • परिणाम (match_id, score_home, score_away)

Q1 में कौन सी टीम खेलती है, इसकी जानकारी को सीधे संग्रहीत करने की आवश्यकता नहीं है, क्योंकि इसकी गणना समूह चरण के परिणामों से की जा सकती है। केवल के रूप में टूर्नामेंट की प्रगति में आवेषण हैं परिवर्तन करने के लिए resultतालिका।


3

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

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

   A
match 1 -----+
   B         A
          match 5 -----+
   C         C         |
match 2 -----+         |
   D                   A
                    match 7
   E                   F
match 3 -----+         |
   F         F         |
          match 6 -----+
   G         G
match 4 -----+
   H

... तो यह संभवतः एक क्वेरी के साथ किया जा सकता है। फिर से, क्वेरी की जटिलता टीमों की संख्या के आधार पर प्रयास के लायक नहीं हो सकती है


1

सभी मैचों को तालिका "मैचों" में संग्रहीत करना एक अच्छा विचार है। हालाँकि, मैं इसमें एक एडिशनल फील्ड "रैंकिंग" जोड़ूंगा, क्योंकि बाद में आपको मेमोरी में टेबल को कुशलतापूर्वक क्वेरी करने के लिए बाइनरी ट्री बनाने की आवश्यकता होती है। यह एक क्लासिक रैंकिंग एल्गोरिथ्म समस्या है और आप अधिक जानकारी के लिए ग्रे कोड टूर्नामेंट के लिए गूगल कर सकते हैं या मेरे स्टैकओवरफ़्लो इतिहास में देख सकते हैं। मूल रूप से एक टूर्नामेंट एक बाइनरी ट्री है। यहाँ ग्रे कोड के बारे में एक अच्छा लेख है: http://villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm । दुर्भाग्य से यह फ्रेंच है। यहां बताया गया है कि रैंकिंग से एक बाइनरी ट्री कैसे उत्पन्न किया जाता है: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068

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