Database
 sql >> डेटाबेस >  >> RDS >> Database

स्टार ट्रेक 3D शतरंज डेटा मॉडल

यदि आप स्टार ट्रेक के प्रशंसक हैं, तो आप शायद जानते हैं कि कैप्टन किर्क और मिस्टर स्पॉक अक्सर शतरंज का एक प्रकार खेलते हैं जिसे त्रि-आयामी शतरंज कहा जाता है, या 3 डी शतरंज, एक ऐसा खेल जो मानक शतरंज के समान है लेकिन उल्लेखनीय अंतर के साथ है। इस लेख में, हम एक 3D शतरंज एप्लिकेशन के लिए एक डेटा मॉडल बनाएंगे जो खिलाड़ियों को एक दूसरे के खिलाफ प्रतिस्पर्धा करने की अनुमति देता है। हमें आगे बढ़ाएं, स्कॉटी!

3D शतरंज की अवधारणा

जबकि शतरंज पहले से ही एक जटिल खेल है, बोर्डों और टुकड़ों के कई सेटों के संयोजन से खेल की जटिलता में काफी वृद्धि हो सकती है।

3D शतरंज में, बोर्ड समानांतर परतों में ढेर होते हैं, और विशेष गति नियम कुछ टुकड़ों पर लागू होते हैं, यह इस बात पर निर्भर करता है कि वे कहाँ स्थित हैं। उदाहरण के लिए, मध्य बोर्ड पर प्यादे रानी के व्यवहार की नकल कर सकते हैं। कुछ प्रतिबंध लागू होने के साथ टुकड़े एक बोर्ड से दूसरे बोर्ड में भी जा सकते हैं, और बोर्ड स्वयं भी घूम सकते हैं और घूम सकते हैं। कोई आश्चर्य नहीं कि Kirk और Spock ने 3D शतरंज का इतना आनंद लिया—इसके लिए काफी सामरिक कुशलता की आवश्यकता होती है!

त्रि-आयामी शतरंज भी अपने बोर्डों के गुणों के संदर्भ में मानक शतरंज से विचलित होता है। 3डी शतरंज में अलग-अलग गुणों वाले सात अलग-अलग बोर्ड होते हैं। इनमें से तीन बोर्ड 4x4 के हैं, जबकि शेष चार बोर्ड 2x2 के हैं. आप इन छोटे बोर्डों को इधर-उधर कर सकते हैं।

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

डेटा मॉडल




हमारे डेटा मॉडल में तीन खंड होते हैं:

  1. खिलाड़ी और खेल
  2. गेम सेटअप
  3. मैच

अब हम इनमें से प्रत्येक क्षेत्र पर अधिक विस्तार से चर्चा करेंगे।

अनुभाग 1:खिलाड़ी और खेल

हमारे मॉडल में सब कुछ प्रत्यक्ष या परोक्ष रूप से खेलों से संबंधित है। बेशक, खिलाड़ियों के बिना खेल आगे नहीं बढ़ सकता!

सभी खिलाड़ियों की सूची player टेबल। हमारे मॉडल में, खिलाड़ी हमारे आवेदन के सभी पंजीकृत उपयोगकर्ता हैं। प्रत्येक खिलाड़ी के लिए, हम निम्नलिखित जानकारी संग्रहीत करेंगे:

  • first_name और last_name - खिलाड़ी के पहले और अंतिम नाम, क्रमशः।
  • user_name - खिलाड़ी द्वारा चयनित उपयोगकर्ता नाम, जो अद्वितीय होना चाहिए।
  • password - खिलाड़ी के पासवर्ड का हैश मान।
  • nickname - खिलाड़ी का स्क्रीन नाम, जो उनके उपयोगकर्ता नाम की तरह अद्वितीय होना चाहिए।
  • email - खिलाड़ी का ईमेल पता, जो वे पंजीकरण प्रक्रिया के दौरान प्रदान करेंगे। पंजीकरण प्रक्रिया को पूरा करने के लिए आवश्यक कोड इस ईमेल पर भेजा जाएगा।
  • confirmation_code - वह कोड जो खिलाड़ी के ईमेल पते पर उनकी पंजीकरण प्रक्रिया को पूरा करने के लिए भेजा गया था।
  • confirmation_date - उस टाइमस्टैम्प का जब खिलाड़ी ने अपने ईमेल पते की पुष्टि की। यह विशेषता NULL को तब तक संग्रहीत करेगी जब तक कि खिलाड़ी अपने ईमेल की पुष्टि नहीं कर देता।
  • current_rating - खिलाड़ी की वर्तमान रेटिंग, अन्य खिलाड़ियों के खिलाफ उनके प्रदर्शन के आधार पर गणना की जाती है। खिलाड़ी कुछ प्रारंभिक मूल्य के साथ शुरू करेंगे, और उनकी रेटिंग उनके विरोधियों के रैंक और उनके खेल परिणामों के अनुसार बढ़ेगी या घटेगी।
<मजबूत>

