Skip to content

Latest commit

 

History

History
190 lines (128 loc) · 13.1 KB

File metadata and controls

190 lines (128 loc) · 13.1 KB

עבודה עם נתונים: מסדי נתונים יחסיים

 סקצ'נוט מאת (@sketchthedocs)
עבודה עם נתונים: מסדי נתונים יחסיים - סקצ'נוט מאת @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
-- Auckland

SELECT הוא המקום שבו אתה מפרט את העמודות, ו-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 ומושגי מסדי נתונים יחסיים

מטלה

הצגת נתוני שדה תעופה


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