2v2 গেমের জন্য ডেটাবেস স্ট্রাকচার


10

আমি নিয়মিত 12 বন্ধুদের সাথে একটি 2 ভি 2 গেম খেলি এবং আমি র‌্যাঙ্কিং সিস্টেম তৈরির অভিপ্রায় দিয়ে খেলোয়াড়, দল, স্কোর এবং গেমগুলির ট্র্যাক রাখতে একটি ডাটাবেস চাই।

যেহেতু আমরা নিয়মিতভাবে দল পরিবর্তন আমি টেবিল সঙ্গে আসা পর্যন্ত থাকেন players, teamsএবং gamesযেখানে গেম দুই দল (TEAM1 এবং TEAM2) আছে এবং দল দুই খেলোয়াড় (player1 এবং player2) দ্বারা গঠিত।

এটি বেশ কয়েকটি সমস্যা সৃষ্টি করে - উদাহরণস্বরূপ যদি আমি দুজন খেলোয়াড়কে বেছে নিয়ে আসি (আসুন তাদের এবং বি কল করুন ) একত্রে খেলতে প্লেয়ার 1 হ'ল এবং প্লেয়ার 2 বি বা প্লেয়ার 2 বি এবং প্লেয়ার 2 হ'ল ইহা একটি.

কলামগুলি gamesএবং টেবিল এবং টেবিল winsউভয়ই উপস্থিত রয়েছে - তবে এটি কারণ কারণ আমি খেলোয়াড়দের দ্বারা কয়টি গেম জিতেছে তা উভয়ই দেখতে চাই, তবে প্লেয়ারটি বিভিন্ন দলে কতটা সামঞ্জস্যপূর্ণ হয় (কোনও খেলোয়াড় কতবার জয়ী হয়ে জয়ী হয় যখন) অন্য নির্দিষ্ট খেলোয়াড়)।playersteams

  1. র‌্যাঙ্কিং স্কোরবোর্ড (আমি সম্ভবত এলো রেটিং সিস্টেমটি ব্যবহার করব )
  2. রেটিং, জয়, গেমস, সাম্প্রতিক গেমসের পরিসংখ্যান এবং কোন খেলোয়াড়ের সাথে তিনি সবচেয়ে বেশি উপযুক্ত তার সাথে প্রত্যেক খেলোয়াড়ের একটি পরিসংখ্যান পৃষ্ঠা।

আমি দৃ strongly়ভাবে সন্দেহ করি যে এটির বেশিরভাগটি ডাটাবেস নরমালাইজেশনের কিছু নীতি লঙ্ঘন করে এবং কীভাবে আমার ডাটাবেস ডিজাইনটি প্রয়োগ করতে হবে সে সম্পর্কে আমি কিছু পরামর্শ পছন্দ করব।

ডাটাবেস ডিজাইন


আমি মনে করি এটি খুব ভাল প্রশ্ন। প্রশ্নে আপনার বর্তমান ডিবি কাঠামোটি চিত্রটি দেখতে পছন্দ করবেন। সবাই লারাভেলের স্কিমা বিল্ডারকে চেনে না। ব্যবহারের কেসগুলি আরও ভালভাবে ছড়িয়ে দেওয়া যেতে পারে তাই আমরা আপনার আসল প্রয়োজনগুলি বুঝতে পারি।
candied_orange

আপনাকে অনেক ধন্যবাদ ধন্যবাদ ক্যান্ডিওড ওরেঞ্জ - আমি ডিবি কাঠামোর চিত্রটি যুক্ত করেছি এবং আরও ব্যবহারের ঘটনা যুক্ত করব :)
ড্যানিয়েল

সুন্দর আপডেট। আমি কী ধরে নিয়ে সঠিক হতে পারি যে প্রতিটি খেলোয়াড় একসাথে কেবল একটি দলে এবং এক সাথে কেবল একটি খেলায় থাকবে? এছাড়াও, সেই খেলোয়াড়রা সেই দলের জন্য তথ্য পুনরায় সেট না করে পুরানো দলে ফিরে যায় এবং ফিরে যায়?
candied_orange

@ ক্যান্ডিওড অরেঞ্জ মূলত যখন আমরা কোন খেলা খেলতে চাই তখন আমরা 4 জন খেলোয়াড় (মোট 12 ডলার খেলোয়াড়ের মধ্যে) খুঁজে পাই এবং এলোমেলোভাবে তাদের 2 টি দলে নিয়ে
ড্যানিয়েল

