- יחס יהיה ב-3NF אם הוא ב-2NF ואינו מכיל תלות חלקית טרנזיטיבית.
- 3NF משמש להפחתת כפילות הנתונים. הוא משמש גם כדי להשיג את שלמות הנתונים.
- אם אין תלות טרנזיטיבית לתכונות שאינן ראשוניות, היחס חייב להיות בצורה נורמלית שלישית.
יחס הוא בצורה נורמלית שלישית אם הוא מקיים לפחות אחד מהתנאים הבאים עבור כל תלות פונקציה לא טריוויאלית X → Y.
- X הוא מפתח על.
- Y הוא תכונה ראשונית, כלומר, כל רכיב של Y הוא חלק ממפתח מועמד כלשהו.
דוגמא:
שפה גרובי
טבלה EMPLOYEE_DETAIL:
EMP_ID | EMP_NAME | EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|---|---|
222 | לְהָצִיק | 201010 | לְמַעלָה | נוידה |
333 | סטפן | 02228 | לָנוּ | בוסטון |
444 | ו | 60007 | לָנוּ | שיקגו |
555 | קתרין | 06389 | בְּרִיטַנִיָה | נוריץ' |
666 | ג'ון | 462007 | MP | בופל |
מפתח סופר בטבלה למעלה:
{EMP_ID}, {EMP_ID, EMP_NAME}, {EMP_ID, EMP_NAME, EMP_ZIP}....so on
מפתח המועמד: {EMP_ID}
תכונות שאינן ראשוניות: בטבלה הנתונה, כל התכונות מלבד EMP_ID אינן ראשוניות.
כאן, EMP_STATE ו-EMP_CITY תלויים ב-EMP_ZIP ו-EMP_ZIP תלויים ב-EMP_ID. התכונות הלא ראשוניות (EMP_STATE, EMP_CITY) תלויות באופן טרנזיטיבי במפתח העל (EMP_ID). זה מפר את הכלל של צורה נורמלית שלישית.
לכן אנחנו צריכים להעביר את ה-EMP_CITY וה-EMP_STATE לטבלה החדשה, עם EMP_ZIP כמפתח ראשי.
צומת רשימת java
טבלת עובדים:
EMP_ID | EMP_NAME | EMP_ZIP |
---|---|---|
222 | לְהָצִיק | 201010 |
333 | סטפן | 02228 |
444 | ו | 60007 |
555 | קתרין | 06389 |
666 | ג'ון | 462007 |
טבלת EMPLOYEE_ZIP:
EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|
201010 | לְמַעלָה | נוידה |
02228 | לָנוּ | בוסטון |
60007 | לָנוּ | שיקגו |
06389 | בְּרִיטַנִיָה | נוריץ' |
462007 | MP | בופל |