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