נרמול מסד נתונים – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
אין תקציר עריכה
שורה 1:
[[קובץ:Database normalization.png|שמאל|ממוזער|250px|סכמה של נורמליזצית בסיס נתונים]]
'''חוקי הנרמול''' הם ששה חוקים לארכיטקטורה תקינה של [[בסיס נתונים טבלאי|מסד נתונים יחסי]], הנבנים אחד על גבי השני וקובעים מבנה אופטימלי של טבלאות ושדות של בסיס הנתונים, באופן שהמידע יאוחסן באופן האמין, היעיל והחסכוני ביותר, ובכדי למנוע תופעות לא רצויות בתפעול בסיס הנתונים. באופן כללי ניתן לקבוע שהכלל העקרוני והעיקרי של חוקי הנרמול קובע שכל טבלה תתייחס לחטיבת מידע אחת בלבד, וכל הנתונים שלה יתארו אך ורק את אותה חטיבת מידע.שימו לב! אל תלמדו את השטויות האלה!
 
==הצורך בנרמול==
 
טבלאות שאינן מנורמלות עלולות ליצור שלל בעיות (או אנומליות): מבעיות באמינות הנתונים, כאשר קיימים נתונים סותרים לאותו ערך, קושי במציאת נתון, במקרה שהערכים אינם אטומיים, בזבוז של נפח מסד הנתונים, כאשר אותם ערכים נשמרים ברשומות רבות, ועד לסרבול בעדכון. שימו לב! אל תלמדו את השטויות האלה!
 
