Skip to content

Latest commit

 

History

History
197 lines (135 loc) · 13.5 KB

File metadata and controls

197 lines (135 loc) · 13.5 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 או (במונחים טכניים של מסדי נתונים) מפתח ראשי. מפתח ראשי הוא ערך המשמש לזיהוי שורה ספציפית אחת בטבלה. למרות שזה יכול להיות מבוסס על ערך עצמו (לדוגמה, שם העיר), זה כמעט תמיד צריך להיות מספר או מזהה אחר. אנחנו לא רוצים שהמזהה ישתנה אי פעם כי זה ישבור את הקשר. ברוב המקרים תמצאו שהמפתח הראשי או המזהה יהיה מספר שנוצר אוטומטית.

✅ מפתח ראשי מקוצר לעיתים קרובות כ-PK

ערים

city_id עיר מדינה
1 טוקיו יפן
2 אטלנטה ארצות הברית
3 אוקלנד ניו זילנד

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

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

גשמים

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

בואו נשלוף את נתוני הגשמים של שנת 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 ומסדי נתונים יחסיים

משימה

כותרת המשימה


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