সৃজনশীল প্রশ্ন
সৃজনশীল প্রশ্ন ১
'মেঘনা কলেজ'-এর দ্বাদশ শ্রেণির ছাত্রছাত্রীদের তথ্যাবলি কম্পিউটারের ডেটাবেজে সংরক্ষণ করা আছে। অধ্যক্ষ মহোদয় যখন কোনো ছাত্রের 'Roll' নম্বর দিয়ে সার্চ দেন, তখন তথ্যটি মুহূর্তের মধ্যে প্রদর্শিত হয়। কিন্তু যখন কোনো ছাত্রের 'Name' দিয়ে সার্চ দেন, তখন কাঙ্ক্ষিত তথ্য আসতে বেশ দেরি হয়। সমস্যাটি সমাধানের জন্য আইসিটি শিক্ষক বললেন, "নামের ফিল্ডে একটি বিশেষ ব্যবস্থা গ্রহণ করলে রোল নম্বরের মতোই দ্রুত তথ্য পাওয়া যাবে।" অপরদিকে কলেজের করণিক বললেন, "পুরো টেবিলটি নামের বর্ণানুক্রমিক সজ্জায় পরিবর্তন করলে ভালো হবে।"
ক) সর্টিং কী?
খ) ডেটাবেজ ইনডেক্সিং কেন গুরুত্বপূর্ণ?
গ) আইসিটি শিক্ষকের নির্দেশিত 'বিশেষ ব্যবস্থা'টি উদ্দীপকের আলোকে ব্যাখ্যা করো।
ঘ) করণিকের প্রস্তাব (সর্টিং) এবং শিক্ষকের পদ্ধতির (ইনডেক্সিং) মধ্যে কোনটি উদ্দীপকের পরিস্থিতিতে বেশি উপযোগী? তুলনামূলক বিশ্লেষণপূর্বক মতামত দাও।
উত্তর
(ক) ডেটাবেজের ডেটা বা রেকর্ডগুলোকে কোনো নির্দিষ্ট ফিল্ডের ভিত্তিতে ঊর্ধ্বক্রম (Ascending) বা অধঃক্রম (Descending) অনুসারে সাজানোর প্রক্রিয়াকে সর্টিং (Sorting) বলে।
(খ) ডেটাবেজ ইনডেক্সিং গুরুত্বপূর্ণ কারণ এটি বিশাল ডেটাবেজ থেকে তথ্য খোঁজার (Searching) গতি বহুগুণ বাড়িয়ে দেয়। ইনডেক্সিং করা থাকলে ডেটাবেজ ইঞ্জিন পুরো টেবিল স্ক্যান না করে শুধুমাত্র ইনডেক্স ফাইল ব্যবহার করে দ্রুত নির্দিষ্ট রেকর্ডটি খুঁজে বের করতে পারে, যা সময় ও সিস্টেম রিসোর্স সাশ্রয় করে।
(গ) উদ্দীপকে আইসিটি শিক্ষক যে 'বিশেষ ব্যবস্থা'র কথা বলেছেন তা হলো ইনডেক্সিং (Indexing)।
সাধারণত ডেটাবেজে প্রাইমারি কি (যেমন- Roll) বাই ডিফল্ট ইনডেক্স করা থাকে, তাই রোল দিয়ে সার্চ দিলে দ্রুত ফলাফল পাওয়া যায়। কিন্তু 'Name' ফিল্ডটি ইনডেক্স করা ছিল না, তাই ডেটাবেজ ইঞ্জিনকে প্রতিটি রেকর্ড একে একে খুঁজতে বা সিকুয়েন্সিয়াল সার্চ করতে হচ্ছিল, যা সময়সাপেক্ষ।
আইসিটি শিক্ষকের পরামর্শ অনুযায়ী 'Name' ফিল্ডের ওপর ইনডেক্স তৈরি করলে, ডেটাবেজ নামের একটি সুশৃঙ্খল তালিকা (যেমন- B-Tree বা হ্যাশ টেবিল) তৈরি করবে। ফলে পরবর্তীতে নাম দিয়ে সার্চ করলে ডেটাবেজ সম্পূর্ণ টেবিল না খুঁজে সরাসরি ওই নামের অবস্থানে চলে যাবে এবং দ্রুত তথ্য প্রদর্শন করবে। এটি বইয়ের পেছনের নির্ঘণ্ট বা ইনডেক্সের মতোই কাজ করে।
(ঘ) উদ্দীপকের পরিস্থিতিতে করণিকের প্রস্তাব ছিল সর্টিং এবং শিক্ষকের পদ্ধতি ছিল ইনডেক্সিং। নিচে এ দুটির তুলনামূলক বিশ্লেষণ করা হলো:
-
করণিকের প্রস্তাব (সর্টিং): পুরো টেবিলটি নামের ক্রমানুসারে সাজালে (Physical Sorting) নাম দিয়ে সার্চ করা সহজ হতে পারে, কিন্তু এতে ডেটাবেজের মূল ফিজিক্যাল অর্ডারে পরিবর্তন আসবে। যদি পরবর্তীতে আবার রোল নম্বর বা অন্য ফিল্ড দিয়ে সার্চ করার প্রয়োজন হয়, তখন আবার সমস্যা দেখা দেবে। তাছাড়া প্রতিবার নতুন ডেটা এন্ট্রি হলে পুনরায় পুরো টেবিল সর্ট করা অত্যন্ত সময়সাপেক্ষ ও অদক্ষ পদ্ধতি।
-
শিক্ষকের পদ্ধতি (ইনডেক্সিং): ইনডেক্সিং করলে মূল ডেটা টেবিলের ফিজিক্যাল অর্ডারে কোনো পরিবর্তন হয় না। এটি কেবল একটি আলাদা ইনডেক্স ফাইল তৈরি করে যেখানে নাম এবং তার মেমোরি অ্যাড্রেস বা পয়েন্টার থাকে। এর ফলে নাম দিয়ে সার্চ করা অত্যন্ত দ্রুত হয়, আবার রোলের ইনডেক্সও অক্ষুণ্ণ থাকে। অর্থাৎ একাধিক ফিল্ডের ওপর ইনডেক্স থাকলে যেকোনো ফিল্ড দিয়েই দ্রুত সার্চ করা সম্ভব।
সিদ্ধান্ত: সর্টিং পদ্ধতিতে বারবার ডেটা সাজানো জটিল এবং এক ফিল্ডের ভিত্তিতে সাজালে অন্য ফিল্ডের ক্রম নষ্ট হয়। অন্যদিকে, ইনডেক্সিং মূল ডেটা ঠিক রেখে সার্চের গতি বাড়ায় এবং একাধিক ফিল্ডে প্রয়োগ করা যায়। তাই করণিকের প্রস্তাবের চেয়ে আইসিটি শিক্ষকের পরামর্শ (ইনডেক্সিং) গ্রহণ করা অধিকতর যুক্তিযুক্ত ও সুবিধাজনক।
সৃজনশীল প্রশ্ন ২
একটি মাল্টিন্যাশনাল কোম্পানির 'Employee' টেবিলে লক্ষাধিক কর্মীর তথ্য সংরক্ষিত আছে। ডেটাবেজ অ্যাডমিনিস্ট্রেটর জনাব রাকিব লক্ষ্য করলেন যে, নতুন কর্মী নিয়োগের পর তাদের তথ্য এন্ট্রি (Insert) করতে আগের চেয়ে অনেক বেশি সময় লাগছে এবং সার্ভার ব্যস্ত থাকছে। অথচ আগে সার্চ বা কুয়েরি করতে কোনো সময় লাগত না। তিনি অনুসন্ধান করে দেখলেন, সার্চ ফাস্ট করার জন্য তিনি টেবিলের প্রায় সব ফিল্ডেই (নাম, ইমেইল, ফোন নম্বর, জয়েনিং ডেট) ইনডেক্স তৈরি করে রেখেছিলেন। তিনি বুঝতে পারলেন, অতিরিক্ত ইনডেক্সিং-এর কারণেই নতুন ডেটা এন্ট্রিতে এই ধীরগতি সৃষ্টি হয়েছে।
ক) কুয়েরি কী?
খ) ইনডেক্স ফাইল আপডেট করা সময়সাপেক্ষ কেন?
গ) উদ্দীপকে ডেটা এন্ট্রিতে ধীরগতি বা সমস্যার কারণটি ব্যাখ্যা করো।
ঘ) "দ্রুত সার্চের জন্য ইনডেক্সিং অপরিহার্য হলেও এর যথেচ্ছ ব্যবহার সিস্টেমের দক্ষতাকে কমিয়ে দেয়"—উদ্দীপকের আলোকে উক্তিটি মূল্যায়ন করো।
উত্তর
(ক) ডেটাবেজে সংরক্ষিত বিপুল পরিমাণ তথ্যের মধ্য থেকে নির্দিষ্ট কোনো শর্ত সাপেক্ষে প্রয়োজনীয় তথ্য খুঁজে বের করা বা প্রদর্শন করার প্রক্রিয়াকে কুয়েরি (Query) বলে।
(খ) ইনডেক্স করা কোনো টেবিলে নতুন ডেটা যোগ বা পরিবর্তন করলে, মূল টেবিলের পাশাপাশি ইনডেক্স ফাইলেও সেই পরিবর্তন আপডেট করতে হয়। ইনডেক্স ফাইলে ডেটাগুলো একটি নির্দিষ্ট কাঠামোতে (যেমন B-Tree) সাজানো থাকে। তাই একটি রেকর্ড আপডেট বা ডিলিট করলে ইনডেক্স ট্রি-এর কাঠামো পুনর্গঠন (Rebalance) করতে হয়, যা প্রসেসরের জন্য একটি সময়সাপেক্ষ কাজ।
(গ) উদ্দীপকে জনাব রাকিবের ডেটাবেজে ডেটা এন্ট্রিতে ধীরগতির মূল কারণ হলো অতিরিক্ত ইনডেক্সিং (Over-indexing)।
যখন কোনো টেবিলে নতুন রেকর্ড ইনসার্ট (Insert) করা হয়, তখন ডেটাবেজ ইঞ্জিনকে শুধু মূল টেবিলেই ডেটা রাখতে হয় না, বরং ওই টেবিলের সাথে যুক্ত প্রতিটি ইনডেক্স ফাইলও আপডেট করতে হয়। উদ্দীপকে বলা হয়েছে জনাব রাকিব প্রায় সব ফিল্ডেই ইনডেক্স তৈরি করেছেন। ফলে একজন নতুন কর্মীর তথ্য এন্ট্রি করার সময় সিস্টেমকে প্রতিটি ফিল্ডের (নাম, ইমেইল, ফোন ইত্যাদি) জন্য আলাদা আলাদা ইনডেক্স ফাইল আপডেট করতে হচ্ছে। একটি ইনসার্ট কমান্ডের বিপরীতে অনেকগুলো রাইট অপারেশন (Write Operation) চলায় সিস্টেমের লোড বেড়ে গেছে এবং ডেটা এন্ট্রি ধীরগতির হয়ে পড়েছে।
(ঘ) উদ্দীপকে উল্লিখিত উক্তিটি—"দ্রুত সার্চের জন্য ইনডেক্সিং অপরিহার্য হলেও এর যথেচ্ছ ব্যবহার সিস্টেমের দক্ষতাকে কমিয়ে দেয়"—যথার্থ এবং প্রযুক্তিগতভাবে সত্য। নিচে এর মূল্যায়ন করা হলো:
ইনডেক্সিংয়ের প্রয়োজনীয়তা:
ইনডেক্সিং হলো ডেটাবেজ পারফরম্যান্স অপ্টিমাইজেশনের অন্যতম প্রধান হাতিয়ার। লক্ষ লক্ষ রেকর্ডের মধ্যে কোনো নির্দিষ্ট তথ্য খুঁজে বের করতে ইনডেক্সিং ছাড়া অন্য কোনো বিকল্প নেই। এটি 'Full Table Scan' এর পরিবর্তে 'Index Seek' ব্যবহার করে মিলিসেকেন্ডে ফলাফল এনে দিতে পারে। তাই রিড-ইনটেনসিভ (Read-intensive) অপারেশনের জন্য এটি অপরিহার্য।
যথেচ্ছ ব্যবহারের কুফল:
কিন্তু উদ্দীপকের জনাব রাকিবের মতো সব ফিল্ডে ইনডেক্স করলে নিম্নলিখিত সমস্যাগুলো হয়:
১. DML অপারেশন ধীরগতি: ইনসার্ট, আপডেট বা ডিলিট কমান্ড দিলে প্রতিটি ইনডেক্স আপডেট করতে হয়, যা সিস্টেমকে ধীর করে দেয়।
২. স্টোরেজ অপচয়: ইনডেক্স ফাইলগুলো ডিস্কে অতিরিক্ত জায়গা দখল করে। অনেক সময় মূল ডেটার চেয়ে ইনডেক্সের আকার বড় হয়ে যেতে পারে।
৩. মেইনটেনেন্স জটিলতা: ডেটাবেজ মেইনটেনেন্স এবং ব্যাকআপ নেওয়ার সময়ও বেড়ে যায়।
উপসংহার:
ইনডেক্সিং একটি 'Trade-off'। এটি ডেটা পড়ার (Read) গতি বাড়ায় কিন্তু ডেটা লেখার (Write) গতি কমিয়ে দেয়। তাই সব ফিল্ডে ইনডেক্স না করে শুধুমাত্র যে ফিল্ডগুলো দিয়ে সচরাচর সার্চ বা জয়েন (Join) করা হয়, কেবল সেগুলোতে ইনডেক্স করা উচিত। উদ্দীপকের পরিস্থিতি প্রমাণ করে যে, অপ্রয়োজনীয় বা অতিরিক্ত ইনডেক্সিং সিস্টেমের সামগ্রিক দক্ষতা কমিয়ে দেয়।
সৃজনশীল প্রশ্ন ৩
নিচের টেবিলটি লক্ষ্য করো:
Table: Student_Info
| ID |
Name |
GPA |
District |
| 101 |
Rakib |
5.00 |
Dhaka |
| 105 |
Amin |
4.50 |
Comilla |
| 102 |
Belal |
3.80 |
Dhaka |
| 104 |
Jamal |
5.00 |
Sylhet |
টেবিলটিতে নতুন রেকর্ড যুক্ত হওয়ার সাথে সাথে আইডির ক্রম ঠিক থাকে না। একজন ব্যবহারকারী চাইলেন টেবিলের ডেটাগুলোকে 'District' এর ভিত্তিতে এবং একই জেলার ক্ষেত্রে 'GPA' এর ভিত্তিতে বড় থেকে ছোট ক্রমে দেখতে।
ক) মাল্টিলেভেল সর্টিং কী?
খ) সর্টিং ও ইনডেক্সিং-এর মধ্যে দুটি মূল পার্থক্য লেখো।
গ) উদ্দীপকের টেবিলটি 'District' (Ascending) এবং 'GPA' (Descending) অনুসারে সর্ট করলে কেমন দেখাবে? তা তৈরি করে দেখাও।
ঘ) "শুধুমাত্র সর্টিং ব্যবহার করে বড় ডেটাবেজ ম্যানেজ করা সম্ভব নয়, ইনডেক্সিং প্রয়োজন"—উক্তিটির যৌক্তিকতা বিশ্লেষণ করো।
উত্তর
(ক) ডেটাবেজ টেবিলের একাধিক ফিল্ড বা কলামের ওপর ভিত্তি করে ডেটা সাজানোর প্রক্রিয়াকে মাল্টিলেভেল সর্টিং (Multi-level Sorting) বলে। এতে প্রথম ফিল্ডের ডেটা একই হলে দ্বিতীয় ফিল্ডের ভিত্তিতে ক্রম নির্ধারণ করা হয়।
(খ) সর্টিং ও ইনডেক্সিং-এর দুটি মূল পার্থক্য:
১. সর্টিং টেবিলের ডেটাগুলোকে ফিজিক্যালি বা ভিউয়ালি পুনর্বিন্যাস করে, কিন্তু ইনডেক্সিং মূল ডেটার ক্রম পরিবর্তন না করে আলাদা একটি পয়েন্টার ফাইল তৈরি করে।
২. সর্টিং সাধারণত আউটপুট সাজিয়ে দেখার জন্য ব্যবহৃত হয়, আর ইনডেক্সিং মূলত দ্রুত ডেটা খোঁজার (Searching) জন্য ব্যবহৃত হয়।
(গ) উদ্দীপকের টেবিলটি প্রথমে 'District' অনুযায়ী Ascending (A-Z) এবং পরে 'GPA' অনুযায়ী Descending (বড় থেকে ছোট) অর্ডারে সর্ট করলে নিম্নরূপ হবে:
Sorted Table:
| ID |
Name |
GPA |
District |
| 105 |
Amin |
4.50 |
Comilla |
| 101 |
Rakib |
5.00 |
Dhaka |
| 102 |
Belal |
3.80 |
Dhaka |
| 104 |
Jamal |
5.00 |
Sylhet |
(ব্যাখ্যা: Comilla 'C' দিয়ে শুরু তাই প্রথমে। এরপর Dhaka 'D'। ঢাকার দুজন ছাত্র (Rakib, Belal)। এদের মধ্যে Rakib-এর জিপিএ (5.00) Belal-এর (3.80) চেয়ে বেশি, তাই জিপিএ ডিসেন্ডিং শর্তানুসারে Rakib আগে বসেছে। শেষে Sylhet।)
(ঘ) উক্তিটি—"শুধুমাত্র সর্টিং ব্যবহার করে বড় ডেটাবেজ ম্যানেজ করা সম্ভব নয়, ইনডেক্সিং প্রয়োজন"—সম্পূর্ণ যৌক্তিক।
বিশ্লেষণ:
১. সময়ের অপচয়: সর্টিং একটি সাময়িক প্রক্রিয়া। যখনই আমরা কোনো নির্দিষ্ট অর্ডারে ডেটা দেখতে চাই, তখনই প্রসেসরকে পুরো টেবিল সাজাতে হয়। ডেটাবেজে যদি লক্ষ লক্ষ রেকর্ড থাকে, তবে প্রতিবার কুয়েরির সময় সর্ট করা অসম্ভব ধীরগতির হবে। ইনডেক্সিং একবার করে রাখলে, পরবর্তী সব সার্চ তাৎক্ষণিক হয়।
২. মেমোরি ব্যবহার: সর্টিং অপারেশনের জন্য প্রচুর অস্থায়ী মেমোরি (RAM) প্রয়োজন হয়। বড় ডেটাবেজ সর্ট করতে গিয়ে সিস্টেম ক্র্যাশ করতে পারে।
৩. মাল্টি-ইউজার এক্সেস: একই টেবিলে একাধিক ইউজার ভিন্ন ভিন্ন ফিল্ড দিয়ে সার্চ করতে পারেন। মূল টেবিলটি একই সময়ে একাধিক অর্ডারে সর্ট করে রাখা সম্ভব নয় (যেমন- একজন নামের ক্রমানুসারে এবং অন্যজন আইডির ক্রমানুসারে চাইলেন)। কিন্তু ইনডেক্সিং ব্যবহার করে একই টেবিলের ওপর একাধিক ইনডেক্স (Name Index, ID Index) তৈরি করে রাখা যায়, যা সবার প্রয়োজন মেটায়।
সুতরাং, ছোট ডেটাবেজের জন্য সর্টিং কাজ চালিয়ে নিলেও, প্রফেশনাল বা বড় ডেটাবেজ ম্যানেজমেন্টের জন্য ইনডেক্সিং অপরিহার্য।
এমসিকিউ
১। ডেটাবেজ টেবিলের ডেটাকে নির্দিষ্ট ক্রমানুসারে সাজানোকে কী বলে?
ক) ইনডেক্সিং
খ) সর্টিং
গ) সার্চিং
ঘ) ফিল্টারিং
সঠিক উত্তর: খ) সর্টিং
ব্যাখ্যা: ডেটাবেজের রেকর্ডগুলোকে কোনো নির্দিষ্ট ফিল্ডের (যেমন- নাম বা রোল) ভিত্তিতে ছোট থেকে বড় (Ascending) বা বড় থেকে ছোট (Descending) সাজানোর প্রক্রিয়াকে সর্টিং বলে।
২। SQL-এ ডেটা সর্ট করার জন্য কোন কমান্ডটি ব্যবহৃত হয়?
ক) SORT BY
খ) ORDER BY
গ) GROUP BY
ঘ) ARRANGE BY
সঠিক উত্তর: খ) ORDER BY
ব্যাখ্যা: SQL বা Structured Query Language-এ ডেটা সাজানোর জন্য ORDER BY ক্লজটি ব্যবহার করা হয়।
৩। ORDER BY ক্লজে কোনো কিছু উল্লেখ না করলে ডিফল্ট হিসেবে কোন অর্ডারে ডেটা সর্ট হয়?
ক) Descending
খ) Ascending
গ) Random
ঘ) None
সঠিক উত্তর: খ) Ascending
ব্যাখ্যা: ORDER BY ক্লজে ASC বা DESC উল্লেখ না করলে ডেটাবেজ স্বয়ংক্রিয়ভাবে ছোট থেকে বড় বা Ascending অর্ডারে ডেটা সাজিয়ে প্রদর্শন করে।
৪। ডেটাবেজ ইনডেক্সিং (Indexing) ব্যবহারের মূল উদ্দেশ্য কী?
ক) ডেটা এন্ট্রি দ্রুত করা
খ) ডেটা নিরাপত্তা প্রদান করা
গ) দ্রুত ডেটা খুঁজে বের করা
ঘ) ডেটা ডিলিট করা
সঠিক উত্তর: গ) দ্রুত ডেটা খুঁজে বের করা
ব্যাখ্যা: ইনডেক্সিং-এর মূল কাজ হলো ডেটাবেজ থেকে নির্দিষ্ট ডেটা খোঁজার বা সার্চ করার গতি (Search Performance) বৃদ্ধি করা। এটি বইয়ের নির্ঘণ্টের মতো কাজ করে।
৫। ইনডেক্সিং করার ফলে ডেটাবেজের কোন অপারেশনের গতি কমে যেতে পারে?
ক) SELECT
খ) UPDATE
গ) READ
ঘ) VIEW
সঠিক উত্তর: খ) UPDATE
ব্যাখ্যা: ইনডেক্স করা টেবিলে কোনো ডেটা আপডেট, ইনসার্ট বা ডিলিট করলে ইনডেক্স ফাইলটিও আপডেট করতে হয়, যা সময়সাপেক্ষ। তাই ডেটা ম্যানিপুলেশন (DML) অপারেশন কিছুটা ধীরগতির হয়।
৬। কোন ফিল্ডের ওপর ভিত্তি করে সাধারণত স্বয়ংক্রিয়ভাবে ইনডেক্স তৈরি হয়?
ক) Foreign Key
খ) Primary Key
গ) Name Field
ঘ) Date Field
সঠিক উত্তর: খ) Primary Key
ব্যাখ্যা: অধিকাংশ ডেটাবেজ সিস্টেমে যখন কোনো ফিল্ডকে প্রাইমারি কি (Primary Key) হিসেবে ঘোষণা করা হয়, তখন স্বয়ংক্রিয়ভাবে তার ওপর একটি ক্লাস্টারড ইনডেক্স (Clustered Index) তৈরি হয়ে যায়।
৭। বড় থেকে ছোট (Descending) অর্ডারে ডেটা সাজানোর জন্য SQL কমান্ডে কী লিখতে হয়?
ক) ASC
খ) DESC
গ) DOWN
ঘ) SMALL
সঠিক উত্তর: খ) DESC
ব্যাখ্যা: বড় থেকে ছোট বা অধঃক্রম অর্ডারে সাজাতে ORDER BY ক্লজের সাথে DESC কিওয়ার্ড ব্যবহার করতে হয়। যেমন: ORDER BY Salary DESC।
৮। ইনডেক্স ফাইলে ডেটাগুলো সাধারণত কোন স্ট্রাকচারে সংরক্ষিত থাকে?
ক) Stack
খ) Queue
গ) B-Tree
ঘ) Linked List
সঠিক উত্তর: গ) B-Tree
ব্যাখ্যা: রিলেশনাল ডেটাবেজ সিস্টেমে ইনডেক্সিং-এর জন্য সবচেয়ে জনপ্রিয় এবং বহুল ব্যবহৃত ডেটা স্ট্রাকচার হলো 'B-Tree' (Balanced Tree)।
৯। কোন ধরনের ফিল্ডের জন্য 'Bitmap Index' সবচেয়ে বেশি উপযোগী?
ক) যেখানে ডেটার ভ্যারিয়েশন খুব বেশি (যেমন- নাম)
খ) যেখানে ডেটার ভ্যারিয়েশন খুব কম (যেমন- জেন্ডার: Male/Female)
গ) যেখানে সংখ্যার মান অনেক বড়
ঘ) টেক্সট ফিল্ডের জন্য
সঠিক উত্তর: খ) যেখানে ডেটার ভ্যারিয়েশন খুব কম (যেমন- জেন্ডার: Male/Female)
ব্যাখ্যা: যে কলামে স্বতন্ত্র মানের সংখ্যা কম (Low Cardinality), যেমন- Gender (M/F) বা Marital Status (Yes/No), সেখানে বিটম্যাপ ইনডেক্স খুব কার্যকর।
১০। নিচের কোনটি সর্টিং এবং ইনডেক্সিং-এর মধ্যে একটি পার্থক্য?
ক) সর্টিং ফিজিক্যাল অর্ডার পরিবর্তন করে, ইনডেক্সিং করে না
খ) ইনডেক্সিং ফিজিক্যাল অর্ডার পরিবর্তন করে, সর্টিং করে না
গ) সর্টিং-এ স্টোরেজ বেশি লাগে
ঘ) ইনডেক্সিং-এ সার্চ স্লো হয়
সঠিক উত্তর: ক) সর্টিং ফিজিক্যাল অর্ডার পরিবর্তন করে, ইনডেক্সিং করে না
ব্যাখ্যা: সর্টিং টেবিলের ডেটাগুলোকে পুনরায় সাজিয়ে ফিজিক্যাল লোকেশন পরিবর্তন করতে পারে, কিন্তু ইনডেক্সিং মূল টেবিলের ডেটা ঠিক রেখে আলাদা একটি পয়েন্টার ফাইল তৈরি করে লজিক্যাল অর্ডার মেইনটেইন করে।
১১। মাল্টিলেভেল সর্টিং (Multi-level Sorting) বলতে কী বোঝায়?
ক) একাধিক টেবিলে সর্ট করা
খ) একাধিক ফিল্ডের ভিত্তিতে সর্ট করা
গ) একাধিক ডেটাবেজে সর্ট করা
ঘ) একবার সর্ট করার পর আবার সর্ট করা
সঠিক উত্তর: খ) একাধিক ফিল্ডের ভিত্তিতে সর্ট করা
ব্যাখ্যা: যখন একটি ফিল্ডের ডেটা একই হলে অন্য একটি ফিল্ডের ভিত্তিতে ক্রম নির্ধারণ করা হয়, তখন তাকে মাল্টিলেভেল সর্টিং বলে। যেমন: ORDER BY District ASC, GPA DESC।
১২। SQL কমান্ড SELECT Name FROM Students ORDER BY Roll ASC এর কাজ কী?
ক) নামগুলো বর্ণানুক্রমিক সাজাবে
খ) রোল নম্বর অনুযায়ী নামগুলো দেখাবে
গ) রোল নম্বর বড় থেকে ছোট সাজাবে
ঘ) শুধু রোল নম্বর দেখাবে
সঠিক উত্তর: খ) রোল নম্বর অনুযায়ী নামগুলো দেখাবে
ব্যাখ্যা: কুয়েরিটিতে ORDER BY Roll ASC বলা হয়েছে, তাই রোল নম্বরের ছোট থেকে বড় ক্রমানুসারে ছাত্রছাত্রীদের নাম প্রদর্শিত হবে।
১৩। একটি টেবিলে সর্বোচ্চ কয়টি 'Clustered Index' থাকতে পারে?
ক) ১টি
খ) ২টি
গ) ৩টি
ঘ) অসংখ্য
সঠিক উত্তর: ক) ১টি
ব্যাখ্যা: ক্লাস্টারড ইনডেক্স ডেটাবেজের ডেটাগুলোকে ফিজিক্যালি সাজিয়ে রাখে। যেহেতু ডেটা ফিজিক্যালি একভাবেই সাজানো সম্ভব, তাই একটি টেবিলে মাত্র একটিই ক্লাস্টারড ইনডেক্স থাকতে পারে।
১৪। ইনডেক্সিং করার অসুবিধা কোনটি?
ক) ডেটা খুঁজে পাওয়া কঠিন
খ) অতিরিক্ত মেমোরি বা স্টোরেজ প্রয়োজন হয়
গ) কুয়েরি প্রসেসিং ধীর হয়
ঘ) ডেটা ডুপ্লিকেট হয়
সঠিক উত্তর: খ) অতিরিক্ত মেমোরি বা স্টোরেজ প্রয়োজন হয়
ব্যাখ্যা: ইনডেক্স তৈরির ফলে মূল ডেটা টেবিলের পাশাপাশি ইনডেক্স ফাইলটি সংরক্ষণের জন্য ডিস্কে অতিরিক্ত জায়গার প্রয়োজন হয়।
১৫। CREATE INDEX কমান্ডটি কোন ভাষায় লেখা হয়?
ক) C++
খ) Java
গ) SQL
ঘ) Python
সঠিক উত্তর: গ) SQL
ব্যাখ্যা: ডেটাবেজ ম্যানেজমেন্ট সিস্টেমে ইনডেক্স তৈরির জন্য SQL (Structured Query Language) এর CREATE INDEX কমান্ড ব্যবহার করা হয়।
১৬। সর্টিং-এর ক্রম হতে পারে—
i. আরোহী (Ascending)
ii. অবরোহী (Descending)
iii. দৈবচয়ন (Random)
নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii
সঠিক উত্তর: ক) i ও ii
ব্যাখ্যা: সর্টিং শুধুমাত্র নির্দিষ্ট কোনো ক্রমে (ছোট থেকে বড় বা বড় থেকে ছোট) করা যায়। র্যান্ডম বা দৈবচয়ন কোনো সর্টিং পদ্ধতি নয়।
১৭। ইনডেক্সিং ব্যবহার করা উচিত যখন—
i. টেবিলে প্রচুর রেকর্ড থাকে
ii. কোনো ফিল্ড দিয়ে প্রায়ই সার্চ করা হয়
iii. টেবিলে খুব কম ডেটা থাকে
নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii
সঠিক উত্তর: ক) i ও ii
ব্যাখ্যা: ছোট টেবিলে ইনডেক্সিং খুব একটা সুবিধা দেয় না। কিন্তু বিশাল টেবিলে এবং যে কলাম দিয়ে ফ্রিকুয়েন্টলি সার্চ বা জয়েন করা হয়, সেখানে ইনডেক্সিং অত্যন্ত কার্যকর।
১৮। ডেটাবেজ ইনডেক্সিং-এর ক্ষেত্রে প্রযোজ্য—
i. বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে
ii. ডেটা এন্ট্রির গতি কমিয়ে দেয়
iii. মেমোরি স্পেস সাশ্রয় করে
নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii
সঠিক উত্তর: ক) i ও ii
ব্যাখ্যা: ইনডেক্সিং সাধারণত বি-ট্রি বা বাইনারি সার্চ লজিক ব্যবহার করে দ্রুত খোঁজে। এটি ডেটা এন্ট্রির (Insert) গতি কমায়। তবে এটি মেমোরি স্পেস সাশ্রয় করে না, বরং অতিরিক্ত স্পেস ব্যবহার করে।
১৯। SQL-এ ORDER BY ক্লজ ব্যবহার করা যায়—
i. টেক্সট ডেটার ক্ষেত্রে
ii. নিউমারিক ডেটার ক্ষেত্রে
iii. তারিখ বা ডেট ডেটার ক্ষেত্রে
নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii
সঠিক উত্তর: ঘ) i, ii ও iii
ব্যাখ্যা: যেকোনো ধরনের সর্টেবল ডেটা টাইপ (সংখ্যা, অক্ষর, তারিখ) এর ওপরই ORDER BY প্রয়োগ করা যায়।
২০। সর্টিং ও ইনডেক্সিং উভয়েরই সাধারণ উদ্দেশ্য হলো—
i. ডেটা সুশৃঙ্খলভাবে উপস্থাপন করা
ii. ডেটা খুঁজে বের করার সময় কমানো
iii. ডেটাবেজের নিরাপত্তা বাড়ানো
নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii
সঠিক উত্তর: ক) i ও ii
ব্যাখ্যা: সর্টিং ডেটা সাজিয়ে উপস্থাপন করে এবং ইনডেক্সিং সার্চ ফাস্ট করে। তবে এদের সাথে ডেটাবেজ সিকিউরিটি বা নিরাপত্তার সরাসরি কোনো সম্পর্ক নেই।
নিচের অনুচ্ছেদটি পড়ে ২১ ও ২২ নম্বর প্রশ্নের উত্তর দাও:
'মেঘনা ব্যাংক'-এর কাস্টমার টেবিলে ১০ লক্ষ গ্রাহকের তথ্য আছে। ম্যানেজার দেখলেন অ্যাকাউন্ট নম্বর দিয়ে সার্চ দিলে দ্রুত তথ্য আসে কিন্তু মোবাইল নম্বর দিয়ে সার্চ দিলে অনেক সময় লাগে। আইসিটি অফিসার পরামর্শ দিলেন মোবাইল নম্বর ফিল্ডে একটি বিশেষ ব্যবস্থা নিতে।
২১। আইসিটি অফিসারের পরামর্শকৃত ব্যবস্থাটি কী?
ক) সর্টিং (Sorting)
খ) ইনডেক্সিং (Indexing)
গ) রিলেশন (Relation)
ঘ) নরমালাইজেশন (Normalization)
সঠিক উত্তর: খ) ইনডেক্সিং (Indexing)
ব্যাখ্যা: কোনো নির্দিষ্ট ফিল্ড (এখানে মোবাইল নম্বর) দিয়ে সার্চ ফাস্ট করার জন্য ওই ফিল্ডের ওপর ইনডেক্স তৈরি করাই হলো সর্বোত্তম সমাধান।
২২। ব্যবস্থাটি গ্রহণ করলে ব্যাংকের কী সুবিধা হবে?
ক) নতুন গ্রাহক এন্ট্রি দ্রুত হবে
খ) মোবাইল নম্বর দিয়ে তথ্য খোঁজা দ্রুত হবে
গ) ডেটাবেজের আকার কমে যাবে
ঘ) ডেটা ডুপ্লিকেট হবে না
সঠিক উত্তর: খ) মোবাইল নম্বর দিয়ে তথ্য খোঁজা দ্রুত হবে
ব্যাখ্যা: মোবাইল নম্বর ফিল্ডে ইনডেক্স করা হলে ডেটাবেজ ইঞ্জিন পুরো টেবিল না খুঁজে সরাসরি ইনডেক্স ব্যবহার করে মোবাইল নম্বরটি খুঁজে পাবে, ফলে সার্চ টাইম অনেক কমে যাবে।
নিচের ডেটা টেবিলটি লক্ষ্য করো এবং ২৩-২৫ নম্বর প্রশ্নের উত্তর দাও:
| ID |
Name |
Salary |
Join_Date |
| 101 |
Abul |
20000 |
2020-01-01 |
| 102 |
Babul |
25000 |
2019-05-10 |
| 103 |
Kabul |
20000 |
2021-03-15 |
২৩। SELECT * FROM Table ORDER BY Salary ASC কুয়েরি চালালে প্রথমে কার নাম আসবে?
ক) Abul
খ) Babul
গ) Kabul
ঘ) Abul অথবা Kabul
সঠিক উত্তর: ঘ) Abul অথবা Kabul
ব্যাখ্যা: এখানে Abul এবং Kabul উভয়ের বেতন ২০,০০০ (সবচেয়ে কম)। ASC মানে ছোট থেকে বড়। যেহেতু দুজনের বেতন সমান এবং অন্য কোনো শর্ত দেওয়া হয়নি, তাই ডেটাবেজ ইঞ্জিন এ দুটির মধ্যে যেকোনো একটি আগে দেখাতে পারে (সাধারণত ফিজিক্যাল অর্ডারে যে আগে আছে)।
২৪। যদি কুয়েরিটি ORDER BY Salary ASC, Name DESC হয়, তবে ক্রমটি কেমন হবে?
ক) Abul, Kabul, Babul
খ) Kabul, Abul, Babul
গ) Babul, Abul, Kabul
ঘ) Kabul, Babul, Abul
সঠিক উত্তর: খ) Kabul, Abul, Babul
ব্যাখ্যা: প্রথমে বেতন অনুযায়ী ছোট থেকে বড় সাজাবে। ২০০০০ এর দুজন (Abul, Kabul)। এদের মধ্যে আবার নামের উল্টো ক্রম (Z-A) বা DESC হবে। K (Kabul) আগে আসবে, A (Abul) পরে যাবে। শেষে ২৫০০০ বেতনের Babul আসবে। তাই সঠিক ক্রম: Kabul -> Abul -> Babul।
২৫। Join_Date এর ওপর ভিত্তি করে সবচেয়ে পুরোনো কর্মীকে প্রথমে দেখতে চাইলে কুয়েরি কী হবে?
ক) ORDER BY Join_Date DESC
খ) ORDER BY Join_Date ASC
গ) SORT BY Join_Date
ঘ) ARRANGE Join_Date
সঠিক উত্তর: খ) ORDER BY Join_Date ASC
ব্যাখ্যা: তারিখের ক্ষেত্রে ASC (Ascending) মানে হলো পুরোনো তারিখ থেকে নতুন তারিখ। সবচেয়ে পুরোনো কর্মী মানে যার জয়েনিং ডেট সবচেয়ে আগের (ছোট)। তাই ASC ব্যবহার করতে হবে। DESC দিলে সবচেয়ে নতুন কর্মীকে আগে দেখাত।