![]() |
|---|
| עבודה עם נתונים: מסדי נתונים יחסיים - סקצ'נוט מאת @nitya |
סביר להניח שהשתמשת בעבר בגליון אלקטרוני לאחסון מידע. היה לך סט של שורות ועמודות, כאשר השורות הכילו את המידע (או הנתונים), והעמודות תיארו את המידע (לעיתים נקרא מטא-נתונים). מסד נתונים יחסי בנוי על עיקרון הליבה הזה של עמודות ושורות בטבלאות, ומאפשר לך לפזר מידע על פני טבלאות מרובות. זה מאפשר לך לעבוד עם נתונים מורכבים יותר, להימנע מכפילויות, ולהיות גמיש בדרך שבה אתה חוקר את הנתונים. בוא נחקור את המושגים של מסד נתונים יחסי.
מסד נתונים יחסי מבוסס בליבו על טבלאות. בדיוק כמו בגליון אלקטרוני, טבלה היא אוסף של עמודות ושורות. השורה מכילה את הנתונים או המידע שאנו רוצים לעבוד איתו, כמו שם של עיר או כמות הגשמים. העמודות מתארות את הנתונים שהן מאחסנות.
בוא נתחיל את החקירה שלנו על ידי יצירת טבלה לאחסון מידע על ערים. נתחיל עם השם והמדינה שלהן. אפשר לאחסן זאת בטבלה כך:
| עיר | מדינה |
|---|---|
| טוקיו | יפן |
| אטלנטה | ארצות הברית |
| אוקלנד | ניו זילנד |
שים לב ששמות העמודות עיר, מדינה ואוכלוסייה מתארים את הנתונים המאוחסנים, וכל שורה מכילה מידע על עיר אחת.
סביר להניח שהטבלה למעלה נראית לך מוכרת יחסית. בוא נתחיל להוסיף נתונים נוספים למסד הנתונים המתפתח שלנו - כמות הגשמים השנתית (במילימטרים). נתמקד בשנים 2018, 2019 ו-2020. אם היינו מוסיפים את זה עבור טוקיו, זה היה נראה כך:
| עיר | מדינה | שנה | כמות |
|---|---|---|---|
| טוקיו | יפן | 2020 | 1690 |
| טוקיו | יפן | 2019 | 1874 |
| טוקיו | יפן | 2018 | 1445 |
מה אתה שם לב לגבי הטבלה שלנו? אולי תבחין שאנו משכפלים את שם העיר והמדינה שוב ושוב. זה יכול לתפוס הרבה מקום אחסון, וזה מיותר למדי שיהיו עותקים מרובים. אחרי הכל, לטוקיו יש רק שם אחד שמעניין אותנו.
אוקיי, בוא ננסה משהו אחר. נוסיף עמודות חדשות לכל שנה:
| עיר | מדינה | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| טוקיו | יפן | 1445 | 1874 | 1690 |
| אטלנטה | ארצות הברית | 1779 | 1111 | 1683 |
| אוקלנד | ניו זילנד | 1386 | 942 | 1176 |
בעוד שזה מונע שכפול שורות, זה מוסיף כמה אתגרים אחרים. נצטרך לשנות את מבנה הטבלה בכל פעם שיש שנה חדשה. בנוסף, ככל שהנתונים שלנו גדלים, היות השנים בעמודות יקשו על שליפה וחישוב ערכים.
זו הסיבה שאנו זקוקים לטבלאות מרובות ולקשרים ביניהן. על ידי פירוק הנתונים שלנו נוכל להימנע מכפילויות ולהיות גמישים יותר בדרך שבה אנו עובדים עם הנתונים.
בוא נחזור לנתונים שלנו ונחליט כיצד לחלק אותם. אנו יודעים שאנו רוצים לאחסן את השם והמדינה של הערים שלנו, אז זה כנראה יעבוד הכי טוב בטבלה אחת.
| עיר | מדינה |
|---|---|
| טוקיו | יפן |
| אטלנטה | ארצות הברית |
| אוקלנד | ניו זילנד |
אבל לפני שניצור את הטבלה הבאה, עלינו להבין כיצד להפנות לכל עיר. אנו זקוקים לצורת מזהה, ID או (במונחים טכניים של מסדי נתונים) מפתח ראשי. מפתח ראשי הוא ערך המשמש לזיהוי שורה ספציפית בטבלה. אמנם זה יכול להתבסס על ערך עצמו (אפשר להשתמש בשם העיר, למשל), אך כמעט תמיד זה צריך להיות מספר או מזהה אחר. איננו רוצים שהמזהה ישתנה כי זה יפגע בקשר. ברוב המקרים המפתח הראשי או ה-ID יהיה מספר שנוצר אוטומטית.
✅ מפתח ראשי מקוצר לעיתים קרובות כ-PK
| city_id | עיר | מדינה |
|---|---|---|
| 1 | טוקיו | יפן |
| 2 | אטלנטה | ארצות הברית |
| 3 | אוקלנד | ניו זילנד |
✅ תבחין שאנו משתמשים במונחים "id" ו"מפתח ראשי" לסירוגין במהלך השיעור הזה. המושגים כאן חלים גם על DataFrames, שתחקור מאוחר יותר. DataFrames אינם משתמשים במונח "מפתח ראשי", אך תבחין שהם מתנהגים באותה צורה.
עם יצירת טבלת הערים, בוא נאחסן את כמות הגשמים. במקום לשכפל את כל המידע על העיר, נוכל להשתמש ב-id. עלינו גם לוודא שלטבלה החדשה יש עמודת id גם כן, כי כל הטבלאות צריכות להכיל id או מפתח ראשי.
| rainfall_id | city_id | שנה | כמות |
|---|---|---|---|
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
שים לב לעמודת city_id בתוך טבלת כמות גשמים שנוצרה. עמודה זו מכילה ערכים שמפנים ל-IDs בטבלת ערים. במונחים טכניים של נתונים יחסיים, זה נקרא מפתח זר; זהו מפתח ראשי מטבלה אחרת. אפשר פשוט לחשוב על זה כהפניה או מצביע. city_id 1 מפנה לטוקיו.
Note
מפתח זר מקוצר לעיתים קרובות כ-FK
עם הנתונים שלנו מופרדים לשתי טבלאות, ייתכן שתתהה כיצד אנו שולפים אותם. אם אנו משתמשים במסד נתונים יחסי כמו MySQL, SQL Server או Oracle, נוכל להשתמש בשפה הנקראת שפת שאילתות מובנית או SQL. SQL (לעיתים נהגה "סקוול") היא שפה סטנדרטית המשמשת לשליפת ושינוי נתונים במסד נתונים יחסי.
כדי לשלוף נתונים משתמשים בפקודה SELECT. בליבה, אתה בוחר את העמודות שברצונך לראות מ הטבלה שבה הן נמצאות. אם רצית להציג רק את שמות הערים, תוכל להשתמש בפקודה הבאה:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- AucklandSELECT הוא המקום שבו אתה מפרט את העמודות, ו-FROM הוא המקום שבו אתה מפרט את הטבלאות.
Note
תחביר SQL אינו רגיש לאותיות רישיות, כלומר select ו-SELECT משמעותם זהה. עם זאת, בהתאם לסוג מסד הנתונים שבו אתה משתמש, ייתכן שהעמודות והטבלאות יהיו רגישות לאותיות. לכן, מומלץ תמיד להתייחס לכל דבר בתכנות כאילו הוא רגיש לאותיות. בעת כתיבת שאילתות SQL, נהוג לרשום את מילות המפתח באותיות רישיות.
השאילתה למעלה תציג את כל הערים. נניח שרק רצינו להציג ערים בניו זילנד. נצטרך סוג של סינון. מילת המפתח SQL לכך היא WHERE, או "כאשר משהו נכון".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Aucklandעד כה שלפנו נתונים מטבלה אחת בלבד. עכשיו אנו רוצים לאחד את הנתונים משתי הטבלאות ערים ו-כמות גשמים. זה נעשה על ידי חיבור ביניהן. למעשה תיצור תפר בין שתי הטבלאות, ותתאים את הערכים מעמודה בכל טבלה.
בדוגמה שלנו, נתאים את עמודת city_id בטבלת כמות גשמים עם עמודת city_id בטבלת ערים. זה יתאים את ערך כמות הגשמים לעיר המתאימה. סוג החיבור שנבצע נקרא inner join, כלומר אם יש שורות שלא תואמות לשום דבר מהטבלה השנייה, הן לא יוצגו. במקרה שלנו, לכל עיר יש כמות גשמים, אז הכל יוצג.
בואו נשיג את כמות הגשמים לשנת 2019 עבור כל הערים שלנו.
נעשה זאת בשלבים. השלב הראשון הוא לחבר את הנתונים יחד על ידי ציון העמודות לתפר - city_id כפי שהודגש קודם.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_idהדגשנו את שתי העמודות שאנו רוצים, ואת העובדה שאנו רוצים לחבר את הטבלאות על ידי city_id. עכשיו נוכל להוסיף את משפט ה-WHERE כדי לסנן רק את שנת 2019.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942מסדי נתונים יחסיים מתמקדים בחלוקת מידע בין טבלאות מרובות, אשר לאחר מכן מאוחדות להצגה ולניתוח. זה מספק גמישות גבוהה לביצוע חישובים ולמניפולציה של נתונים. ראית את המושגים המרכזיים של מסד נתונים יחסי, וכיצד לבצע חיבור בין שתי טבלאות.
ישנם מסדי נתונים יחסיים רבים זמינים באינטרנט. תוכל לחקור את הנתונים באמצעות הכישורים שלמדת למעלה.
ישנם מספר משאבים זמינים ב-Microsoft Learn להמשך חקירת SQL ומושגי מסדי נתונים יחסיים
- תאר מושגים של נתונים יחסיים
- התחל שאילתות עם Transact-SQL (Transact-SQL היא גרסה של SQL)
- תוכן SQL ב-Microsoft Learn
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון כי תרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפת המקור שלו הוא המקור הסמכותי. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי אדם. אנו לא נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.