আমি বলতে পারি না এটি হ্যাঁ বা না ছিল কিনা। আমি বুঝতে চেষ্টা করছি যে সময় কীভাবে আপনার নকশাকে প্রভাবিত করে trying
candied_orange

উত্তর:


2

আপনার বর্তমান স্কিমার সাথে আমি দুটি বিষয় দেখতে পাচ্ছি, একটি হ'ল একটি যৌগিক কী কার্যকরভাবে একটি সদৃশ কিনা তা নির্ধারণ করার জন্য একটি টেবিলের দুটি ক্ষেত্র পরীক্ষা করার বিষয়টি এবং কিছু সামগ্রিক ডেটা আলাদা আলাদা আলাদা আলাদা আলাদা টেবিলে রোল করা হয় the সত্তা (বিশেষত জয়ী তবে সম্ভাব্য প্লেয়ারের রেটিং)

প্রথম ইস্যুটির জন্য, কোনও যৌগিক কীটির কোনও ক্ষেত্রকে আপনি যেভাবে খুঁজছেন বা যেভাবে খুঁজছেন তা তৈরি করার জন্য ইন-ডিবি কৌশলগুলি নেই, তবে যদি আপনার ডিবি এটি সমর্থন করে তবে getPlayerTeams(player_id)আপনি এনকেপসুলেট করার জন্য একটি ফাংশন তৈরি করতে পারেন প্রশ্ন।

(আপনি সাজানো প্লেয়ার আইডির একটি হ্যাশ হিসাবে গণনা করা দল_থাম্বপ্রিন্টের সাথেও একটি ভিউ তৈরি করতে পারেন, যাতে একই দুই ব্যক্তির যে কোনও কম্বো সর্বদা একই থাম্বপ্রিন্টের ফলস্বরূপ হয় তবে এটি এখানে কিছুটা হতে পারে))।

সাধারণকরণের হিসাবে, team_resultপ্রদত্ত দলের জন্য সমস্ত ফলাফল ট্র্যাক করতে একটি সারণী ব্যবহার করে ঘটে যাওয়া ফলাফলগুলি থেকে সত্তাকে পৃথক করার বিষয়টি বিবেচনা করুন । আরও কিছুটা চরম স্বাভাবিককরণ player_rating_histকোনও প্লেয়ারের জন্য সমস্ত রেটিং পরিবর্তনগুলি সহ কোনও টেবিলের জন্যও ডাকতে পারে । তাদের বর্তমান রেটিং কেবল সাম্প্রতিকতম তারিখের সাথে এক। সহজেই অনুসন্ধানের জন্য খেলোয়াড়ের দর্শনটি সাম্প্রতিকতম মানটি ব্যবহার করতেও ব্যবহৃত হতে পারে।

প্রস্তাবিত স্কিমা (দুঃখিত কোন চিত্র নেই):

player
    id
    name
    created_on
    updated_on

player_rating_hist
    player_id (FK)
    rating
    rating_date

team
    id
    player1_id (FK)
    player2_id (FK)
    created_on
    updated_on

game
    id
    team1_id (FK)
    team2_id (FK)

team_game
    team_id (FK)
    game_id (FK)
    result
    score
    rating_change

team_rating_hist
    team_id (FK)
    rating
    rating_date

প্রশ্নাবলী:

--Results for the game, should only ever be two rows for any given game
SELECT * FROM team_game WHERE game_id = 101

--All results for a team
SELECT * FROM team_game WHERE team_id = 123456 

এই কাঠামোটি সময়ের সাথে সাথে চলমান সিস্টেমের ফলস্বরূপ ঘটে যাওয়া "বিষয়বস্তু" থেকে "বেস" সত্তা (খেলোয়াড় এবং দল) কে আলাদা করার অনুমতি দেয় এবং এর অর্থ আপনি বর্তমান রেটিং সহ বেস টেবিলগুলির মধ্যে একটি নিয়মিত আপডেট করছেন না, # বিজয় ইত্যাদির মানগুলি উত্পন্ন এবং এগুলি সর্বশেষতম রেটিং, গড় রেটিং, COUNTজয় বা ক্ষতির ইত্যাদি অর্জনের মাধ্যমে পুনরুদ্ধার করা উচিত যদি সিস্টেমটি যথেষ্ট পরিমাণে বড় হয়ে যায় তবে আপনি এই জাতীয় সামগ্রীর ডেটা পৃথক "গুদামে" সরানোর বিষয়ে বিবেচনা করতে পারেন (এমনকি যদি এটি একই ডিবিতে কেবল আলাদা আলাদা টেবিলের সেট ছিল) সহজ বিশ্লেষণের জন্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.