160 likes | 322 Views
236363 מערכות מסדי נתונים. 1. הקדמה שקפים: אלדר פישר עריכה ותוספות: אמיר שפילקה. ברוכים הבאים !. מרצה: אמיר שפילקה חדר 521, טלפון 4907 דוא"ל: shpilka@cs.technion.ac.il שעת קבלה: בתאום מראש מתרגל מוביל: נדב שרגאי חדר 214, טלפון 3821 דוא"ל: shnadav@cs.technion.ac.il
E N D
236363מערכות מסדי נתונים 1. הקדמה שקפים: אלדר פישר עריכה ותוספות: אמיר שפילקה
ברוכים הבאים ! • מרצה: אמיר שפילקה חדר 521, טלפון 4907 דוא"ל: shpilka@cs.technion.ac.il • שעת קבלה: בתאום מראש • מתרגל מוביל: נדב שרגאי חדר 214, טלפון 3821 דוא"ל: shnadav@cs.technion.ac.il • שעת קבלה: יום שלישי 14:30 • בודקת: אירינה לווה חדר 415, טלפון 2997 דוא"ל: lavva@cs.technion.ac.il • שעת קבלה: בתאום מראש • חישוב הציון:80% מבחן סופי (חומר סגור)20% תרגילי בית
נושאי הקורס • א. הקדמה • ב. תרשימי ER • ג. אלגברה רלציונית כשפת שאילתה • ד. תחשיב רלציוני כשפת שאילתה • ה. שפת המודל הלוגי Datalog • ו. שיקולי תלויות פונקציונאליות בתכנון מסד הנתונים • ז. צורות נורמאליות בהינתן תלויות פונקציונאליות • ח. שפת XML ושפות השאילתה XPath ו-XQuery • תילמד בתרגול: שפת השאילתות SQL • לימוד בקריאה עצמית (לא חובה בסמסטר זה): • שפת הגדרת המידע ODL ושפת השאילתות OQL.
מסדי נתונים • מערכת ניהול מסדי נתונים (DBMS─Database management system) היא מערכת המיועדת לנהל מאגרי נתונים גדולים. • מערכת כזו תהיה אפקטיבית כאשר מדובר באוספים של נתונים המסודרים לפי מבנה לוגי קבוע, שגודלו קטן יחסית לכמות הנתונים הכוללת. • דוגמא: מאגר נתונים של בנק. • כל נתון שייך לאחד ממספר קבוע של "סוגים" ─ פרטים אישיים של לקוח, פרטים אישיים של עובד, העברה כספית בחשבון לקוח . . . • עם זאת, מספר הנתונים מכל סוג (למשל, מספר ההעברות הכספיות הכולל) הוא מאוד גדול.
מערכת ניהול מסדי נתונים • מערכת לניהול מסדי נתונים מורכבת מהאלמנטים הבאים: • מודל הנתונים: דרך יצוג הנתונים ב- DB. מטרת המודל היא לתרגם את הידע/מידע שבשימוש למודל מתמטי עליו ניתן לבצע מניפולציות ולשאול שאילתות. • מערכת לניהול קבצים: מאפשרת חיפוש יעיל בקבצים. • שפת שאילתות: למשל SQL. מאפשרת לשלוף מידע מה- DB. • בקרת מקבילות והתאוששות: כלי שנועד למנוע כשלים ב- DB.למשל ששני משתמשים שונים לא יכתבו בו זמנית לאותו תא זיכרון.נועד לאפשר התאוששות מנפילות. • אימות שלמות המידע: כלי הבודק שכל הנתונים המסד מקיימים תנאים לוגים מסוימים (למשל שת"ז היא מספר) • בטחון המידע: כלי המאפשר ליצור מגבלות על הרשאות גישה.
מסדי נתונים ─ הרמות העליונות • רמת המשתמש: כל משתמש רואה מבט (חלקי) על המסד. משתמשים שונים יכולים לראות מבטים שונים, ואלו לא בהכרח משקפים את ארגון הנתונים הפיזי במסד. • הגדרת מבנה מסד הנתונים (בעקבות ניתוח צורכי היישום): כוללת את המבנה הלוגי של הנתונים והקשרים ביניהם. מתבצעת בדרך כלל באמצעות שפת הגדרת נתונים, DDL (Data Definition Language).
הרמות העליונות ─ המשך • ביצוע שאילתות (Queries) להפקת מידע מהמסד (באמצעות התוכנות המורצות מעל המסד): עבור שאילתה הכתובה בשפת שאילתות מתאימה, המסד יפלוט פלט מתאים (בד"כ בצורת טבלא). • שינוי נתונים: הוספה, מחיקה ועדכון של פרטים. לשפה לביצוע שאילתות ושינויים קוראים DML (Data Manipulation Language). • לעיתים, נרצה גם לשנות את המבנה הלוגי של המסד לאחר שכבר אוחסנו בו נתונים (למשל ─ בעת התרחבות ארגונית של חברה).
מסדי נתונים ─ אספקטים נוספים • ברמות התחתונות: יש לתרגם את הגדרות הנתונים לתכנון הולם של מבני הקבצים המאוחסנים פיזית על הדיסק. בהינתן שאילתא, יש לתרגם אותה לאלגוריתם יעיל לשליפת הנתונים מהקבצים. • בנוסף, יש לממש עבור מסד הנתונים בקרת גישה (לפי הרשאות המשתמשים), בקרת מקביליות (עבור מסדים הנגישים למספר משתמשים בו זמנית), אבטחת עמידות המידע בנפילות של המערכת . . . • אספקטים אלו הם מחוץ לתחום של קורס זה.
מודלים למסדי נתונים • ישנן מספר גישות לתכנון מסד נתונים. • המודל המדרגי ומודל הרשת: מודלים הסטורים שלא ילמדו בקורס זה. במודלים אלו הקשר בין האובייקטים השונים במסד הנתונים נעשה באמצעות מצביעים (pointers). • המודל הרלציוני: האובייקטים מסודרים בטבלאות. קשר בין רשומות מטבלאות שונות יזוהה ע"י זהות בערכים מתאימים בטבלא. מרבית הקורס תוקדש למסדי נתונים הבנויים לפי מודל זה. • מודל ישות ─ קשר (ER): כלי חשוב בניתוח דרישות ובבניית סכימה למסד נתונים רלציוני. במובן מסוים נמצא "רמה אחת מעל" המודל הרלציוני. • מסדי נתונים מכווני עצמים (object oriented): דומים למסדי נתונים רלציונים, בתוספת רעיונות מתכנות מכוון עצמים (OOP).
ייצוג ע"י טבלא • נניח שאנו רוצים לייצג אוסף של אובייקטים מסוג מסוים (למשל: ברצוננו לאסוף נתונים על שחקני קולנוע)ושבידינו רשימה של תכונות שערכיהן מאפיינות כל אובייקט(למשל: שם, תאריך לידה, וסרט ראשון). • אנו נוכל להביט על אוסף האובייקטים כטבלא, שבה כל שורה מתאימה לאובייקט, וכל עמודה מכילה את הערכים של כל האובייקטים עבור תכונה אחת. • שימו לב: הטבלא לא בהכרח מתארת את אופן כתיבת הנתונים הפיזית על הדיסק, אלא דרך שבה הרמות העליונות יותר במסד מתייחסות אל הנתונים.
נקודת מבט חילופית • בדרך כלל מתעלמים מסדר המופע של האובייקטים (הישויות), ולא מאפשרים כפילויות. במקרה זה במקום להסתכל על כל ישות כשורה בטבלה, אפשר להסתכל עליה כעל נקודה במרחב כל הערכים האפשריים שניתן להציב בתכונות. ג'ון ווין, 26.5.1907 שם (מחרוזת) מרילין מונרו, 1.6.1926 תאריך לידה
מסדי נתונים פשוטים • במקרה הפשוט ביותר, כל האובייקטים שנרצה לאסוף עליהם מידע יהיו מאותו "סוג", זאת אומרת שתהיה לכולם אותה רשימת מאפיינים ורק ערכי המאפיינים יבדילו ביניהם. • דוגמא: רשימת קבצים מוזיקלים להשמעה. כל אובייקט יתאפיין ע"י שם השיר, שם הקובץ, הפורמט (mp3/ogg/wma...) וזמן הנגינה. • במקרים כאלה אין החלטות קשות ברמת הארגון הכללי של המסד ─ כל הנתונים יאורגנו כטבלא אחת, שתמומש על הדיסק באחד האופנים הנלמדים בקורס "מערכות קבצים".
מסדים מורכבים יותר ─ דוגמא • נניח שנרצה לתכנן מסד נתונים עבור מנהל הלימודים בפקולטה. במקרה כזה ניתן לאפיין מספר סוגים של אובייקטים: • סטודנטים─ עבור כל סטודנט נשמור את שמו, מס' הזהות וכתובת. • קורסים─ עבור כל קורס נרצה לשמור את שם הקורס, מס' הקורס ושם מרצה. • אם סטודנט מסוים לקח קורס מסוים, נרצה לדעת על כך, וכן לדעת את ציונו הסופי של סטודנט בקורס. לכן, לכל לקיחה של קורס ע"י סטודנט, נשמור אובייקט המעיד על הלקיחה (ומכיל גם את הציון הסופי בקורס) ─ זהו אובייקט קשר. • כיצד נארגן את האובייקטים הנ"ל ?
אפשרויות ארגון • אפשרות פשטנית: נשמור טבלא אחת גדולה. לכל רישום של סטודנט לקורס, נחזיק את שם הסטודנט, מס' זהות, כתובת, שם הקורס, מס' הקורס, שם מרצה, וציון סופי. לאפשרות זו חסרונות רבים. • יתירות רבה מדי─ מדוע צריך לאחסן את כתובת הסטודנט מספר רב כל כך של פעמים ? • חוסר יכולת לייצג תרחישים מסוימים─ איך נשמור את נתוני הסטודנט עבור סטודנט שלא לקח עדיין אף קורס ? • קושי בעדכון─ אם הסטודנט משנה כתובת, נצטרך לאתר ולשנות את כל הרשומות הקשורות בלקיחת קורס על ידו. יהיה קשה להימנע ממצב שבו נתוני הסטודנט יפסיקו להיות קונסיסטנטיים בין הרשומות.
אפשרויות ארגון (המשך) • אפשרות יותר ריאלית: נשמור טבלא אחת לסטודנטים, טבלא אחת לקורסים וטבלא אחת לרישומים של סטודנטים לקורסים. • אפשר לשמור עבור כל רישום לקורס רק את התכונות המזהות של הסטודנט (מס' זהות) ושל הקורס (מס' קורס), בנוסף לציון הסופי. • הגדרת קיומו של סטודנט מסוים אינה תלויה ברישומו לקורסים ─ יש לכל סטודנט מעמד של ישות "עצמאית" במאגר וניתן לעדכנו ככזה. בדומה לכך נוכל לעדכן רשומה של קורס.
החלטות קשות • מה יקרה אם עבור סטודנט מסוים נרצה לדעת לא רק אילו קורסים הוא לקח, אלא נרצה לדעת גם אצל אילו מרצים הוא למד ? • אם בטבלא עבור יחסי לקיחת הקורסים נשמור רק את מספרי הקורסים, אז שאילתה מעין זו תיקח זמן רב יותר כי נצטרך לבצע התאמה גם עם הטבלא עבור ישויות הקורסים. • יתרה מזו, אם בינתיים התחלפו המרצים בקורס אז השאילתה הנ"ל תחזיר תשובה לא נכונה ! איך נתקן זאת ? • נוסיף לטבלת היחסים עמודה עבור מרצה הקורס שנלקח ?נגדיר סוג חדש של ישויות "מרצה" ויחסים מתאימים ? • ההחלטות לגבי ארגון הנתונים במסד אינן טריוויאליות !