result टेबल एक शब्दकोश है जो सभी संभावित अद्वितीय गेम परिणामों के मूल्यों को संग्रहीत करता है, अर्थात् "in_progress", "ड्रा", "जीत" और "हार"।

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

  • player_id_1 और player_id_2 - player एक खेल के दोनों प्रतिभागियों को दर्शाने वाली तालिका। जैसा कि उल्लेख किया गया है, हम मान रहे हैं कि एक खेल दो मानव खिलाड़ियों के बीच सख्ती से होगा।
  • number_of_moves - वर्तमान गेम में अब तक किए गए चालों की संख्या को दर्शाता है। जब खेल शुरू होता है, तो यह संख्या 0 पर सेट हो जाती है और खिलाड़ी द्वारा हर बार चाल चलने पर 1 बढ़ जाती है।
  • player_id_next - उस खिलाड़ी का संदर्भ जिसे वर्तमान गेम में अगला कदम उठाना चाहिए।
  • result_id_1 और result_id_2result तालिका जो प्रत्येक खिलाड़ी के लिए खेल के परिणाम को संग्रहीत करती है।
  • player_1_points_won और player_2_points_won - खेल के परिणाम के अनुसार खिलाड़ियों को दिए गए अंकों की संख्या को इंगित करें।

हम इस बात पर चर्चा करेंगे कि कैसे खिलाड़ी इस लेख के अंत में मैच सेक्शन में सभी चालों पर नज़र रख सकते हैं। अभी के लिए, हम गेम सेटअप पर आगे बढ़ेंगे।

अनुभाग 2:गेम सेटअप

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

जैसा कि हमने पहले बताया, 3डी शतरंज में अक्सर एक से अधिक बोर्ड शामिल होते हैं। ये बोर्ड स्थिर पदों के साथ मानक 8x8 आयामों का पालन कर सकते हैं, लेकिन ऐसा होने की आवश्यकता नहीं है। सभी बोर्डों की सूची board टेबल। प्रत्येक बोर्ड के लिए, हम एक अद्वितीय board_name संग्रहित करेंगे , starting_position हमारे चुने हुए 3D निर्देशांकों के संबंध में बोर्ड का, और सभी अतिरिक्त details

इसके बाद, हम उन सभी संभावित प्रकार के टुकड़ों को परिभाषित करेंगे जो हमारे शतरंज बोर्ड पर दिखाई दे सकते हैं। ऐसा करने के लिए, हम piece_type शब्दकोश। इसकी प्राथमिक कुंजी के अलावा, इस शब्दकोश में केवल एक अद्वितीय मान है, type_name। एक मानक शतरंज सेट के लिए, हम इस शब्दकोश में "मोहरा", "रूक", "नाइट", "बिशप", "किंग" और "क्वीन" मान देखने की उम्मीद करते हैं।

3D शतरंज के खेल में उपयोग किए जाने वाले सभी व्यक्तिगत टुकड़ों की सूची piece टेबल। प्रत्येक टुकड़े के लिए, हम निम्नलिखित जानकारी संग्रहीत करेंगे:

  • piece_name - टुकड़े के प्रकार और उसकी शुरुआती स्थिति का वर्णन करने वाला एक अनूठा नाम।
  • starting_position - सटीक बोर्ड और वर्ग को दर्शाने वाला एक मान जिस पर शुरू में टुकड़ा रखा गया है।
  • board_id - उस बोर्ड का संदर्भ जिस पर मूल रूप से टुकड़ा रखा गया है।
  • piece_type_id - एक संदर्भ जो टुकड़े के प्रकार को दर्शाता है।

अंत में, हम move_type टेबल सभी संभावित चालों की सूची को स्टोर करने के लिए टुकड़े हमारे बोर्डों पर बना सकते हैं (साथ ही साथ बोर्ड स्वयं कर सकते हैं कोई भी चाल)। परिचय से याद करें कि कुछ बोर्ड अपने टुकड़ों पर विशेष आंदोलन नियम लागू करते हैं। प्रत्येक चाल के लिए, हम निम्नलिखित को परिभाषित करेंगे:

  • type_name - एक ऐसा नाम जिसका उपयोग हम उस कदम को दर्शाने के लिए करेंगे जो कि किया गया था, जो एक अद्वितीय मूल्य नहीं होगा (उदाहरण के लिए, हम "प्यादा उन्नत 1 वर्ग आगे" जितनी बार आवश्यक हो सकते हैं)।
  • piece_type_id - उस टुकड़े के प्रकार का संदर्भ जिसे स्थानांतरित किया गया था। यदि यह मान NULL होता है, तो आंदोलन पूरे बोर्ड से संबंधित होता है न कि किसी विशेष टुकड़े से।
  • board_id - उस बोर्ड को दर्शाता है जिस पर यह चाल होगी (यदि कोई शतरंज का टुकड़ा चल रहा है)। यदि बोर्ड स्वयं चल रहा है, तो यह मान स्वाभाविक रूप से उस बोर्ड का प्रतिनिधित्व करेगा जिसे स्थानांतरित किया जा रहा है। पिछली दो विशेषताओं के साथ, यह इस तालिका के लिए अद्वितीय कुंजी बनाता है।
  • is_piece_move और is_board_move - इंगित करें कि कोई चाल शतरंज के टुकड़े या बोर्ड से संबंधित है या नहीं। किसी विशेष चाल के लिए इनमें से केवल एक फ़्लैग को सही पर सेट किया जा सकता है।

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

