অজানা সর্বোচ্চ সংখ্যক গুণাবলী সহ কোনও সত্তা কীভাবে প্রয়োগ করবেন?


12

আমি একটি বেসবল সিমুলেশন প্রোগ্রাম ডিজাইন করছি এবং আমি বক্সস্কোর স্কিমা ডিজাইনিংয়ের ক্ষেত্রে একটি সমস্যায় পড়েছি। আমার সমস্যাটি হ'ল প্রতিটি ইনিংসে কত রান হয় তা আমি ট্র্যাক করতে চাই। আসল প্রোগ্রামে আমি যেভাবে এটি করি তা হ'ল একটি গতিশীল অ্যারে ব্যবহার করা যা প্রতিটি খেলানো ইনিংয়ের জন্য বেড়ে যায়।

বেসবলের খেলাটির সাথে অপরিচিতদের জন্য, খেলাটি 9 তম ইনিংসের শেষে এখনও বাঁধা না থাকলে গেমগুলি সাধারণত নয় ইনিংস দীর্ঘ হয়। অতএব বেসবল গেমগুলির একটি নির্ধারিত দৈর্ঘ্য রয়েছে যার অর্থ আমি প্রতিটি ইনিংসে রান করার জন্য 9 টি কলাম রাখতে কেবল ডেটাবেসটি ডিজাইন করতে পারি না (ভাল প্রযুক্তিগতভাবে 18 (9-ইনিংস * 2-দল) ।আমার একটি ধারণা ছিল অ্যারের সিরিয়ালাইজ করা এবং এটি ডাটাবেসে সংরক্ষণ করার আগে এটি বেস 64 হিসাবে এনকোড করুন However তবে, এটি ব্যবহার করার জন্য এটি একটি ভাল কৌশল কিনা তা আমি জানি না এবং কারও কাছে আরও ভাল ধারণা আছে কিনা তা নিয়ে আমি ভাবছিলাম।

যদি এটি গুরুত্বপূর্ণ হয় তবে আমি যে ডাটাবেসটির চারপাশে বিকাশ করছি তা হ'ল পোস্টগ্র্যাস এসকিউএল।

যেকোনো পরামর্শ সাদরে গ্রহিত হবে! ধন্যবাদ!

উত্তর:


7

আপনি এটি করতে পারে। এটি আপনাকে দীর্ঘকালীন চলমান গেমস সংরক্ষণ করার অনুমতি দেওয়ার সময় স্বাভাবিক সময়কালের গেমগুলির জন্য ভাল পারফরম্যান্সের অনুমতি দেয়।

CREATE TABLE InningRuns (
    GameId INT NOT NULL REFERENCES [...],
    Team CHAR(4) NOT NULL, --'Home','Away'
    Inning1 TINYINT, --Seeing how more than 255 runs are not really possible in an inning
    Inning2 TINYINT,
    [...],
    Inning9 TINYINT,
    ExtraInnings XML | TINYINT[] | VARBINARY | ETC., --Use to hold any runs in extra innings.
    PRIMARY KEY (GameId, Team)
)

আপনি আরও স্বাভাবিক করতে এবং গেম, দল এবং ইনিংয়ের প্রতিটি অনন্য সংমিশ্রণের জন্য একটি সারি রাখতে পারেন। এটি আপনাকে ইননিং আইডি ডেটাটাইপ হিসাবে যতটা ইনিংস অনুমতি দেবে।

CREATE TABLE InningRuns (
    InningRunId INT IDENTITY PRIMARY KEY,
    GameId INT NOT NULL REFERENCES [...],
    Team CHAR(4) NOT NULL, --'Home','Away'
    InningId TINYINT, --Seeing how more than 255 innings might be excessive
    Runs TINYINT,
    UNIQUE (GameId, Team, InningId)
)

সম্পাদনা : আমি জানি পোস্টগ্র্যাস এসকিউএল আইডেন্টিটির পরিবর্তে সিকোয়েন্সগুলি ব্যবহার করে, আমি সঠিক সিনট্যাক্সটি হাতছাড়া করি না, সুতরাং সেই অনুসারে অনুবাদ করুন।


হাহা, আমি পছন্দ করি যে আমি আমার উত্তর লেখার আগে পর্যন্ত উদ্দেশ্যমূলকভাবে আপনার উত্তরটি পড়িনি এবং আমরা অন্যটির খুব কাছে এসেছি। খুশী হলাম।
jcolebrand

এই উত্তরের জন্য আপনাকে ধন্যবাদ, এটি উপলব্ধি করে এবং আমি কীভাবে বক্স স্কোর স্কিমার প্রয়োগ করব।
ফিলিপ লোম্বার্ডি

4

আমি মনে করি না যে কেবল একটি কলাম থাকাতে কোনও সমস্যা আছে

inning_score int[]

1 থেকে 9 এবং এর বাইরেও। এটি এমন কয়েকটি জায়গার মধ্যে একটি যেখানে অ্যারে ব্যবহার করা যুক্তিসঙ্গত হতে পারে।


3

সুতরাং আমি এখানে যা দেখছি তা একটু পরস্পরবিরোধী কারণ ইনিংসগুলি সত্যই পরোক্ষভাবে বাদে গেমগুলির সরাসরি কোনও বৈশিষ্ট্য নয়। তবে সম্ভবত এটি আমিই। আমি ব্যক্তিগতভাবে রানসকর্ডেড টেবিলের মতো আরও কিছু প্রস্তাব করব এবং এটি কোনও গেমস হিডারের টেবিলের সাথে আবার কোনও লিঙ্কের সাথে যুক্ত করব, তাই বিবেচনা করুন:

CREATE TABLE GamesHeader (
    GameID     INT IDENTITY(1,1),
    HomeTeamID INT,  --FK to teams table, naturally
    AwayTeamID INT,  --FK to teams table, naturally
    FinalInningsCount BYTE,  -- for faster reporting after the game is over
    FinalHomeScore BYTE,     -- for faster reporting after the game is over
    FinalAwayScore BYTE,     -- for faster reporting after the game is over
    --Other attribs
)

CREATE TABLE RunsScored (
    RunsScoredID BIGINT IDENTITY(1,1), -- for faster reverse traversal, possibly. May not be needed, this depends on your setup, as the normalization will show a composite key anyways
    PlayerID INT,   --FK to players table naturally
    GameID INT,     --FK to GamesHeader table naturally
    Inning BYTE, --wait for the payoff
    RunsEarned,     --because you may want to track this by the player ... really the problem is that there's not a single naturalized setup for this, so you may be intersecting this table to another stats table elsewhere. idk, it depends on your model. I'm going for fairly simplistic atm. Wanted to demonstrate something else entirely, but this needs to be accounted for.
     -- other attribs
)

SELECT MAX(r.Inning) FROM RunsScored r JOIN GamesHeader g ON g.GameID = r.GameID WHERE GameID = 'x'

এটি আপনাকে একটি নির্দিষ্ট গেমের জন্য সর্বাধিক ইনিং খেলবে এবং আপনি চাইলে আরও বিশদ নির্ধারণ করতে আপনি প্লেয়ারআইড -> টিমআইডি দ্বারা আরও পরিমার্জন করতে পারবেন। এগুলি কী হতে পারে আমি নিশ্চিত নই।

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

আরও মনে রাখবেন যে আমি একজন টিএসকিউএল লোক, তবে আমি মনে করি নীচে প্রকাশিত ধারণাগুলি আমার ধারণাটি ব্যাখ্যা করার জন্য বেশ ভাল কাজ করেছে। ভাষা শব্দার্থবিজ্ঞান সম্ভবত লাইন আপ না।

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