- יחס יהיה ב-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 | בופל |