כאשר עובדים עם מסדי נתונים, זה נפוץ להיתקל בבעיות כמו נתונים מיותרים ועדכונים לא עקביים. הצורה הנורמלית השנייה היא שלב בנירמול מסדי נתונים הבנויה על הצורה הנורמלית הראשונה (1NF) במטרה ליצור טבלאות נקיות ויעילות יותר.
הבנת 2NF היא קריטית לכל מי שעובד בעיצוב מסדי נתונים או בניהול נתונים, והיא מהווה את הבסיס לצורות נירמול גבוהות יותר כמו הצורה הנורמלית השלישית (3NF). במאמר זה, נחקור כיצד 2NF פועלת וכיצד ניתן להמיר טבלאות כדי לעמוד בדרישות 2NF, עם דוגמאות מעשיות. נדבר גם על היתרונות והחסרונות של 2NF, ועל מקרי השימוש שהיא מתאימה להם ביותר.
הבנת הצורה הנורמלית השנייה
הצורה הנורמלית השנייה היא שלב בנירמול מסדי נתונים המתמקד בהסרת תלות חלקית. היא הוצגה על ידי אדגר פ. קוד, חלוץ מסדי הנתונים היחסיים, כחלק מעבודתו על נירמול.
לפני שטבלה יכולה להיות ב-2NF, היא חייבת לעמוד בכללים של הצורה הנורמלית הראשונה:
- אטומיות: כל תא חייב להכיל ערך אחד בלבד (ללא קבוצות חוזרות או מערכים).
- שורות ייחודיות: הטבלה חייבת לכלול מפתח ראשי ברור.
2NF צועד צעד נוסף עם כלל נוסף: להעלים תלות חלקית.
תלות חלקית מתרחשת כאשר מאפיין שאינו ראשי (עמודה שאינה חלק מהמפתח המועמד) תלוי רק בחלק ממפתח מורכב במקום בכל המפתח. הכלל של 2NF מבטיח שכל המאפיינים שאינם ראשיים תלויים במפתח הראשי המלא, ולא רק בחלק ממנו. השארת תלות חלקית בטבלה פירושה שהנתונים החוזרים יכולים להיכנס למסד הנתונים, מה שיכול להוביל לאי-יעילות ואי-סדר פוטנציאלי במהלך עדכונים או מחיקות.
התיאוריה לבדה יכולה להיות קצת יבשה, אז בואו נסתכל על דוגמה מעשית.
להלן טבלת רישום לקורסים של תלמידי Datacamp.
Student ID | Course ID | Course Name | Instructor Name |
---|---|---|---|
1001 | 201 | יסודות SQL | קן סמית' |
1002 | 202 | מבוא לפייתון | מרלין או’דונל |
1001 | 202 | מבוא לפייתון | מרלין או’דונל |
כאן, המפתח הראשי הוא הקומפוזיט של מזהה תלמיד ושל מזהה קורס. אף על פי כן, המאפיינים שאינם ראשיים שם הקורס ו- תשלום עבור הקורס תלויים רק ב-מזהה הקורס, ולא במפתח בשלמותו. זה פוגע ב-2NF.
שלבים לפירוש טבלאות כדי להשיג 2NF
כדי לוודא שטבלה עוקבת אחר כללי 2NF, עליך:
- זהות את כל מפתחות המועמד: לזהות את קבוצות המאפיינים המינימליות שמזהים באופן ייחודי שורות בטבלה. אלו הם מפתחות המועמד שלך.
- לזהות תלותי פונקציות: לזהות את כל תלותי הפונקציות בטבלה. במיוחד, יש לחפש תלותי פונקציות בהם מאפיינים לא פריים (אלו שאינם חלק מכל מפתח מועמד) תלויים רק בחלק ממפתח מרכיבי.
- מחק תלות חלקית: לכל תלות חלקית:
- העבר את המאפיינים התלויים לטבלה חדשה יחד עם חלק מהמפתח שעליו הם תלויים.
- ודא שהטבלה החדשה כוללת מפתח ראשי ייחודי.
- חזור עד שלא יישארו תלות חלקיות: אשר שכל מאפיין שאינו ראשי בכל הטבלאות תלוי לחלוטין במפתח הראשי המתאים שלו.
דוגמאות של צורת נורמה שנייה בפועל
בואו נסתכל עכשיו על שתי דוגמאות.
דוגמה 1: טבלת רישום לקורס
בכיתה הקודמת, ראינו את טבלת ההרשמה לקורסים הבאה:
Student ID | Course ID | Course Name | Instructor Name |
---|---|---|---|
1001 | 201 | יסודות SQL | קן סמית |
1002 | 202 | מבוא ל-Python | מרלין אודונל |
1001 | 202 | מבוא ל-Python | מרלין אודונל |
בואו נעקוב אחר השלבים שציינו בסעיף הקודם.
1. זהה את המפתח המועמד שלנו.
במקרה זה, מפתח המועמד הוא מפתח מרוכב של מזהה תלמיד ו מזהה קורס. השילוב הייחודי הזה מזהה כל שורה בטבלה.
2. לקבוע את התלותים הפונקציונליות שלנו
שם הקורס ו שם המדריך תלויים ב-מזהה הקורס, ולא במפתח הרכיב המלא (מזהה הסטודנט, מזהה הקורס). זהו תלות חלקית מאחר ואלה המאפיינים תלויים רק בחלק מהמפתח הרכיב.
3. להסיר תלותים חלקיות
אנו צריכים להעביר את המאפיינים שתלותם רק בחלק מהמפתח (שם הקורס ו-שם המדריך) לטבלה חדשה שמבוססת רק על מזהה הקורס.
לאחר הפירוק, הטבלאות החדשות שלנו נראות כך:
טבלת הרשמה לקורסים
Student ID | Course ID |
---|---|
1001 | 201 |
1002 | 202 |
1001 | 202 |
טבלת פרטי הקורס
Course ID | Course Name | Instructor Name |
---|---|---|
201 | יסודות SQL | קן סמית |
202 | מבוא לפייתון | מרלין אודונל |
אם ברצונך להתנסות וליצור בעצמך מסדי נתונים, תבחן את קורס ה־PostgresQL שלנו. אם אתה מתקדם קצת יותר, תוכל לנסות את ה־מבוא לעיצוב נתונים ב-Snowflake, שמכסה רעיונות כמו ייחודיות-יחסים ועיצוב ממדי.
דוגמה 2: טבלת הזמנות
נתחיל עם טבלת ההזמנות הזו. תנסה לעקוב אחר השלבים שציינו למעלה ולפרק את הטבלה בעצמך!
Order ID | Product ID | Order Date | Product Name | Supplier Name |
---|---|---|---|---|
1 | 201 | 2024-11-01 | Laptop | TechSupply |
1 | 202 | 2024-11-01 | Mouse | TechSupply |
2 | 201 | 2024-11-02 | Laptop | TechSupply |
3 | 203 | 2024-11-03 | Keyboard | KeyMasters |
1. זהה את המפתח המועמד שלנו
המספר הזמנה ומספר מוצר משולבים מייחדים כל שורה, מה שמקנה (מספר הזמנה, מספר מוצר) מפתח מועמד מורכב. לא ניתן לזהות שורות באופן ייחודי על ידי עמודה אחת בלבד מכיוון ש:
- מזהה הזמנהלבדו אינו ייחודי, מאחר ומספר מוצרים יכולים להיות חלק מהזמנה אחת.
- מזהה מוצרלבדו אינו ייחודי, מאחר ואותו מוצר יכול להופיע בהזמנות שונות.
זה אומר ש- (מזהה הזמנה, מזהה מוצר) הוא גם המפתח הראשי שלנו.
2. לקבוע את התלות התכונתית שלנו
תאריך ההזמנה תלוי ב- מזהה ההזמנה (ולא על המפתח הרכיבי המלא). זהו תלות חלקית.
שם המוצר ו- שם הספק תלויים ב- מזהה המוצר (לא במפתח הרכיב המלא). אלו תלויויות חלקיות גם
3. להסיר תלויויות חלקיות
אנו צריכים לפצל את הטבלה לטבלאות קטנות יותר, כל אחת טופסת תלות לוגית אחת.
תחילה, ניצור טבלה עבור מידע הזמנה, שמכילה מידע ספציפי ל מזהה ההזמנה .
טבלת הזמנות
Order ID | Order Date |
---|---|
1 | 2024-11-01 |
2 | 2024-11-02 |
3 | 2024-11-03 |
לאחר מכן, ניצור טבלה המכילה מידע ספציפי ל מזהה המוצר .
טבלת הזמנות
Product ID | Product Name | Supplier Name |
---|---|---|
201 | Laptop | TechSupply |
202 | Mouse | TechSupply |
203 | Keyboard | KeyMasters |
הטבלה המקורית נמוכתה כעת למפתח המרכזי וליחסים בין הזמנות ומוצרים.
Order ID | Product ID |
---|---|
1 | 201 |
1 | 202 |
2 | 201 |
3 | 203 |
כעת, בסיס הנתונים שלנו נמצא ב-2NF מכיוון ש 1) כל התלותים החלקיות נעלמו, ו-2) התלותיות בתכונות לא ראשיות תלויות לחלוטין במפתחות הראשיים המתאימים.
מתי ליישם את הצורה הקנונית השנייה
לכן, למה כדאי לך לבצע ריפקטור למסד הנתונים שלך ל-2NF? האם זה מספיק לבד או שכדאי לך לקחת צעד נוסף ולהכווין ל-3NF?
יתרונות ומגבלות של הצורה התקנית השנייה
הצורה התקנית השנייה מציעה מספר יתרונות, ובכך מהווה צעד שימושי בתהליך ההכלה התקנית של מסד הנתונים:
- שיפור אינטגריטיות הנתונים: על ידי הסרת תלות חלקית, ה-2NF מקטין אנומליות בהכנסה, עדכון ומחיקה, מה שמביא למסד נתונים יותר אמין.
- הפחתת חזריות: ה-2NF מפחית חזריות נתונים, ממזער את שימוש באחסון ומפשט את תחזוקת הנתונים.
- מבנה נתונים משופר: הוא מניח את היסוד לנורמליזציה נוספת, כמו התקדמות לצורת נורמל השלישית, על ידי יצירת עיצוב בסיס נתונים נקי ויעיל יותר.
אבל יש לו גם כמה מגבלות:
- הגברת המורכבות: פירוק טבלאות כדי לעמוד בדרישות 2NF יכול להפוך את תהליך העיצוב למורכב יותר, במיוחד כאשר מתמודדים עם מפתחות מורכבים ותלותיות.
- הצטרפויות נוספות: פיצול טבלאות עשוי לדרוש הצטרפויות נוספות בשאילתות, שעשויות להשפיע על ביצועים במערכות עם מערכות נתונים גדולות או שאילתות מורכבות – נוסף לכך להלן.
- ריבויות נותרות: בעוד 2NF יוריד תלות חלקית, הוא אינו טופל בתלותים טרנזיטיביות, משאיר ריבויות קיימות עד שיטופל ב-3NF.
שיקולים ביצועים עם הצורה התקנית השנייה
פירוק טבלאות כדי להסיר תלות חלקית יכול לשפר ישירות את ביצועי בסיס הנתונים. מצד אחד, השגת צורת צורה נורמלית שנייה (2NF) יכולה להפחית כפילויות נתונים ולשפר עקביות, מה שמביא לפחות אנומליות במהלך פעולות ההכנסה, העדכון או המחיקה. מצד שני, נורמליזציה יכולה להגדיל את מספר הטבלאות, מה שאומר שחייבים לבצע עוד חיבורים (joins) כאשר משיגים נתונים קשורים. זה עשוי להשפיע על ביצועי השאילתות במערכות מידע גדולות.
כדי לוודא שבסיס הנתונים שלך שנורמל אשר יישמר, וודא שאתה עוקב אחר הפרקטיקות הבריאות הבאות:
- אינדקסים: השתמש באינדקסים כדי להאיץ חיבורים בין טבלאות שנפרקו.
- אופטימיזציה של שאילתות: אופטימיזציה של שאילתות על מנת למזער את עלות ההצטרפויות הנוספות.
- גישה היברידית: שלב בין נורמליזציה ודינורמליזציה באזורים בהם ביצועים חשובים, כגון טבלאות דיווחים.
- מעקב קבוע: לבצע מעקב קבוע של ביצועי בסיס הנתונים שלך באמצעות כלים לפרופילינג כדי לזהות בעיות פוטנציאליות.
האם 2NF הוא רק שלב מעברי להשגת צורת תקן שלישית?
ברוב המקרים, מעצבי מסדי נתונים שואפים להשיג את הנורמה השלישית (3NF) בשל יכולתה להפחית עוד יותר את השכפול ולשפר את שלמות הנתונים הכוללת. עם זאת, השגת 3NF כרוכה לעיתים בעבודה נוספת, כגון יצירת טבלאות ומערכות יחסים נוספות, דבר שיכול להציג מורכבות ופגיעות בביצועים בעת ביצוע שאילתות.
ישנם מקרים שבהם השימוש בנורמה השנייה (2NF) לבד יכול להיות מספיק. אם פשטות ויישום מהיר הם בעדיפות, כמו בפרויקטים בקנה מידה קטן, אב טיפוס, או מצבים שבהם השכפול של הנתונים הוא מינימלי, 2NF יכולה להספיק. לדוגמה, במערכות שבהן כל המאפיינים כבר תלויים לחלוטין על מפתח ראשי פשוט, השגת 2NF עשויה למלא את המטרה הראשית של הפחתת תלות חלקית, ללא צורך בנורמליזציה נוספת.
לעבור מעבר לנורמה השנייה: לקראת הנורמה השלישית
אם אתה רוצה לנרמל את מסד הנתונים שלך עוד יותר, אתה יכול להמשיך לשפר את הטבלאות שלך כדי להגיע לנורמה השלישית.
3NF מתבססת על 2NF על ידי טיפול ב- תלות טרנסיטיביות – מצבים שבהם מאפיינים שאינם מפתח תלויים במאפיינים אחרים שאינם מפתח ולא במפתח הראשי. התקדמות זו מבטיחה שכל מאפיין תלוי ישירות במפתח הראשי ולא במשהו אחר.
לדוגמה, בטבלה שעוקבת אחרי רישומי קורסים:
- 2NF: מבטיח שמאפיינים כמו שם הקורס ושם התלמיד תלויים לחלוטין במפתחות הראשיים המתאימים שלהם (לדוגמה, מזהה תלמיד ו- מזהה קורס). זה מסיר תלות חלקית, שבה מאפיינים שאינם מפתח תלויים רק בחלק מהמפתח הרכיבי.
- 3NF: מבטיח שמאפיינים כמו פרטי מדריך או פרטי מחלקה מאוחסנים בטבלאות נפרדות, מבטל תלותים טרנזיטיביות.
3NF היא אידיאלית עבור מערכות מורכבות יותר שבהן תקינות הנתונים ויעילותם הם עיקריים, במיוחד כאשר כמות הנתונים גדלה. בדוק את מאמר מהו צורת נורמלית שלישית? שלנו אם ברצונך ללמוד עוד על 3NF ועל צורתה המוגבלת יותר, BCNF.
סיכום
הצורה הנורמלית השנייה היא שלב חיוני בנורמליזציה של בסיס נתונים, חוף למעבר בין 1NF וצורות גבוהות יותר כמו 3NF. על ידי הסרת תלותיות חלקית, 2NF מפחיתה חזרות ומשפרת את אמינות הנתונים שלך. בזמן שהיא יכולה להוסיף מעט מורכבות, היתרונות של תקינת נתונים משופרת ותחזוקה פשוטה הופכים אותה לחלק בלתי נפרד מעיצוב בסיס נתונים יעיל.
אם אתה מוכן לקחת את הכישורים שלך קדימה, חקור את קורס ה-עיצוב מסד נתונים שלנו כדי להapproach עמוק יותר של טכניקות נורמליזציה ויישומיהן המעשיים. תוכל גם לאמת את כישורי ה- SQL וניהול מסדי הנתונים שלך ולהראות את המומחיות שלך למעסיקים פוטנציאליים בעזרת תעודת הסמכת אסוציאט SQL!
לבסוף, אני רוצה לומר, אם אתה אדם החלטה בעסק ואתה יודע שיש לך עבודה לעשות ביצירת מסדי נתונים נקיים יותר ויעילים יותר, שקול להגיש בקשת הדגמה של DataCamp for Business . אנו יכולים לעזור לשדרג את יכולות הצוות שלך כך שתוכל ליצור מערכות מסד נתונים נפילות המובילות ליעילות עסקית וחדשנות. אנו יכולים אף ליצור נתיבי למידה מותאמים אישית ומסלולים מותאמים.
Source:
https://www.datacamp.com/tutorial/second-normal-form