আমরা আর কখনও সংখ্যার অর্ডিনাল মান হিসাবে গণনা সঞ্চয় করি না ; এটি ডিবাগিং এবং সহায়তা করার উপায়টিকে খুব কঠিন করে তোলে। আমরা প্রকৃত গণনা মান স্ট্রিংয়ে রূপান্তর করি:
public enum Suit { Spade, Heart, Diamond, Club }
Suit theSuit = Suit.Heart;
szQuery = "INSERT INTO Customers (Name, Suit) " +
"VALUES ('Ian Boyd', %s)".format(theSuit.name());
এবং তারপরে আবার পড়ুন:
Suit theSuit = Suit.valueOf(reader["Suit"]);
সমস্যাটি আগে এন্টারপ্রাইজ ম্যানেজারের দিকে তাকাতে এবং ডিসিফার করার চেষ্টা করেছিল:
Name Suit
================== ==========
Shelby Jackson 2
Ian Boyd 1
আয়াত
Name Suit
================== ==========
Shelby Jackson Diamond
Ian Boyd Heart
দ্বিতীয়টি অনেক সহজ is পূর্বেরটির উত্স কোডটি পাওয়া এবং সংখ্যাগরিষ্ঠ সদস্যদের জন্য নির্ধারিত সংখ্যাসমূহের সন্ধান করা দরকার।
হ্যাঁ এটিতে আরও বেশি জায়গা লাগে, তবে গণনার সদস্যদের নামগুলি সংক্ষিপ্ত, এবং হার্ড ড্রাইভগুলি সস্তা, এবং যখন আপনার কোনও সমস্যা হচ্ছে তখন সাহায্য করার জন্য এটি আরও বেশি মূল্যবান।
অতিরিক্ত হিসাবে, আপনি যদি সংখ্যার মানগুলি ব্যবহার করেন তবে আপনি সেগুলির সাথে আবদ্ধ হন। আপনি পুরাতন সংখ্যাসূচক মানগুলি চাপ না দিয়ে সদস্যদের সুন্দরভাবে সন্নিবেশ বা পুনঃব্যবস্থা করতে পারবেন না। উদাহরণস্বরূপ, স্যুট গণনা এতে পরিবর্তন করা হচ্ছে:
public enum Suit { Unknown, Heart, Club, Diamond, Spade }
হতে হবে:
public enum Suit {
Unknown = 4,
Heart = 1,
Club = 3,
Diamond = 2,
Spade = 0 }
ডাটাবেসে সঞ্চিত উত্তরাধিকারের সংখ্যা সংক্রান্ত মানগুলি বজায় রাখতে।
কীভাবে তাদের ডাটাবেসে বাছাই করা যায়
প্রশ্নটি আসে: আসুন বলতে দিন যে আমি মানগুলি অর্ডার করতে চেয়েছিলাম। কিছু লোক এনামের মূল মান অনুসারে এগুলি বাছাই করতে চাইতে পারে। অবশ্যই, গণনার সংখ্যাগত মান দ্বারা কার্ডগুলি অর্ডার করা অর্থহীন:
SELECT Suit FROM Cards
ORDER BY SuitID; --where SuitID is integer value(4,1,3,2,0)
Suit
------
Spade
Heart
Diamond
Club
Unknown
এটি আমরা যে আদেশ চাই তা নয় - আমরা তাদের গণনার ক্রমে চাই:
SELECT Suit FROM Cards
ORDER BY CASE SuitID OF
WHEN 4 THEN 0 --Unknown first
WHEN 1 THEN 1 --Heart
WHEN 3 THEN 2 --Club
WHEN 2 THEN 3 --Diamond
WHEN 0 THEN 4 --Spade
ELSE 999 END
আপনি যদি স্ট্রিংগুলি সংরক্ষণ করেন তবে পূর্ণসংখ্যার মানগুলি সংরক্ষণ করে একই কাজের প্রয়োজন হয়:
SELECT Suit FROM Cards
ORDER BY Suit; --where Suit is an enum name
Suit
-------
Club
Diamond
Heart
Spade
Unknown
তবে এটি আমরা যে আদেশ চাই তা নয় - আমরা তাদের গণনার ক্রমে চাই:
SELECT Suit FROM Cards
ORDER BY CASE Suit OF
WHEN 'Unknown' THEN 0
WHEN 'Heart' THEN 1
WHEN 'Club' THEN 2
WHEN 'Diamond' THEN 3
WHEN 'Space' THEN 4
ELSE 999 END
আমার মতে এই ধরণের র্যাঙ্কিংটি ইউজার ইন্টারফেসের অন্তর্গত। আপনি যদি তাদের গণনার মানের উপর ভিত্তি করে আইটেমগুলি বাছাই করছেন: আপনি কিছু ভুল করছেন।
তবে আপনি যদি সত্যিই এটি করতে চেয়েছিলেন তবে আমি একটি Suits
মাত্রা সারণী তৈরি করব :
| Suit | SuitID | Rank | Color |
|------------|--------------|---------------|--------|
| Unknown | 4 | 0 | NULL |
| Heart | 1 | 1 | Red |
| Club | 3 | 2 | Black |
| Diamond | 2 | 3 | Red |
| Spade | 0 | 4 | Black |
এইভাবে, আপনি কিসিং কিংস নিউ ডেক অর্ডার ব্যবহার করতে আপনার কার্ডগুলি পরিবর্তন করতে চাইলে আপনি আপনার সমস্ত ডেটা ফেলে না রেখে প্রদর্শন উদ্দেশ্যে এটিকে পরিবর্তন করতে পারেন:
| Suit | SuitID | Rank | Color | CardOrder |
|------------|--------------|---------------|--------|-----------|
| Unknown | 4 | 0 | NULL | NULL |
| Spade | 0 | 1 | Black | 1 |
| Diamond | 2 | 2 | Red | 1 |
| Club | 3 | 3 | Black | -1 |
| Heart | 1 | 4 | Red | -1 |
এখন আমরা একটি অভ্যন্তরীণ প্রোগ্রামিং বিশদ (গণনার নাম, গণনা মান) ব্যবহারকারীর জন্য প্রদর্শন প্রদর্শনের সাথে পৃথক করছি:
SELECT Cards.Suit
FROM Cards
INNER JOIN Suits ON Cards.Suit = Suits.Suit
ORDER BY Suits.Rank,
Card.Rank*Suits.CardOrder