روابط یک به چند در پایگاه داده

ارتباط یک به یک در یک پایگاه داده زمانی اتفاق می افتد که هر رکورد جدول 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

ما رابطه بین معلمان و جدول کلاسها با استفاده از یک کلید خارجی ایجاد کرده ایم.

این به ما می گوید که هر دو زیست شناسی و ریاضی توسط کارمن تدریس می شود و جورج زبان انگلیسی را می آموزد.

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

پایگاه های داده همچنین می توانند یک رابطه یک به یک و روابط بسیاری با بسیاری را پیاده سازی کنند.