اجتناب از وابستگی های انتقالی به منظور کمک به عادی سازی
وابستگی گذرا در یک پایگاه داده، یک رابطه غیرمستقیم بین مقادیر در همان جدول است که باعث وابستگی کارکردی می شود . برای دستیابی به استاندارد عادی فرم سوم عادی (3NF)، شما باید هر وابستگی گذرا را حذف کنید.
طبیعتا وابستگی پیوندی به سه یا چند ویژگی (یا ستونهای پایگاه داده) نیاز دارد که وابستگی کارکردی بین آنها را داشته باشد، به این معنی که ستون A در یک جدول با ستون B از طریق ستون میانماری C متکی است.
بیایید ببینیم چگونه این ممکن است کار کند.
مثال وابستگی گذرا
AUTHORS
نویسنده_ID | نویسنده | کتاب | نویسنده نوشتار |
---|---|---|---|
Auth_001 | اورسون اسکات کارت | بازی اندر | ایالات متحده |
Auth_001 | اورسون اسکات کارت | بازی اندر | ایالات متحده |
Auth_002 | مارگارت اتوود | داستان خنده دار | کانادا |
در مثال AUTHORS در بالا:
- کتاب → نویسنده : در اینجا، ویژگی کتاب، مشخصه Author را تعیین می کند. اگر نام کتاب را می دانید، می توانید نام نویسنده را بیاموزید. با این حال، نویسنده کتاب را تعیین نمی کند، زیرا نویسنده می تواند چندین کتاب را بنویسد. به عنوان مثال، فقط به این دلیل که ما نام نویسنده ی اورسون اسکات کارت را می دانیم، هنوز نام کتاب را نمی دانیم.
- نویسنده → نگاشته شدن نویسنده : به همین ترتیب، ویژگی نویسنده به عنوان Author_Nationality را تعیین می کند ، اما در عوض؛ فقط به این دلیل که ما می دانیم ملیت به این معنا نیست که ما می توانیم نویسنده را تعیین کنیم.
اما این جدول یک وابستگی گذرا را معرفی می کند:
- کتاب → نویسنده_نیقت: اگر ما نام کتاب را می دانیم، می توانیم از طریق ستون نویسنده، ملیت را تعیین کنیم.
اجتناب از وابستگی های انتقالی
برای اطمینان از فرم سوم عادی، بیایید وابستگی گذرا را حذف کنیم.
ما می توانیم با حذف ستون کتاب از جدول نویسندگان و ایجاد یک جدول جداگانه کتاب شروع کنیم:
کتاب ها
Book_ID | کتاب | نویسنده_ID |
---|---|---|
Book_001 | بازی اندر | Auth_001 |
Book_001 | کودکان ذهن | Auth_001 |
Book_002 | داستان خنده دار | Auth_002 |
AUTHORS
نویسنده_ID | نویسنده | نویسنده نوشتار |
---|---|---|
Auth_001 | اورسون اسکات کارت | ایالات متحده |
Auth_002 | مارگارت اتوود | کانادا |
آیا این را حل کرد؟ اکنون وابستگی ما را بررسی کنید:
جدول کتابها :
- Book_ID → کتاب: کتاب بستگی به Book_ID دارد .
- هیچ وابستگی دیگری در این جدول وجود ندارد، بنابراین ما درست میگوییم. توجه داشته باشید که کلید خارجی Author_ID این جدول را به جدول AUTHORS از طریق کلید اصلی Author_ID پیوند می دهد . ما یک رابطه برای جلوگیری از وابستگی گذرا، یک طرح کلیدی پایگاه های اطلاعاتی رابطه ای ایجاد کرده ایم.
جدول AUTHORS :
- Author_ID → نویسنده: نویسنده بستگی به Author_ID دارد .
- نویسنده → نگارش نویسنده : ملیت را می توان توسط نویسنده تعیین کرد.
- Author_ID → Author_Nationality: ملیت را می توان از Author_ID از طریق ویژگی Authors تعیین کرد. ما هنوز یک وابستگی گذرا داریم
ما باید یک جدول سوم برای عادی کردن این داده ها اضافه کنیم:
کشورها
Country_ID | کشور |
---|---|
Coun_001 | ایالات متحده |
Coun_002 | کانادا |
AUTHORS
نویسنده_ID | نویسنده | Country_ID |
---|---|---|
Auth_001 | اورسون اسکات کارت | Coun_001 |
Auth_002 | مارگارت اتوود | Coun_002 |
حالا ما سه جدول داریم، با استفاده از کلید های خارجی برای پیوند بین جداول:
- کلید خارجی کتاب جدول کتابخانه Author_ID یک کتاب را به یک نویسنده در جدول AUTHORS لینک می کند.
- کلید خارجی AUTHORS table Country_ID یک نویسنده را به یک کشور در جدول COUNTRIES پیوند میدهد.
- جدول COUNTRIES هیچ کلیدی خارجی ندارد زیرا نیازی به پیوند به جدول دیگری در این طرح نیست.
چرا وابستگی های پیوندی طراحی نامناسب بانک ها است
ارزش اجتناب از وابستگی های پیوندی برای کمک به اطمینان از 3NF چیست؟ بگذارید اولین جدول ما را دوباره بررسی کنیم و مسائل ایجاد کنیم:
AUTHORS
نویسنده_ID | نویسنده | کتاب | نویسنده نوشتار |
---|---|---|---|
Auth_001 | اورسون اسکات کارت | بازی اندر | ایالات متحده |
Auth_001 | اورسون اسکات کارت | کودکان ذهن | ایالات متحده |
Auth_002 | مارگارت اتوود | داستان خنده دار | کانادا |
این نوع طراحی می تواند ناهنجاری های داده ها و ناسازگاری ها را به همراه داشته باشد.
- اگر شما دو کتاب "کودکان ذهن" و "بازی اندر" را حذف کردید، نویسنده "اورسون اسکات کارت" و ملیت خود را از پایگاه داده حذف کنید.
- شما نمی توانید یک نویسنده جدید را به پایگاه داده اضافه کنید، مگر اینکه یک کتاب هم اضافه کنید اگر نویسنده هنوز منتشر نشده باشد یا نام کتابی که نویسنده آن را ندیده اید، چه می شود؟
- اگر "اورسون اسکات کارت" شهروندی خود را تغییر داد، شما مجبورید آن را در تمام پرونده هایی که در آن به نظر می رسد تغییر دهید. داشتن سوابق چندگانه با همان نویسنده می تواند به داده های نادرست منجر شود: اگر فرد ورود اطلاعات متوجه نشده است سوابق متعدد برای او وجود دارد و داده ها را تنها در یک رکورد تغییر می دهد؟
- شما نمی توانید یک کتاب مانند "داستان نابینا" را حذف کنید بدون اینکه نویسنده را به طور کامل حذف کنید.
اینها فقط به دلایلی هستند که باعث عادی سازی و اجتناب از وابستگی های گذرا، محافظت از داده ها و اطمینان از ثبات می شود.