If you're seeing this message, it means we're having trouble loading external resources on our website.

তোমার যদি কোন ওয়েব ফিল্টার দেওয়া থাকে, তাহলে দয়া করে নিশ্চিত কর যে *.kastatic.org এবং *.kasandbox.org ডোমেইনগুলো উন্মুক্ত।

মূল বিষয়বস্তু

কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 3

পাঠ 3: এসকিউএল এ রিলেশনাল কুয়েরি

সংশ্লিষ্ট টেবিলের মধ্যে ডাটা বিভাজন

এতক্ষণ পর্যন্ত আমরা শুধু, একটি টেবিল (table) নিয়ে কাজ করছিলাম এবং সেই টেবিল থেকে ডাটা (data - উপাত্ত) নেওয়ার বিভিন্ন উপায় দেখছিলাম। কিন্তু আসলে, প্রায় সময়ই, ডাটা একাধিক টেবিলে বন্টিত থাকে এবং সে সকল টেবিল পরস্পরের সাথে কোন না কোনভাবে "সম্পর্কযুক্ত" থাকতে পারে।
উদাহরণস্বরূপ, ধরি, একটি টেবিলে শিক্ষার্থীদের পরীক্ষার ফলাফল এবং তাদের ই-মেইলও সংরক্ষণ করা হয়:
student_namestudent_emailtestgrade
Peter Rabbitpeter@rabbit.comNutrition95
Alice Wonderlandalice@wonderland.comNutrition92
Peter Rabbitpeter@rabbit.comChemistry8 5
Alice Wonderlandalice@wonderland.comChemistry95
প্রত্যেক শিক্ষার্থী কোন কোন বই (book) পড়ে, সেটা সংরক্ষণের জন্য আরেকটি টেবিল তৈরি করি:
student_namebook_titlebook_author
Peter RabbitThe Tale of Mrs. Tiggy-WinkleBeatrix Potter
Peter RabbitJabberwockyLewis Carroll
Alice WonderlandThe Hunting of the SnarkLewis Carroll
Alice WonderlandJabberwockyLewis Carroll
প্রত্যেক শিক্ষার্থীর তথ্য সংরক্ষণের জন্য আরেকটি টেবিল তৈরি করি:
idstudent_firststudent_laststudent_emailphonebirthday
1পিটারখরগোশpeter@rabbit.com555-66662001-05-10
2এলিসWonderlandalice@wonderland.com555-44442001-04-02
এই টেবিলগুলো কি ঠিক আছে? এগুলোকে কি একটু পরিবর্তন করা দরকার?
এই টেবিলগুলো থেকে একটি বিষয় শেখা যায়: তারা Relational data অর্থাৎ সম্পর্কযুক্ত ডাটা প্রকাশ করে - মানে, তারা এমন ডাটা সংরক্ষণ করে যারা পরস্পর সম্পর্কযুক্ত। প্রত্যেকটি টেবিল নির্দিষ্ট শিক্ষার্থীর জন্য ডাটা আছে এবং অনেক টেবিলে একই ডাটা রয়েছে। যখন ডাটা একাধিক টেবিলে থাকে, তখন একটি টেবিল পরিবর্তনের ফলাফল অন্য টেবিলকে প্রভাবিত করে।
উদাহরণস্বরূপ, যদি একজন শিক্ষার্থীর ই-মেইল পরিবর্তন করতে হয়? কোন টেবিলে সেটা পরিবর্তন করতে হবে?
শিক্ষার্থীর ডাটার টেবিলটি পরিবর্তন করতে হবে, কিন্তু শিক্ষার্থীর ফলাফলের টেবিলেও একই ডাটা আছে, এছাড়াও শিক্ষার্থীর প্রতিটি সারি যাচাই করে ই-মেইল পরিবর্তন করতে হবে।
বিভিন্ন ডাটা যেন বিভিন্ন স্থানে না থাকে এবং কমসংখ্যক আপডেট (Update) করার জন্য খেয়াল রাখতে হবে যেন, একটি নির্দিষ্ট কলামের ডাটা একটি স্থানে সংরক্ষিত থাকে। যদি এটা করা হয়, তাহলে এই ডাটাকে অন্যান্য টেবিলের সাথে সম্পর্কযুক্ত করতে হবে, এটা আমরা পরে করবো।
ধরি, শিক্ষার্থীর ফলাফলের টেবিল থেকে ই-মেইল মুছে দেবো, কারণ একই উপাত্ত শিক্ষার্থীর টেবিলেও আছে। তাহলে টেবিলটি এমন হবে:
student_nametestgrade
Peter RabbitNutrition95
Alice WonderlandNutrition92
Peter RabbitChemistry8 5
Alice WonderlandChemistry95
এখন, প্রত্যেক শিক্ষার্থীর ই-মেইল কীভাবে বের করবো? নামের মিল দেখে, শিক্ষার্থীর তথ্যের টেবিল থেকে এটা পাওয়া যাবে। কিন্তু একই নামে 2 জন শিক্ষার্থীর ক্ষেত্রে কি হবে? (একটি মজার তথ্য, বালিতে (Bali), প্রতি 4 জনের মধ্যে 1 জনের প্রথম নাম একই।) শিক্ষার্থী খুঁজে বের করার জন্য নামের উপর নির্ভর করলে চলবে না এবং সত্যিই, টেবিলে কোনকিছু বের করতে হলে নামের উপর নির্ভর করা মোটেও উচিত নয়।
তাই সবচেয়ে উত্তম উপায় হল student_name মুছে ফেলে এটার পরিবর্তে student_id ব্যবহার করা, কারণ এটা একটি অদ্বিতীয় সংখ্যা:
student_idtestgrade
1Nutrition95
2Nutrition92
1Chemistry8 5
2Chemistry95
We would make the same change to our books table, using student_id instead of student_name:
student_idbook_titlebook_author
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
1JabberwockyLewis Carroll
2The Hunting of the SnarkLewis Carroll
2JabberwockyLewis Carroll
লক্ষ্য করি, Jabberwocky এর ক্ষেত্রে title (শিরোনাম) এবং author (লেখক) দুইবার আছে? এটার সমাধান হল একটি টেবিলকে ভেঙে একাধিক সম্পর্কযুক্ত টেবিলে পরিণত করা, যেন কোনকিছু পরিবর্তন করার সময় একাধিক স্থানে আপডেট (update) না করতে হয়।
শুধু বইয়ের জন্য একটি টেবিল তৈরি করি:
idbook_titlebook_author
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
2JabberwockyLewis Carroll
3The Hunting of the SnarkLewis Carroll
তাহলে student_books টেবিলটি এমন হবে:
student_idbook_id
11
12
23
22
I know, this table doesn't look nearly as readable as the old table that had all of information stuffed into every row. But, tables are often not designed to be readable to humans-- they're designed to be the easiest to maintain and least prone to bugs. In many cases, it may be best to split information into multiple related tables, so that there is less redundant data and fewer places to update.
একাধিক টেবিলের সম্পর্কযুক্ত উপাত্ত নিয়ে SQL দিয়ে কাজ করা একটি গুরুত্বপূর্ণ বিষয়। ডাটা নিয়ে এ সকল কাজ আমরা "join" (সংযোগ) নামক একটি প্রক্রিয়া ব্যবহার করে করব এবং এটিই হল পরবর্তী বিষয়।

আলোচনায় অংশ নিতে চাও?

কোন আলাপচারিতা নেই।
ইংরেজি জানো? খান একাডেমির ইংরেজি সাইটে আরো আলোচনা দেখতে এখানে ক্লিক কর।