Many-to-Many রিলেশনশিপ মডেল
"প্রোডাক্ট সেলস" ডাটাবেসে, একটি কাস্টমারের অর্ডারে এক বা একাধিক প্রোডাক্ট থাকতে পারে; এবং একটি প্রোডাক্ট অনেক অর্ডারে থাকতে পারে। "বুকস্টোর" ডাটাবেসে, একটি বই এক বা একাধিক লেখক লিখতে পারে; আর একজন লেখক শূন্য বা একাধিক বই লিখতে পারে। এই ধরনের রিলেশনশIP Many-to-Many নামে পরিচিত।
"প্রোডাক্ট সেলস" ডাটাবেস দিয়ে উদাহরণ দেখানো হলো। আমরা দুটি টেবিল দিয়ে শুরু করি: Products এবং Orders। Products টেবিলে প্রোডাক্টের ইনফো (নাম, বর্ণনা, quantityInStock) থাকে productID প্রাইমারি কী হিসেবে। Orders টেবিলে কাস্টমারের অর্ডার (customerID, dateOrdered, dateRequired, status) থাকে। আমরা অর্ডার করা আইটেমগুলো Orders টেবিলে রাখতে পারি না কারণ কতগুলো কলাম রিজার্ভ করতে হবে সেটা জানা নেই। আমরা অর্ডার ইনফো Products টেবিলেও রাখতে পারি না।
Many-to-Many রিলেশনশিপ সাপোর্ট করার জন্য একটি থার্ড টেবিল (junction table) তৈরি করতে হয়, বলুন OrderDetails (অথবা OrderLines), যেখানে প্রতিটি সারি একটি নির্দিষ্ট অর্ডারের একটি আইটেম রিপ্রেজেন্ট করে। OrderDetails টেবিলের প্রাইমারি কী দুটি কলাম নিয়ে গঠিত: orderID এবং productID, যা প্রতিটি সারি unikভাবে শনাক্ত করে। OrderDetails টেবিলের orderID এবং productID কলামগুলো Orders এবং Products টেবিল রেফারেন্স করতে ব্যবহৃত হয়, তাই এগুলো OrderDetails টেবিলের ফরেন কীও হয়।

Many-to-Many রিলেশনশIP বাস্তবে জংশন টেবিল দিয়ে দুটি One-to-Many রিলেশনশIP হিসেবে ইমপ্লিমেন্ট করা হয়।
- একটি অর্ডারের OrderDetails-এ অনেক আইটেম থাকে। একটি OrderDetails আইটেম একটি নির্দিষ্ট অর্ডারের অন্তর্গত।
- একটি প্রোডাক্ট অনেক OrderDetails-এ থাকতে পারে। প্রতিটি OrderDetails আইটেম একটি প্রোডাক্ট স্পেসিফাই করে।