انواع رابطه میان جدول ها در پایگاه داده رابطه ای

در مطلب قبلی توضیح دادیم که هر جدول پایگاه داده معادل یک موجودیت (entity) از سیستمی است که می خواهیم آن را مدل کنیم. میان هر موجودیت یک رابطه وجود دارد. به طور مثال در سیستم دانشگاه، میان استاد، دانشجو و درس رابطه وجود دارد. دانشجو در هر ترم درسی می تواند یک تا چند درس را با یک تا چند استاد بردارد و هر استاد نیز می تواند در هر ترم درسی به ازای یک یا چند درس خود، تا چندین دانشجو داشته باشد.

در زمان طراحی جدول های پایگاه داده باید این رابطه ها نیز میان جدول ها اعمال شوند. رابطه میان دو جدول از طریق کلید خارجی (foreign) و کلید اصلی انجام می شود. همانطور که توضیح دادیم، کلید خارجی در یک جدول، به کلید اصلی در جدول دیگر اشاره دارد. در واقع از طریق کلید خارجی در یک جدول، یک تا چندین سطر از این جدول را به سطری از جدول دیگر ارتباط می دهیم. به طور کلی میان جدول های پایگاه داده سه نوع رابطه زیر وجود دارد:

۱ – رابطه یک به یک یا One to One Relationship

۲ – رابطه یک به چند یا One to Many Relationship

۳ – رابطه چند به چند یاMany to Many Relationship

۱ – رابطه یک به یک

به طور مثال در یک سیستم، لازم است تا اطلاعات گذرنامه افراد را نگه داریم. در این حالت می توانیم یک جدول را برای نگهداری اطلاع های عمومی افراد و یک جدول را برای نگهداری اطلاع های گذرنامه افراد ایجاد کنیم. در واقع هر فرد می تواند تنها و تنها یک گذرنامه داشته باشد و به عبارا دیگر هر گذرنامه مربوط به دقیقا یک فرد است در این حالت هر سطر از جدول افراد با یک سطر از جدول اطلاع های گذرنامه در ارتباط است. این نوع رابطه یک به یک (one to one relationsip) می گویند.

در شکل زیر دو جدول به نام Person و Passport وجود دارد. همانطور که می بینید در جدول Passport ستون passport_number کلید اصلی است. در جدول افراد، ستون person_id کلید اصلی است و ستون passport_number کلید خارجی به یک سطر از جدول Passport است.

توجه کنید که لزومی ندارد، کلید خارجی در یک جدول حتما همنام با کلید اصلی در جدول مرتبط باشد. همچنین مقدار کلید خارجی می تواند NULL باشد، به این دلیل که ممکن است در مثال شکل بالا، هنوز اطلاع گذرنامه یک کاربر را وارد نکرده ایم.

۲ – رابطه یک به چند

فرض کنید می خواهیم اطلاع های کتاب ها و دسته بندی هر کتاب را نگه داریم. هر کتاب عموما مربوط به یک دسته بندی می شود ولی هر دسته بندی می تواند چندین کتاب داشته باشد. پس در این حالت رابطه یک به چند (one to many) میان جدول کتاب و دسته بندی کتاب وجود دارد. شکل زیر مثالی از رابطه یک به چند را نشان می دهد.

در شکل بالا مشخص است که هر کتاب تنها متعلق به یک دسته بندی است ولی هر دسته بندی می تواند چندین کتاب را داشته باشد. به طور مثال دسته بندی های گروه نرم افزار و حساب داری وجود دارد، حال برای دسته بندی نرم افزار کتاب های برنامه نوسی، پایگاه داده، سیستم عامل وجود دارد و برای دسته بندی حساب داری کتاب های اصول حساب داری، اصول اقتصاد، حساب داری میانه و حساب داری صنعتی وجود دارد.

بنابراین کتاب سیستم عامل تنها متعلق به یک دسته بندی است (نرم افزار) ولی دسته بندی نرم افزار چندین کتاب را دارد. این مفهوم رابطه یک به چند است. در شکل زیر در جدول Book ستون book_category نام ستون کلید خارجی است که به جدول Book_Category اشاره می کند. بنابراین در رابطه یک به چند، کلید خارجی در جدولی قرار می گیرد که در رابطه یک به چند، در سمت یک (one) رابطه قرار دارد.

۳ – رابطه چند به چند

فرض کنید می خواهیم اطلاع های کتاب و نویسنده گان کتاب را نگهداری کنیم. هر کتاب دارای یک یا چندین نویسنده است و هر نویسنده نیز دارای یک یا چندین کتاب است، پس یک رابطه چند به چند (many to many) میان جدول کتاب و نویسنده وجود دارد. در این حالت هر چند سطر از یک جدول با هر چند سطر از جدول دیگر در ارتباط است.

در ارتباط یک به چند، ارتباط از طریق ایجاد کلید خارجی در جدولی انجام می شود که در سمت one از رابطه قرار دارد. اما در ارتباط چند به چند کلید خارجی باید در کدام جدول باید ایجاد شود. در ارتباط چند به چند برای ارتباط دادن دو جدول از یک جدول میانه یا واسطه استفاده می شود که حداقل شامل کلیدهای خارجی به دو جدول دیگر است. شکل زیر مثالی از رابطه چند به چند را نشان می دهد.

در شکل بالا جدول Book_Author به عنوان جدول میانه یا جدول واسطه است. همانطور که مشخص است، در جدول Book_Author دو ستون book_id و author_id به ترتیب دو کلید خارجی به کلیدهای اصلی book_id در جدول Book و کلید اصلی author_id در جدول Author است.

در مطلب بعدی یک مثال جامع از رابطه های یک به چند و چند به چند میان جدول های مختلف را برای جمع بندی، آموزش داده ایم. توجه کنید که در زمان بدست آوردن داده ها از دو یا چند جدول مرتبط از دستور SELECT و مفهوم JOIN جدول ها استفاده می کنیم. همچنین رابطه میان دو جدول در رابطه یک به چند از طریق ایجاد کلید خارجی و در رابطه چند به چند از طریق ایجاد جدول میانه یا واسطه انجام می شود. جدول واسطه حداقل شامل ستون هایی به عنوان کلید خارجی به هر یک از جدول های شرکت کننده در رابطه چند به چند است.