رابطه یک به چند در یک پایگاه داده زمانی اتفاق می افتد که هر رکورد در جدول A ممکن است رکوردهای مرتبط زیادی در جدول B داشته باشد، اما هر رکورد در جدول B ممکن است تنها یک رکورد مربوطه در جدول A داشته باشد.
رابطه یک به چند در پایگاه داده رایج ترین طراحی پایگاه داده رابطه ای است و در قلب طراحی خوب قرار دارد.
پایگاه های داده همچنین می توانند یک رابطه یک به یک و یک رابطه چند به چند را پیاده سازی کنند.
نمونه ای از یک رابطه یک به چند
رابطه بین معلم و دوره هایی که تدریس می کنند را در نظر بگیرید. یک معلم می تواند چندین کلاس تدریس کند، اما این دوره با معلم رابطه یکسانی ندارد.
بنابراین، برای هر رکورد در جدول معلمان، رکوردهای زیادی در جدول دوره ها وجود دارد. این مثال یک رابطه یک به چند را نشان می دهد: یک معلم به چندین دوره.
چرا ایجاد یک رابطه یک به چند مهم است
برای نشان دادن رابطه یک به چند، حداقل به دو جدول نیاز دارید. بیایید ببینیم چرا.
پایبندی به اولین طراحی فرم عادی
شاید جدولی ایجاد کرده باشیم که بخواهیم نام و دروس تدریس شده را در آن ثبت کنیم. ما ممکن است یک جدول معلمان و دوره ها را مانند این طراحی کنیم:
Teacher_ID | نام_معلم | دوره |
---|---|---|
Teacher_001 | کارمن | زیست شناسی |
Teacher_002 | ورونیکا | ریاضی |
Teacher_003 | خورخه | انگلیسی |
اگر کارمن دو یا چند دوره تدریس کند چه می شود؟ ما با این طراحی دو گزینه داریم. میتوانیم آن را به رکورد موجود کارمن اضافه کنیم، مانند این:
Teacher_ID | معلم_نام | دوره |
---|---|---|
Teacher_001 | کارمن | زیست شناسی، ریاضی |
Teacher_002 | ورونیکا | ریاضی |
Teacher_003 | خورخه | انگلیسی |
اما، طرح فوق انعطاف ناپذیر است و ممکن است بعداً هنگام درج، ویرایش یا حذف داده ها، مشکلاتی را به همراه داشته باشد. جستجوی داده ها را دشوار می کند.
این طراحی همچنین اولین اصل عادی سازی پایگاه داده، اولین فرم عادی (1NF) را نقض می کند، که بیان می کند که هر سلول جدول باید دارای یک داده مجزا و مجزا باشد.
دومین قانون فرم عادی
یک جایگزین دیگر طراحی ممکن است اضافه کردن رکورد دوم برای کارمن باشد:
معلم_ID | معلم_نام | دوره |
---|---|---|
Teacher_001 | کارمن | زیست شناسی |
Teacher_001 | کارمن | ریاضی |
Teacher_002 | ورونیکا | ریاضی |
Teacher_003 | خورخه | انگلیسی |
این رویکرد به 1NF پایبند است، اما هنوز طراحی پایگاه داده ضعیفی دارد، زیرا افزونگی را معرفی میکند و میتواند یک پایگاه داده بزرگ را به طور غیرضروری منفجر کند. مهمتر از آن، داده ها ممکن است ناسازگار شوند.
مثلا، اگر نام کارمن تغییر کند چه؟ شخصی که با دادهها کار میکند ممکن است نام خود را در یک رکورد بهروزرسانی کند و در رکورد دوم نتواند آن را بهروزرسانی کند.
این طراحی استاندارد فرم دوم عادی (2NF) را نقض می کند، که به 1NF پایبند است و همچنین باید از افزونگی چندین رکورد جلوگیری کند. قانون 2NF با جدا کردن زیرمجموعههای داده در چندین جدول و ایجاد رابطه بین آنها به این امر دست مییابد.
چگونه یک پایگاه داده با روابط یک به چند طراحی کنیم
برای اجرای یک رابطه یک به چند در جدول معلمان و دورهها، جداول را به دو قسمت تقسیم کرده و با استفاده از یک کلید خارجی به هم پیوند دهید.
در اینجا، ستون دوره را در جدول معلمان حذف کردیم:
معلم_ID | معلم_نام |
---|---|
Teacher_001 | کارمن |
Teacher_002 | ورونیکا |
Teacher_003 | خورخه |
و اینجا جدول دوره ها است. توجه داشته باشید که کلید خارجی آن، Teacher_ID، یک دوره آموزشی را در جدول معلمان به معلم پیوند می دهد:
Course_ID | نام_دوره | Teacher_ID |
---|---|---|
دوره_001 | زیست شناسی | Teacher_001 |
دوره_002 | ریاضی | Teacher_001 |
دوره_003 | انگلیسی | Teacher_003 |
ما با استفاده از یک کلید خارجی رابطه ای بین معلمان و جدول دوره ها ایجاد کرده ایم. این ترتیب به ما می گوید که کارمن هم زیست شناسی و هم ریاضی را تدریس می کند و خورخه انگلیسی تدریس می کند.
ما میتوانیم ببینیم که چگونه این طراحی از هر گونه افزونگی احتمالی جلوگیری میکند، به معلمان منفرد اجازه میدهد چندین دوره را تدریس کنند، و یک رابطه یک به چند را پیادهسازی میکند.