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