You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

13 KiB

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

 סקצ'נוט מאת (@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, נוכל להשתמש בשפה שנקראת Structured Query Language או 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. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לאי-הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.