ডেটাবেস ম্যানেজমেন্ট সিস্টেমDatabase Management System
বর্তমান বিশ্বে আমাদের চারপাশের প্রায় সবকিছুই অনলাইনের মাধ্যমে হতে শুরু করেছে। আমরা কেনাকাটা কিংবা বাজার করি অনলাইনে, ব্যাংকিং করি অনলাইনে, ইলেক্ট্রিসিটির বিল দেই অনলাইনে, ট্রেনের টিকিট কিনি অনলাইনে। এ ধরনের প্রত্যেকটি কাজের জন্য কোথাও না কোথাও অসংখ্য তথ্য সংরক্ষণ করতে হয়। একসময় যে কাজগুলো করতে অসংখ্য লেজার বই কিংবা কাগজের উপর নির্ভর করতে হতো এখন সেগুলো করা হয় ডেটাবেজ ম্যানেজমেন্ট সিস্টেম দিয়ে। সেগুলো আমাদের জীবনকে অনেক সহজ করে তুললেও সেখানে এখনো চ্যালেঞ্জের অভাব নেই। সেগুলো অনেক সময় প্রয়োজনমতো বড় করা যায় না, দ্রুত প্রক্রিয়া করা যায় না কিংবা সাইবার দুর্বৃত্তরা মাঝে মাঝেই ডেটা হাতিয়ে নেয়। কাজেই কম্পিউটার বিজ্ঞানীরা ক্রমাগতভাবে ডেটাবেজ ম্যানেজমেন্ট সিস্টেমকে আরো শক্তিশালী করার চেষ্টা করে যাচ্ছেন। এই অধ্যায়ে শিক্ষার্থীদের ডেটাবেজ ম্যানেজমেন্ট সিস্টেম সম্পর্কে একটি প্রাথমিক ধারণা দেওয়া হয়েছে।
ডেটাবেজ ম্যানেজমেন্ট (Database Management)
শিক্ষাপ্রতিষ্ঠান, ব্যবসায় প্রতিষ্ঠান, অফিস-আদালত, এমনকি আমাদের নিজেদের ঘর-গেরস্তালির কাজেও আমাদেরকে নানান রকম তথ্য নিয়ে কাজ করতে হয়। স্কুল-কলেজের কথাই চিন্তা করা যাক। শিক্ষার্থী ভর্তি, ক্লাস রুটিন তৈরি, শিক্ষার্থীদের উপস্থিতি, পরীক্ষার রুটিন তৈরি, পরীক্ষার ফলাফল প্রকাশ ও সংরক্ষণ, শিক্ষার্থীদের বেতনের হিসেব রাখা ইত্যাদি নানান কাজেই অনেক তথ্য তৈরি ও সংরক্ষণের প্রয়োজন হয়। যুগ যুগ ধরে মানুষ খাতা-কলমের মাধ্যমেই এসব হিসাব করে আসছে। কিন্তু কম্পিউটারের আবির্ভাব এসব কাজকে মানুষের জন্য সহজ করে দিয়েছে। কম্পিউটারের তথ্য ধারণ, সংরক্ষণ ও প্রক্রিয়াকরণের ক্ষমতা মানুষের চেয়ে অনেক অনেক বেশি। আর এই ক্ষমতাকে কাজে লাগিয়ে মানুষ এমন সফটওয়্যার তৈরি করেছে যা বিপুল পরিমাণ তথ্য ধারণ করতে পারে, সংরক্ষণ করতে পারে এবং সেসব তথ্য বিশ্লেষণ করে প্রয়োজনীয় প্রশ্নের উত্তরও দিতে পারে।
ধরা যাক, অসুস্থতা এবং অন্য কোনো কারণে একজন শিক্ষার্থীকে মাঝে মাঝে স্কুলে অনুপস্থিত থাকতে হয়েছে। তার অভিভাবক জানতে চান শিক্ষার্থীটি গত তিন মাসে ঠিক কতদিন স্কুলে ছিল। এই কাজটি করার জন্য তাঁকে স্কুলে যেতে হবে, তারপর তাঁর সন্তানের যেসব শিক্ষক আছেন, তাদের সঙ্গে দেখা করতে হবে। শিক্ষকেরা তখন গত তিন মাসের হাজিরা খাতা বের করবেন। সেই খাতা থেকে খুঁজে দেখবেন ওই শিক্ষার্থী কতদিন ক্লাসে উপস্থিত ছিল, পুরোটাই খুবই সময়সাপেক্ষ কাজ। কিন্তু ওই স্কুলে যদি সব তথ্য ব্যবস্থাপনার কাজ একটি কম্পিউটারে ডেটাবেজ ম্যানেজমেন্ট সফটওয়্যারের মাধ্যমে করা হতো, তাহলে এই তথ্য এক সেকেন্ডের মধ্যেই বের করা সম্ভব হতো। তথ্য সংরক্ষণ করার কাজটি করে ডেটাবেজ আর সেই ডেটাবেজকে ঠিকমতো পরিচালনা করার জন্য যে সফটওয়্যার, তাকেই বলা হয় ডেটাবেজ ম্যানেজমেন্ট সিস্টেম।
কম্পিউটারের মেমোরি ও ফাইল
কম্পিউটারের প্রোগ্রাম যখন কোনো ডেটা নিয়ে কাজ করে, সেই ডেটা অস্থায়ী মেমোরিতে লোড করে তারপর কাজ করে। এই অস্থায়ী মেমোরিকে বলা হয় র্যাম (RAM)। কম্পিউটার বন্ধ হয়ে গেলে র্যাম থেকে ডেটা মুছে যায়। আবার প্রোগ্রাম বন্ধ করে দিলেও প্রোগ্রাম র্যাম-এর ডেটার নিয়ন্ত্রণ হারিয়ে ফেলে। তাই যেসব তথ্য সংরক্ষণের দরকার হয়, সেগুলোকে স্থায়ী মেমোরি, যেমন-হার্ড ডিস্কে সংরক্ষণ করা হয়। হার্ড ডিস্কের যেসব ডেটা আমরা ব্যবহার করি, সেগুলোকে ফাইল (file) নামক একটি ব্যবস্থার মাধ্যমে আমরা অ্যাকসেস করি। যেমন- একটি টেক্সট ফাইলে আমরা বিভিন্ন তথ্য লিখে সেভ করে রাখতে পারি। তারপরে চাইলে কম্পিউটার বন্ধ করে দিতে পারি। আবার যখন কম্পিউটার চালু করব, তখন চাইলে সেই ফাইলটি খুলে আগে লেখা তথ্য দেখতে পারি।
কম্পিউটারকে যখন মানুষ বিভিন্ন তথ্য সংরক্ষণ করার কাজে ব্যবহার করা শুরু করল, তখন বিভিন্ন প্রোগ্রাম লেখা হতো, যেগুলো তথ্য প্রক্রিয়াকরণের পরে ফাইলে সংরক্ষণ করত। সেই ফাইলের তথ্য পরিবর্তন বা তথ্য নিয়ে অন্য কোনো কাজ করতে হলে আবার নতুন প্রোগ্রাম লিখে কাজগুলো করতে হতো। যেমন ধরা যাক, একটি অ্যাড্রেস বুক (address book), যেখানে বিভিন্নজনের নাম, ঠিকানা, ফোন নম্বর ইত্যাদি তথ্য সংরক্ষিত থাকবে এবং প্রয়োজন অনুসারে সেই তথ্য খুঁজে বের করা যাবে। তাহলে নতুন তথ্য যোগ করার
(একে ডেটা এন্ট্রি- data entry বলা হয়) জন্য প্রোগ্রাম লিখতে হবে। তথ্য খুঁজে বের করার জন্যও প্রোগ্রাম লিখতে হবে। এখন কেউ যদি বলে ফোন নম্বরের পর ইমেইল ঠিকানাও সংরক্ষণ করতে হবে, তখন আবার ডেটা এন্ট্রি করার প্রোগ্রামটি এবং বাকি সব প্রোগ্রাম পরিবর্তন করতে হবে। তারপর ধরা যাক, কেউ বলল, নাম দিয়ে কারো তথ্য খুঁজে বের করার পাশাপাশি ইমেইল ঠিকানা দিয়েও খোঁজার ব্যবস্থা রাখতে হবে, তখন আবার নতুন ফাংশন লিখতে হবে। এভাবে তথ্য ব্যবস্থাপনার কাজটি বেশ জটিল ও প্রোগ্রামারদের জন্য পরিশ্রমসাধ্য হয়ে যায়। ডেটাবেজ ম্যানেজমেন্ট সফটওয়্যার সেই কাজটি খুব সহজ করে দেয়।
ডেটাবেজ
আক্ষরিক অর্থে, ডেটাবেজ হচ্ছে ডেটার সমাহার, অর্থাৎ যেখানে অনেক ডেটা থাকে। তবে সফটওয়্যারের জগতে ডেটাবেজ হচ্ছে এমন একটি সফটওয়্যার যেখানে প্রচুর পরিমাণ তথ্য একসঙ্গে সংরক্ষণ করা যায়, দরকারি তথ্য বের করা যায়, নতুন তথ্য যোগ করা যায় এবং প্রয়োজনমতো কোনো তথ্য পরিবর্তন, পরিবর্ধন ও মুছে ফেলা যায়। আর সেই ডেটাবেজকে সুষ্ঠুভাবে পরিচালনা করার জন্য কিছু প্রোগ্রাম বা সফটওয়্যার মিলেই গঠিত হয় ডেটাবেজ ম্যানেজমেন্ট সিস্টেম।
ডেটাবেজকে মোটাদাগে দুভাগে ভাগ করা যায়: রিলেশনাল ডেটাবেজ (Relational Database) ও নোএসকিউএল (NoSQL)। রিলেশনাল ডেটাবেজের ধারণা প্রায় ৫০ বছর আগের, তবে এখনো এটি সবচেয়ে বেশি ব্যবহৃত ও গুরুত্বপূর্ণ ডেটাবেজ। আর নোএসকিউএল ডেটাবেজ অপেক্ষাকৃত নতুন এবং বেশ কিছু ক্ষেত্রে, বিশেষ করে ওয়েবভিত্তিক বিভিন্ন অ্যাপ্লিকেশনে এর ব্যবহার দিন দিন বাড়ছে। তবে বিভিন্ন সীমাবদ্ধতার কারণে নোএসকিউএল সবক্ষেত্রে ব্যবহার করা সম্ভব হয় না।
রিলেশনাল ডেটাবেজ (Relational Database)
রিলেশনাল ডেটাবেজ-এ ডেটাকে এক বা একাধিক টেবিলে সংরক্ষণ ও প্রকাশ করা হয়। কিছু কিছু টেবিলের মধ্যে অনেক সময় সম্পর্ক (relation) থাকতে পারে। যেমন ধরা যাক, একটি স্কুলের ডেটাবেজে ওই স্কুলের শিক্ষক ও শিক্ষার্থীর নানান ধরনের তথ্য থাকতে পারে। আবার পরীক্ষার ফলাফল, ক্লাসের রুটিন, এসব তথ্যও ডেটাবেজে থাকতে পারে। একই ধরনের সব তথ্য একটি টেবিলে থাকবে। যেমন শিক্ষকদের তথ্যের জন্য teacher টেবিল, শিক্ষার্থীদের তথ্যের জন্য student টেবিল, পরীক্ষার ফলাফল রাখার জন্য result টেবিল তৈরি করতে হবে। student টেবিল ও result টেবিলের মধ্যে একটি সম্পর্ক থাকবে, যেন দুটো টেবিল থেকে একজন শিক্ষার্থীর ব্যক্তিগত তথ্য ও পরীক্ষার ফলাফল সংক্রান্ত তথ্য একসঙ্গে পাওয়া যায়। আর এসব টেবিল মিলে তৈরি হবে school ডেটাবেজ।
একটি ডেটাবেজ টেবিলের দুটি অংশ থাকে, টেবিল হেডার (table header) ও টেবিল বডি (table body)। টেবিল হেডারে থাকে বিভিন্ন কলামের নাম এবং সেই কলামে কী ধরনের ডেটা রাখা হবে তার তথ্য। আর টেবিলের বডিতে থাকে মূল তথ্য। প্রতিটি সারি (row)-তে একটি নির্দিষ্ট বিষয়ের তথ্য থাকে। একটি টেবিলে কী কী ডেটা রাখা হবে এবং সেগুলো কী ধরনের হবে, সেটি আগে ঠিক করতে হয়। যেমন-
শিক্ষার্থীর টেবিলে থাকতে পারে শিক্ষার্থীর নাম, রোল নম্বর, ক্লাস, বিভাগ/শাখা, অভিভাবকের নাম, অভিভাবকের ফোন নম্বর, বাসার ঠিকানা ইত্যাদি।
ডেটার ধরন বিভিন্ন রকমের হতে পারে। সি প্রোগ্রামিং ভাষায় যেমন নির্দিষ্ট কিছু ডেটা টাইপ রয়েছে, রিলেশনাল ডেটাবেজেও তেমনি কিছু ডেটা টাইপ রয়েছে। বিভিন্ন ডেটাবেজ নির্মাতারা নিজেদের মতো ডেটা টাইপ নির্দিষ্ট করে দেন, তবে বেশ কিছু ডেটা টাইপ সব ডেটাবেজেই পাওয়া যাবে। যেমন- টেক্সট (text), পূর্ণসংখ্যা (integer), দশমিকযুক্ত সংখ্যা (decimal number), তারিখ (date) ইত্যাদি।
এখন আমরা একটি টেবিলের উদাহরণ দেখি:
টেবিলের নাম: শিক্ষার্থী
শিক্ষার্থীর নাম (টেক্সট) | রোল নম্বর (পূর্ণসংখ্যা) | শ্রেণি (পূর্ণসংখ্যা) | শাখা (টেক্সট) | অভিভাবকের নাম (টেক্সট) | ফোন নম্বর (টেক্সট) |
---|---|---|---|---|---|
মিজানুর রহমান | ১ | ৪ | দিবা | আব্দুর রহমান | |
মোশাররফ হোসেন | ৪ | দিবা | সেলিনা খাতুন | ০২০৩০২ | |
সৌরভ দাস | ১ | ৫ | প্রভাতি | অজয় দাস | ০৩০৪০২ |
শাকিল মিয়া | ৫ | প্রভাতি | মনসুর মিয়া |
এই শিক্ষার্থী টেবিলের প্রথম সারিটি হচ্ছে টেবিলের হেডার। এই সারিতে যেসব ঘর আছে, প্রতিটি হচ্ছে একটি কলাম (column)-এর নাম এবং তার ডেটা টাইপ (মানে ওই কলামে কী ধরনের ডেটা থাকবে)। যেমন- শিক্ষার্থীর নাম হচ্ছে একটি কলামের নাম এবং সেখানে টেক্সট টাইপের ডেটা থাকবে। এর নিচে যত ঘর থাকবে, সব ঘরে বিভিন্ন শিক্ষার্থীর নাম থাকবে, অন্য কোনো তথ্য থাকতে পারবে না। আর দ্বিতীয় সারি থেকে প্রতিটি সারিতে একজন করে শিক্ষার্থীর তথ্য দেওয়া আছে। যেমন- দ্বিতীয় সারির প্রথম ঘরে আছে মিজানুর রহমান, যা একজন শিক্ষার্থীর নাম, তারপরের ঘরে আছে তার রোল নম্বর, তারপরের ঘরে আছে তার শ্রেণি, অর্থাৎ সে কোন শ্রেণিতে পড়ছে, ইত্যাদি। একটি সারিতে কেবল একজন শিক্ষার্থীর তথ্য থাকবে, কখনো একাধিক শিক্ষার্থীর তথ্য থাকবে না।
প্রতিটি সারিকে ইংরেজিতে বলে রো (row)। এগুলোকে রেকর্ড (record)-ও বলা হয়ে থাকে। আর টেবিলের প্রতিটি ঘর হচ্ছে একেকটি ফিল্ড (field)।
বর্তমানে বিশ্বব্যাপী জনপ্রিয় ও বহুল ব্যবহৃত রিলেশনাল ডেটাবেজ হচ্ছে ওরাকল (Oracle), মাইএসকিউএল (MySQL), মাইক্রোসফট এসকিউএল সার্ভার (Microsoft SQL Server), পোস্টগ্রেস (PostgreSQL), মাইক্রোসফট অ্যাকসেস (Microsoft Access) ও এসকিউলাইট (SQLite)। এগুলোর মধ্যে মাইসিক্যুয়েল, পোস্টগ্রেস ও এসকিউলাইট হচ্ছে ফ্রি এবং ওপেন-সোর্স (free & open source) ডেটাবেজ। অর্থাৎ এগুলো ব্যবহার করার জন্য টাকা দিতে হয় না, এবং এগুলোর সোর্সকোডও উন্মুক্ত।
নোট: উচ্চারণের সুবিধার জন্য এসকিউএল শব্দটি অনেকে সিক্যুয়েল বলে উচ্চারণ করে। SQL শব্দটির পূর্ণরূপ, স্ট্রাকচারড কুয়েরি ল্যাঙ্গুয়েজ (Structured Query Language)।
নাল ভ্যালু (Null Value)
অনেক সময় ডেটাবেজ টেবিলে কিছু কিছু রেকর্ডে কোনো কলামের মান যদি অজানা থাকে, তখন সেখানে Null (বা NULL) ব্যবহার করা হয়। যেমন- student টেবিলে ফোন নম্বর বলে একটি কলাম আছে। এখন সবার যে ফোন নম্বর থাকতেই হবে, এমন কোনো কথা নেই, যেমন- মানিক মিয়া নামক শিক্ষার্থীর ফোন নম্বর নেই, তাই তার রেকর্ডে ফোন নম্বর ফিল্ডটি ফাঁকা রয়েছে। ডেটাবেজ ধরে নেবে এর মান নাল (NULL)। আবার, ধরা যাক ওই টেবিলে মাসিক পারিবারিক আয় নামে আরেকটি কলাম আছে। মাসিক পারিবারিক আয় একটি সংখ্যা। এখন, কেউ যদি তার মাসিক পারিবারিক আয় প্রকাশ করতে না চায় তো, সেখানে কিন্তু 0 বসবে না, বরং সেটি হবে ফাঁকা বা NULL। কারণ এক্ষেত্রে 0 মানে তার পরিবারের কারো কোনো আয় নেই। আবার অনেক সময় একটি টেবিলে বিভিন্ন মানুষের পেশা যদি রাখার প্রয়োজন হয়, সেখানেও সবার যে পেশা থাকতেই হবে, এমন কোনো কথা নেই। যেমন- ওই টেবিলে যদি তিন বছর বয়সি একটি শিশুর তথ্য থাকে, তাহলে তার পেশা হবে NULL, কারণ তাকে শিক্ষার্থী, চাকুরিজীবী, ব্যবসায়ী কিংবা বেকার-কোনো পেশাতেই ফেলা যাবে না। এখন পেশা যদি টেক্সট টাইপের হয়, তখন কিন্তু ফাঁকা স্ট্রিং (অর্থাৎ ") বসানো যাবে না, বরং ঘরটি ফাঁকা রাখতে হবে। ফাঁকা ঘরটিকে ডেটাবেজ NULL বলে বিবেচনা করবে।
প্রাইমারি কি (Primary Key)
প্রাইমারি কি হচ্ছে একটি টেবিলের নির্দিষ্ট কলাম, যেটি দিয়ে প্রতিটি রেকর্ডকে আলাদাভাবে চিহ্নিত করা যায়। শিক্ষার্থী টেবিলে কোন কলাম দিয়ে প্রতিটি শিক্ষার্থীকে আলাদাভাবে চিহ্নিত করা যায়? নাম দিয়ে করা যাবে না, কারণ একই শ্রেণিতে কিংবা আলাদা শ্রেণিতে একই নামে একাধিক শিক্ষার্থী থাকতে পারে। টেবিলে আমরা দেখতে পাচ্ছি, 'মিজানুর রহমান' নামটি চতুর্থ শ্রেণির একজন শিক্ষার্থীর। কিন্তু ষষ্ঠ শ্রেণিতেও একজন মিজানুর রহমান থাকতে পারে। আবার আমরা যদি বলি, চতুর্থ শ্রেণির মিজানুর রহমান, তখন চতুর্থ শ্রেণিতে যদি একাধিক মিজানুর রহমান থাকে, তাহলে তাকে আলাদাভাবে চিহ্নিত করা যাবে না। তাই নাম প্রাইমারি কি (key) হতে পারবে না। রোল নম্বরও প্রাইমারি কি হতে পারে না, কারণ প্রতিটি শ্রেণিতেই রোল 1, 2, 3 ইত্যাদি রয়েছে। ফোন নম্বরও প্রাইমারি কি হতে পারবে না, কারণ সবার ফোন নম্বর নাও থাকতে পারে। তাহলে উপরে যে শিক্ষার্থী টেবিল তৈরি করা হয়েছে, সেখানে কোনো প্রাইমারি কি নেই। তবে, শ্রেণি, শাখা ও রোল নম্বর- এই তিনটি কলাম মিলে একটি প্রাইমারি কি হতে পারে, কারণ এই তিনটি তথ্য একসঙ্গে করলে আমরা প্রতিটি শিক্ষার্থীকে আলাদা করতে পারি। যখন একাধিক কলাম মিলে প্রাইমারি কি তৈরি হয়, তখন তাকে বলা হয় কম্পোজিট কি (composite key)।
ডেটাবেজে টেবিল তৈরির সময় কোন কলামটি প্রাইমারি কি হতে পারে তা চিহ্নিত করতে পারলে সেটি আলাদাভাবে উল্লেখ করে দিতে হয়। আবার কোনো কোনো সময় প্রাইমারি কি চিহ্নিত করা সম্ভব নাও হতে পারে। তখন শুরুতে একটি কলাম যোগ করা হয়। এটি একটি সংখ্যার কলাম হবে এবং প্রতিটি রেকর্ড বা রো-এর জন্য আলাদা হবে। সাধারণত, টেবিলে id নামের একটি কলাম যোগ করা হয়, যেটি ইন্টিজার টাইপের ডেটা ধারণ করে এবং এর সঙ্গে অটো ইনক্রিমেন্ট (Auto Increment) বৈশিষ্ট্য জুড়ে দেওয়া হয়, যেন প্রতিটি রো ইনসার্ট (insert) করার সময় এর মান এক-এক করে বাড়ে (এই কলামের জন্য তাই কোনো মান নিজে থেকে দিতে হয় না, ডেটাবেজ সিস্টেম নিজেই এটি নিয়ন্ত্রণ করে)।
রিলেশনাল ডেটাবেজে সব টেবিলেই প্রাইমারি কি থাকতে হয়। যদিও প্রাইমারি কি ছাড়াও টেবিল তৈরি করা যায়। সেক্ষেত্রে অনেক সময় ডেটাবেজ নিজেই একটি প্রাইমারি কি তৈরি করে নেয়।
শিক্ষার্থী টেবিলে শ্রেণি, শাখা ও রোল- এই তিনটি কলাম মিলে প্রাইমারি কি তৈরি করা যায়। তবে এখানে একটি সমস্যা হতে পারে। এভাবে টেবিল তৈরি করলে আমরা কেবল বর্তমান শিক্ষার্থীদের তথ্যই রাখতে পারব। অতীতের শিক্ষার্থীদের তথ্য রাখা সম্ভব হবে না, যেমন- পাঁচ বছর আগের কোনো শিক্ষার্থী, যে পড়ত সপ্তম শ্রেণির দিবা শাখায় এবং যার রোল নম্বর ছিল দুই, তাকে আলাদাভাবে বের করা যাবে না। তাই আমরা নতুন একটি কলামে প্রতিটি শিক্ষার্থীর জন্য পৃথক একটি আইডি দিতে পারি। আবার কোনো কোনো প্রতিষ্ঠানে রোল নম্বর এমনভাবে তৈরি করা হয়,
বাংলাদেশে প্রতিটি প্রাপ্তবয়স্ক মানুষেরই একটি করে জাতীয় পরিচয়পত্র আছে (যাকে ন্যাশনাল আইডি কার্ড- National ID Card-ও বলা হয়)। সেখানে কিছু প্রতিটি মানুষকে আলাদা নম্বর দিয়ে চিহ্নিত করা হয়, এবং কখনোই দুজন মানুষের নম্বর একরকম হতে পারবে না।
![]() |
জাতীয় পরিচয় পত্র National ID Card Bangaldesh |
তাই বিভিন্ন টেবিলে যদি প্রাপ্তবয়স্ক মানুষের তথ্য রাখা হয়, সেসব জায়গায় জাতীয় পরিচয়পত্রের নম্বর প্রাইমারি কি হিসেবে ব্যবহার করা যেতে পারে।
ডেটাবেজ রিলেশন (Database Relation)
ডেটাবেজ রিলেশন বলতে আসলে ডেটাবেজের টেবিলগুলোর মধ্যে সম্পর্ক বোঝানো হয়। একটি ডেটাবেজে এক বা একাধিক টেবিল থাকতে পারে। যখন একাধিক টেবিল থাকে, তখন প্রায়শই টেবিলগুলোর মধ্যে সম্পর্ক বা রিলেশন (relation) থাকে। এই রিলেশন আবার তিন ধরনের হতে পারে:
১. ওয়ান টু ওয়ান (one to one)
২. ওয়ান টু মেনি (one to many)
৩. মেনি টু মেনি (many to many)
১. ওয়ান টু ওয়ান রিলেশন
দুটি টেবিলের মধ্যে যদি ওয়ান টু ওয়ান রিলেশন থাকে, তবে একটি টেবিলের একটি রো-এর সঙ্গে অন্য টেবিলের একটিমাত্র রো-এর সম্পর্ক খুঁজে পাওয়া যাবে। ধরা যাক, শিক্ষার্থীদের সাধারণ তথ্য রাখার জন্য একটি টেবিল student_info তৈরি হলো। আবার শিক্ষার্থীদের যোগাযোগের ঠিকানা রাখার জন্য তৈরি করা হলো student_contact টেবিল। টেবিলগুলো নিম্নরূপ:
টেবিলের নাম: student_info
Roll (integer, primary key) | Name (text) | Class (integer) |
---|---|---|
1 | Mizanur Rahman | 6 |
2 | Mosharraf Hossain | 7 |
3 | Subir Kumar | 6 |
ID (integer, primary key) | Roll (integer) | Phone (text) | Email (text) | Address (text) |
---|---|---|---|---|
1 | 1 | 012345678 | mizan@email.com | Adabor, Shyamoli, Dhaka |
2 | 2 | 012345543 | mosharraf@email.com | Sector 3, Uttara, Dhaka |
3 | 3 | 014343678 | subir@email.com | College Road, Mymensingh |
উপরের টেবিল দুটির মধ্যে ওয়ান টু ওয়ান রিলেশন বিদ্যমান। যেমন- student_info টেবিলের প্রতিটি রো-তে একজন শিক্ষার্থীর তথ্য রয়েছে। এই টেবিলের প্রাইমারি কি হচ্ছে Roll (যদিও প্রাইমারি কি হিসেবে Roll সবসময় সঠিক নয়, তবে এখানে আলোচনার সুবিধার্থে এটি প্রাইমারি কি হিসেবে ঘোষণা করা হয়েছে)। এখন, এই টেবিলে প্রতিটি শিক্ষার্থী (রো)-এর জন্য student_contact টেবিলে একটি রো থাকবে, যেখানে ওই শিক্ষার্থীর যোগাযোগের ঠিকানা (ফোন, ইমেইল, বাসার ঠিকানা) থাকবে। student_info টেবিলে Roll হচ্ছে প্রাইমারি কি, কিন্তু student_contact টেবিলে Roll হচ্ছে ফরেন কি (foreign key)। একটি টেবিলের প্রাইমারি কি অন্য টেবিলে যখন ব্যবহার করা হয়, তখন সেই টেবিলে সেই কি-কে ফরেন কি বলা হয়। এই বিশেষ কি দিয়ে টেবিলদুটি সম্পর্কযুক্ত হয়। ২. ওয়ান টু মেনি রিলেশন ধরা যাক, শিক্ষার্থীদের পরীক্ষার ফল সংরক্ষণ করার জন্য result নামের একটি টেবিল তৈরি করা হলো। টেবিলের প্রতিটি রো-তে একজন শিক্ষার্থীর একটি বিষয়ে পরীক্ষায় প্রাপ্ত নম্বর থাকবে।
টেবিলের নাম : result
result
ID (Integer, Primary Key) | Roll (Integer) | Subject (Text) | Marks (Decimal) |
---|---|---|---|
1 | 1 | Bangla | 70 |
2 | 1 | English | 76 |
3 | 2 | Bangla | 68 |
4 | 2 | English | 81 |
এখানে দেখা যাচ্ছে যে, student_info টেবিলের একটি রো-এর সঙ্গে result টেবিলের একাধিক রো-এর সম্পর্ক রয়েছে। যেমন- রোল নম্বর 1 যার, তার দুটি বিষয়ে প্রাপ্ত নম্বর result টেবিলে দুটি রো-তে রাখা আছে। student_info ও result টেবিলের মধ্যকার সম্পর্ককে ওয়ান টু মেনি রিলেশন বলা হয়, কারণ প্রথম টেবিলের একটি রো-এর সঙ্গে দ্বিতীয় টেবিলের একাধিক রো-এর সম্পর্ক রয়েছে। result টেবিলের Roll হচ্ছে ফরেন কি।
৩. মেনি টু মেনি
যখন দুটি টেবিল এমনভাবে সম্পর্কযুক্ত হয় যে, প্রথম টেবিলের একটি রো, দ্বিতীয় টেবিলের একাধিক রো-এর সঙ্গে সম্পর্কযুক্ত, আবার দ্বিতীয় টেবিলের একটি রো, প্রথম টেবিলের একাধিক রো-এর সঙ্গে সম্পর্কযুক্ত হয়, তখন তাদের মধ্যকার সম্পর্ককে বলা হয় মেনি টু মেনি রিলেশনশিপ। ধরা যাক, স্কুলে বিভিন্ন ক্লাব তৈরি করা হয়েছে। যেমন- ফুটবল ক্লাব, ক্রিকেট ক্লাব, দাবা ক্লাব, বিতর্ক ক্লাব, বিজ্ঞান ক্লাব, সাংস্কৃতিক ক্লাব ইত্যাদি। একজন শিক্ষার্থী এক বা একাধিক ক্লাবের সদস্য হতে পারে। আবার একটি ক্লাবে একাধিক শিক্ষার্থী থাকতে পারে। নিচে club টেবিলটি দেওয়া হলো-
টেবিলের নাম : club
club
Name (Text) | Moderator (Text) | Established (Date) |
---|---|---|
Cricket Club | Mr. Ruhul Amin | 1-1-2000 |
Football Club | Mr. Shahidul Islam | 5-1-1998 |
Debating Club | Mr. Sumon Kumar | 3-7-2002 |
Chess Club | Ms. Fatema Akhter | 1-1-2001 |
এই টেবিলের প্রাইমারি কি হচ্ছে Name. অর্থাৎ প্রতিটি ক্লাবের অনন্য (unique) নাম থাকবে, একই নামে একাধিক ক্লাব থাকতে পারবে না।
এখন student_info ও club টেবিল দুটির মধ্যে সম্পর্ক স্থাপনের জন্য আমাদেরকে আরেকটি টেবিল তৈরি করতে হবে।
টেবিলের নাম: student_club
student_club
Roll (Integer) | club_name (text) |
---|---|
1 | Cricket Club |
2 | Cricket Club |
2 | Football Club |
2 | Chess Club |
2 | Debating Club |
মেনি টু মেনি রিলেশনের জন্য এরকম একটি টেবিল তৈরি করতে হয়, যার কাজ হচ্ছে মূল টেবিলদুটি যুক্ত করা।
এসকিউএল (SQL)
রিলেশনাল ডেটাবেজে এসকিউএল (SQL: Structured Query Language) নামক প্রোগ্রামিং ভাষার সাহায্যে ডেটাবেজে তথ্য লেখা, পড়া, পরিবর্তন করা ও অন্যান্য কাজ করা হয়। এসকিউএল ভাষার নির্ধারিত নিয়ম-কানুন থাকলেও বিভিন্ন বাণিজ্যিক ডেটাবেজ তাদের নিজস্ব কুয়েরি ভাষা ব্যবহার করে, যা প্রমিত (standard) এসকিউএল-এর বেশ কাছাকাছি।
এসকিউএল-এর সঙ্গে সাধারণ প্রোগ্রামিং ভাষাগুলোর মূল পার্থক্য কোথায়? একজন প্রোগ্রামার যখন একটি নির্দিষ্ট সমস্যা সমাধানের জন্য প্রোগ্রাম লিখেন, তখন আসলে সেই সমস্যাটি সমাধানের যে অ্যালগরিদম, সেটিকেই প্রোগ্রামিং ভাষার মাধ্যমে প্রকাশ করেন। এসব প্রোগ্রামে কম্পিউটারের জন্য সুনির্দিষ্টভাবে বলা থাকে যে, কীভাবে ও কোন ধাপে কী কাজ করা হবে। কম্পিউটার শুধু সেই নির্দেশনা অনুসরণ করে। আর এসকিউএল কুয়েরি
ডেটা ডেফিনেশন ল্যাঙ্গুয়েজ
ডেটাবেজের টেবিল তৈরি করা, টেবিল মুছে ফেলা, ইনডেক্স তৈরি করা ইত্যাদি কাজ করার জন্য ডেটা ডেফিনেশন ল্যাঙ্গুয়েজ ব্যবহার করা হয়। যেমন- একটি টেবিল তৈরি করতে গেলে টেবিলের নাম, টেবিলের বিভিন্ন কলামের নাম ও সেখানে কী ধরনের ডেটা থাকবে, ইনডেক্স ইত্যাদি বলে দিতে হয়।
ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ
ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজের সাহায্যে একটি টেবিলের ডেটার উপর বিভিন্ন ধরনের কুয়েরি চালানো হয়, যেমন- ডেটা পড়া, ডেটা পরিবর্তন করা, ডেটা মুছে ফেলা ইত্যাদি।