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.
Data-Science-For-Beginners/translations/he/2-Working-With-Data/05-relational-databases/README.md

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

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

ערים

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

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

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