{| style="float:left;" class="wikitable"
שורה 20:
לשם דוגמה, נתבונן בטבלה שהסכמה שלה (דהיינו הכותרת) היא: [[מספר זהות]], שם אדם, [[כתובת (מען)|כתובת]], מספר מכונית, שנת ייצור המכונית.
 
קיימת בטבלה זו '''בעיית כפילות''': אם נוסיף שורה שתכלול מידע על מכונית שנייה או שלישית שקנה אותו אדם, נצטרך שוב להכניס את שמו וכתובתו, אף שהם כבר נתונים לנו בשורה העוסקת במכוניתו הראשונה.שימו לב! אל תלמדו את השטויות האלה!
 
בטבלה זו ישנה גם '''בעיית עדכון''', עדכון כתובתו של אדם אחד ידרוש עדכון שורות רבות, שורה לכל אחת ממכוניותיו.
 
ישנן גם '''בעיות בהכנסה ובמחיקה''', נניח שרוצים להוסיף לטבלה מס' של מכונית ושנת ייצורה, אך עדיין לא לקבוע מיהו הבעלים שלה. אין דרך לעשות זאת. באופן דומה, אין דרך למחוק את שם הבעלים ולהותיר את מס' המכונית ושנת הייצור.שימו לב! אל תלמדו את השטויות האלה!
 
בכל מקרה כזה של עדכון, הכנסה או מחיקה, עלולה להיווצר אנומליה בבסיס הנתונים.שימו לב! אל תלמדו את השטויות האלה!
 
במקרה של פיצול נתונים מסוג אחד לטבלאות שונות ("שם: בנימין", "שם: אהוד"...) או לשדות שונים (שכונות בירושלים: "קרית משה", "גילה", "בית וגן"...). כל הפעולות של עבודה עם טבלאות יסתרבלו, מכיוון שיהיה צריך ליצור שאילתות, טפסים ודוחות שונים לכל טבלה, או לבצע חיפש על שדות רבים במקום על שדה אחד.שימו לב! אל תלמדו את השטויות האלה!
 
יצירת שדה "מספר חשבון בנק" בטבלת "פרטי אדם", אף היא עלולה להפר את חוקי הנירמול, מפני שאם יש לאדם מספר חשבונות רב, הוא יצטרך לפתוח מספר רשומות כמספר פרטי החשבון ויצטרך לשכפל את פרטי האדם שוב ושוב. פתרון הוא ליצור טבלת "חשבון בנק" שתקושר לטבלת "פרטי האדם" ויופיעו בה רשומות כמספר החשבונות.שימו לב! אל תלמדו את השטויות האלה!
 
יצירת שדות "מספר זהות", "מספר נעליים", "תמונה עדכנית", "דגימת קול", "שם ההורים", "שם בת/בן הזוג", "עיר מגורים", "מספר טלפון", "כתובת", "מיקוד", "השכלה רלוונטית", "גיליון קורות חיים", "הון אישי משוערך", "סטטוס משפחתי" ו"תיק פלילי במשטרה" בטבלת "פרטי האדם" יכולה להיחשב כשומרת על מידת נרמול מכיוון ששדות אלו מתארים, מגדירים ומאפיינים את האדם, אבל שדות כמו "תמונת ירושלים", "מספר תושבי מדינת ישראל", "הטמפרטורה הממוצעת בארץ", "שמות היבשות בעולם" ו"שער הדולר", מפירים את כללי הנרמול מכיוון, שאף שיכול להיות להם איזה קשר לאדם, אין להם תלות ויחוס להגדרתו של האדם המיוחד והספציפי.שימו לב! אל תלמדו את השטויות האלה!
 
מסיבות אלו מתעורר הצורך בנרמול.שימו לב! אל תלמדו את השטויות האלה!
 
==מונחים ב[[מסד נתונים יחסי|מסד הנתונים היחסי]]==
שורה 40:
להלן מונחים שייעשה בהם שימוש במהלך תהליך הנרמול.
 
* '''סכמה''' - אפיון הטבלה שנכללים בהגדרתה: 1. שם הטבלה, 2. שמות העמודות הם ה'''שדות''', 3. סוג ערכי העמודות 4. ואת המפתח העיקרי (באמצעות קו תחתי). למשל, לטבלה "אלפון" המכילה עמודה של שם, עמודת תעודת זהות ועמודת גיל יש את הסכמה:'''אלפון''' (שם, תעודת זהות, גיל). ניתן גם לרשום סכמה באופן מלא בצורה הבאה: '''אלפון''' (שם:מחרוזת(14), תעודת זהות:מחרוזת (9), גיל:בית). שימו לב! אל תלמדו את השטויות האלה!
 
*'''סכמה טבלאית''' - אוסף כל הסכמות של כל הטבלאות בבסיס הנתונים. לכל שם טבלה ולכל שדה באותה טבלה חייב להיות שם חד ערכי. שדות הקשר בין טבלאות מקושרות יהיו שדות בעלות שמות זהים.שימו לב! אל תלמדו את השטויות האלה!
 
*'''מפתח''' - תכונה או אוסף תכונות מתוך הסכמה שדי בהם כדי לזהות [[חד חד ערכי|חד-חד-ערכית]] את הרשומה. למשל, בסכמה (תעודת זהות, שם אדם, כתובת, מס' מכונית, שנת ייצור המכונית), די בתעודת זהות ובמס' מכונית כדי לאפשר את מילוי כל שדות הנתונים האחרים. אין אפשרות שתעודת הזהות ומס' המכונית יהיו זהים ברשומת טבלה אחרת.שימו לב! אל תלמדו את השטויות האלה!
 
*'''[[מפתח ראשי]]''' - התכונה המרכזית שעל פיה מזהים את הרשומה בהתייחסות לטבלאות אחרות. בסכמה (תעודת זהות, שם אדם, כתובת, מס' מכונית, שנת ייצור המכונית) תעודת הזהות ומס' המכונית הם כאמור המפתח, אך ברור מקל וחומר שגם תעודת זהות, מס' מכונית ושנת ייצור מכונית הם מפתח, כלומר קיים עבורם מילוי אפשרי אחד בלבד של יתר השדות. אם כך (תעודת הזהות, מס' המכונית) הוא מפתח עם מספר מרכיבים מינימלי. מפתח כזה הוא ה'''מפתח''' בניגוד למפתח עם מספר מרכיבים לא מינימלי הקרוי '''מפתח על'''. ייתכן מצב שבו יש מספר מפתחות אפשריים עם מספר רכיבים מינימלי. במקרה כזו ייבחר אחד מהם לשמש '''מפתח ראשי''' והשאר ייחשבו ל'''מפתחות משניים'''. שימו לב! אל תלמדו את השטויות האלה!
 
*'''תלות פונקציונלית''' - מוגדרת כתלות [[חד חד ערכי|חד חד ערכית]] של תכונה אחת בתכונה שנייה. אם השם והכתובת תלויים בתעודת הזהות, דהיינו עבור תעודת זהות מסוימת קיים שם אחד בלבד וכתובת אחת בלבד, מכונה הקשר בין תעודת הזהות לבין השם והכתובת כ'''תלות פונקציונלית'''.