अनुभाग 3:मिलान

हम लगभग समाप्त कर चुके हैं! हमारे मॉडल के अंतिम खंड का नाम माचिस है और इसमें तीन नई तालिकाएँ हैं जिनका उपयोग हम 3D शतरंज के खेल में आंदोलन के इतिहास पर नज़र रखने के लिए करेंगे। शेष तालिकाएँ हमारे डेटा मॉडल से अन्य तालिकाओं की प्रतियाँ हैं, जो अतिव्यापी संबंधों से बचने में मदद करती हैं। हम इस क्षेत्र में सभी बोर्डों और उनके टुकड़ों की वर्तमान स्थिति को भी संग्रहीत करेंगे। आइए सीधे अंदर जाएं।

move तालिका वास्तव में इस खंड की सबसे जटिल तालिका है। इसमें एक गेम के दौरान निष्पादित सभी चालों की सूची है। यह तालिका खिलाड़ियों को सभी चालों की सूची प्रदर्शित करेगी, जिसका उपयोग बाद में मैच की समीक्षा या विश्लेषण करने के लिए किया जा सकता है। प्रत्येक चाल के लिए, हम निम्नलिखित संग्रहीत करेंगे:

  • game_id - game जिसमें यह कदम उठाया गया था।
  • player_id - player किसने यह कदम उठाया।
  • move_in_the_game - चाल की क्रमिक संख्या। यह संख्या, एक टुकड़े की शुरुआती स्थिति और अन्य सभी चालों के साथ, पूरे खेल को फिर से बनाने के लिए उपयोग की जा सकती है। विचार यह है कि खिलाड़ियों को खेल के पूरा होने के बाद उसका अनुकरण करने की अनुमति दी जाए ताकि वे मैच के परिणामों का विश्लेषण कर सकें।
  • piece_id - piece जिसे स्थानांतरित कर दिया गया। इससे शुरू से अंत तक (मुख्य रूप से विश्लेषण उद्देश्यों के लिए) एक टुकड़े की गति को ट्रैक करना आसान हो जाता है।
  • piece_type_id - उस टुकड़े के प्रकार का संदर्भ जिसे स्थानांतरित किया गया था। जबकि एक टुकड़े का संदर्भ हमेशा स्थिर रहेगा, इसका प्रकार पूरे खेल में बदल सकता है (जैसे कि अगर एक मोहरे को बढ़ावा दिया जाता है)। यदि हम बोर्ड को स्थानांतरित कर रहे हैं, तो इस विशेषता में NULL का मान होगा।
  • board_id - board जिस पर यह कदम उठाया गया।
  • move_notation - एक सहमत संकेतन जिसका उपयोग हम चालों का प्रतिनिधित्व करने के लिए करेंगे।

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

current_board_position हमारे 3D समन्वय प्रणाली में सभी बोर्डों की स्थिति को संग्रहीत करने के लिए उपयोग किया जाता है। यह 3D शतरंज के खेल के लिए आवश्यक है जिसमें कम से कम एक बोर्ड अपनी स्थिति बदल सकता है। इस तालिका में प्रत्येक रिकॉर्ड के लिए, हम संबंधित गेम और बोर्ड के संदर्भ के साथ-साथ बोर्ड की स्थिति के नोटेशन को भी स्टोर करेंगे। दो विशिष्ट विशेषता जोड़े, game_id + board_id और game_id + position_notation , इस तालिका के लिए अद्वितीय कुंजियाँ बनाएँ।

हमारी अंतिम तालिका है current_piece_position , जो संबंधित गेम के संदर्भों को संग्रहीत करता है, एक विशेष टुकड़ा, टुकड़े का प्रकार, और टुकड़े के लिए एक स्थिति संकेतन। हमारे पास फिर से दो जोड़ी विशेषताएँ होंगी जो इस तालिका के लिए अद्वितीय कुंजियों के रूप में काम करेंगी:game_id और piece_id जोड़ी और game_id और position_notation जोड़ी।

निष्कर्ष

इस डेटा मॉडल के बारे में यही है—हमें यह घोषणा करते हुए गर्व हो रहा है कि कैप्टन किर्क और मिस्टर स्पॉक अब कंप्यूटर पर 3डी शतरंज खेल सकते हैं!

हमारे डेटा मॉडल में सुधार के लिए क्या आपके पास कोई सुझाव है? नीचे अपनी टिप्पणी छोड़ने के लिए स्वतंत्र महसूस करें। दीर्घायु और समृद्ध रहें ??


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या RID लुकअप की लुकअप की तुलना में तेज़ है?

  2. SQL के साथ टेबल और कॉलम कैसे ड्रॉप करें

  3. ओडीबीसी 4.0

  4. सामग्री का लचीला और प्रबंधनीय बिल (बीओएम) डिजाइन

  5. एपीपीEND_ONLY_STORAGE_INSERT_POINT कुंडी