לדלג לתוכן

מסד נתונים רלציוני מוסבר בפשטות - עם דוגמה שתבינו מהרגע הראשון

מסד נתונים רלציוני הוא המושג שהכי מפחיד מתחילים, ובצדק, כי הוא נשמע כמו משהו שלוקחים בפקולטה למתמטיקה. האמת היא שהרעיון פשוט בטירוף ברגע שרואים אותו בדוגמה אמיתית. במקום להסביר עם הגדרות אקדמיות, אני הולך לבנות אתכם דוגמה מוחשית שתסביר את כל הרעיון תוך חמש דקות.

הבעיה שמסד נתונים רלציוני פותר

תדמיינו שאתם בונים מערכת לניהול ספרייה. יש לכם ספרים, ויש לכם לקוחות שמשאילים ספרים. הגישה הנאיבית תהיה טבלה אחת ענקית עם עמודות כמו שם הספר, מחבר, שם השואל, טלפון של השואל, תאריך השאלה.

הבעיה מתחילה ברגע שאותו לקוח שואל ספר שני. עכשיו שם הלקוח והטלפון שלו מופיעים שוב, בשורה נפרדת. אם הלקוח מחליף מספר טלפון, צריך לעדכן את זה בכל שורה שבה הוא מופיע. תשכחו שורה אחת, ועכשיו יש לכם מידע סותר במערכת. זו בדיוק הבעיה שמסד נתונים רלציוני נולד כדי לפתור.

הפתרון - לפצל למספר טבלאות מקושרות

הרעיון המרכזי הוא לפצל את המידע לטבלאות נפרדות, כל אחת אחראית על סוג מידע אחד, ואז לקשר ביניהן.

בדוגמה של הספרייה, נבנה שלוש טבלאות:

  • טבלת ספרים - עם עמודות כמו מספר ספר, שם ומחבר.
  • טבלת לקוחות - עם עמודות כמו מספר לקוח, שם וטלפון.
  • טבלת השאלות - עם עמודות מספר ספר, מספר לקוח ותאריך השאלה.

שימו לב מה קרה. שם הלקוח והטלפון שלו נשמרים פעם אחת בלבד, בטבלת הלקוחות. טבלת ההשאלות לא חוזרת על המידע הזה, היא רק "מצביעה" על הלקוח דרך המספר שלו. עכשיו אם לקוח מחליף טלפון, מעדכנים שורה אחת בלבד, בטבלה אחת בלבד, וזהו.

מפתח ראשי ומפתח זר - שני המושגים שכדאי להכיר

כדי שהקישור הזה יעבוד, יש לכל טבלה עמודה שנקראת מפתח ראשי - ערך ייחודי שמזהה כל שורה בוודאות, כמו מספר תעודת זהות. בטבלת הלקוחות, מספר הלקוח הוא המפתח הראשי. אין שני לקוחות עם אותו מספר.

בטבלת ההשאלות, העמודה "מספר לקוח" נקראת מפתח זר - היא לא מזהה שורה בטבלה הזאת, אלא מצביעה על מפתח ראשי בטבלה אחרת. זו בדיוק המחברת שמקשרת בין הטבלאות, וזה כל הסוד של מודל רלציוני.

איך שולפים מידע מכמה טבלאות ביחד

כאן נכנסת שפת ה-SQL. כדי לדעת אילו ספרים לקוח מסוים השאיל, לא צריך לחפש ידנית בכל טבלה. כותבים שאילתה אחת שמבצעת מה שנקרא JOIN - חיבור בין טבלאות לפי המפתח המשותף. משהו כמו "תביא לי את כל השורות בטבלת ההשאלות, תחבר אותן לטבלת הלקוחות לפי מספר לקוח, ותסנן רק את הלקוח דוד". מנוע מסד הנתונים עושה את החיבור הזה במהירות מטורפת, גם כשמדובר במיליוני שורות.

למה בכלל קוראים לזה "רלציוני"

המילה "רלציה" פה לא מתייחסת לקשרים בין טבלאות כמו שרוב האנשים חושבים, אלא לטבלה עצמה - במקור המתמטי של המושג, "relation" זה פשוט שם אחר לטבלה. אבל בפועל, כשמדברים על מסד נתונים רלציוני, הכוונה היא בדיוק למודל הזה - נתונים מאורגנים בטבלאות, עם קשרים ביניהן דרך מפתחות. PostgreSQL, MySQL ו-SQL Server הן כולן דוגמאות למערכות שמיישמות את המודל הזה.

למה זה שווה להשקיע בו זמן

ברגע שמבינים איך לפצל נתונים לטבלאות נכון ולקשר ביניהן, כל מערכת תוכנה נראית אחרת. זה לא רק ידע תיאורטי, זה בדיוק מה שעומד מאחורי כל אתר איקומרס, כל אפליקציית בנקאות וכל מערכת CRM שאתם מכירים.

בקורס צד-שרת אנחנו בונים את כל המודל הזה מאפס, כולל תכנון טבלאות אמיתי וכתיבת שאילתות SQL, עד שזה הופך לטבעי לגמרי.

יש לכם שאלות בדרך? יש קהילה שלמה שיכולה לעזור.

הצטרפו לקהילה בדיסקורד