מדוע בסיסי נתונים והמודל היחסיות
הוצג| English | משמעות |
|---|---|
| table/ˈteɪbl/ | טבלא |
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | מאגר נתונים יחסיתי |
| flat files/flæt faɪlz/ | קובצי שטח |
| data redundancy/ˈdeɪtə rɪˈdʌndənsi/ | ריבוי נתונים |
| data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ | אי-עקביות נתונים |
| integrity/ɪnˈteɡrɪti/ | שלמות |
| field/fiːld/ | שדה |
| entity/ˈentɪti/ | אובייקט |
| record/ˈrekɔːd/ | רשומה |
| tuple/ˈtuːpl/ | טופל |
| attribute/ˈætrɪbjuːt/ | מאפיין |
| primary key/ˈpraɪməri kiː/ | מפתח ראשי |
| composite key/ˈkɒmpəzɪt kiː/ | מפתח מורכב |
| candidate key/ˈkændɪdeɪt kiː/ | מפתח מועמד |
| secondary key/ˈsekəndəri kiː/ | מפתח משני |
| indexing/ˈɪndeksɪŋ/ | אינדקס |
| foreign key/ˈfɒrən kiː/ | מפתח חיצוני |
| referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ | שלמות ייחוס |
| one-to-many/wʌn tə ˈmeni/ | אחד-ל-rabim |
| many-to-many/ˈmeni tə ˈmeni/ | רב-לרב |
המאמר ש-IBM לא רצה
- בשנת 1970, מחקר ב-IBM בשם אדגר קוד פרסם מאמר בן שנים עשר עמודים שבו הציע לאחסן נתונים בטבלאות פשוטות, הקשורות על ידי ערכים משותפים, ובקש שהנתונים יובקשו בשפה שתגיד מה אתה רוצה ולא איפה הם נמצאים על הדיסק.
- IBM מכרה כבר מספר שנים מראש מסד נתונים שאחסן נתונים כעצים הקשורים למבנה הקבצים, ולכן התעלמה ממנו במשך שנים. כל תוכנית שכתובה נגד קבצים אלו הייתה צריכה להישנות בכל פעם שמבנה השתנה.
- לפי 1980 כל הבנקים, חברות התעופה ומשרדי הממשלה עברו לטבלאות של קוד. חצי מאה לאחר מכן הם עדיין פועלים עליהן.
- לקח זה הוא על בעיות הגישה המבוססת קבצים, כיצד מסד נתונים יחסי פותר אותן, והמילים שאתה חייב להשתמש בהן בדיוק.
הגישה המבוססת קבצים
- לפני מסדי נתונים, כל תוכנית שמרה על קבצים שטוחים משלה: לתוכנית המכירות היה קובץ לקוחות, לתוכנית החשבונות היה אחר, ולתוכנית המשלוחים היה שלישי.
- לכל קובץ היה מבנה קבוע שעליו תלוי קוד התוכנית, ואף אחד מחוץ לתוכנית לא ידע מה יש בו.
- זה עובד עבור תוכנית אחת קטנה. הבעיה מתחילה כאשר תוכנית שנייה זקוקה לאותם נתונים.

שלוש תוכניות, שלושה העתקים של הלקוח
הגבולות
- עודפות נתונים: אותו נתון, כמו כתובת לקוח, מוחזק בכמה קבצים, מה שמבזבז מקום ואנרגיה.
- אי-עקביות נתונים: ההעתקים מעודכנים בנפרד, ולכן הן סורקות זו מזו ואף אחד לא יודע איזה נכון.
- תלות בנתונים: תוכניות קשורות לפורמט הקובץ, ולכן שינוי במבנה דורש שכתוב מחדש של כל תוכנית שמשתמשת בקובץ.
- שלמות קשה לאכוף, נתונים קשים לשיתוף בטוח, חיפוש על פני קבצים איטי, ואבטחה לא יכולה להיות מוגדרת לפי שדה.
אחסון כתובת לקוח במספר קבצים נפרדים מוביל ל:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אותו נתון שמצוי במקומות רבים (עודפות) יכול להתעדכן בנפרד ולהפוך לחסר עקביות.
במערכת קבוצתי-מישורית (flat-file) אותם נתונים לעיתים קרובות מופקדים בשנית בקבוצות שונות, מה שהופך אותם לחסרי עקביות כאשר מעודכנת רק אחת מהן.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
זוהי העודפות וחוסר העקביות הנגרמים ממנה, והם הבעיה המרכזית שאתה פותרת המודל היחסיתי.
מהן הגבלות של גישת הקבוצות? סמן את כל האפשרויות החלות.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
עודפות, חוסר עקביות ותלות בנתונים הן השלוש הגבלות המפורשות. טבלאות וחיבורים שייכים לגישת היחסים שמחליפה אותה.
כיצד מסד נתונים יחסי עונה על כך
- מסד נתונים יחסי מאחסן את הנתונים בטבלאות המנוהלות על ידי תוכנה אחת, DBMS, שהכל תוכנית משתמש בה.
- כל עובדה מאוחסנת פעם אחת, כך שעודפות ואי-עקביות נעלמות: כתובת משתנה במקום אחד וכל תוכנית רואה את השינוי.
- תוכניות מבקשות נתונים מ-DBMS לפי שם, כך שאחסון יכול להשתנות ללא צורך בשינוי התוכנית: עצמאות נתונים.
- כללי שלמות, זכויות גישה וגיבויים מופעלים במרכזית, וכל טבלה ניתנת לחיפוש או להצטרפות לכל טבלה אחרת.

עותק אחד של הנתונים, שמרן אחד
איך מסיר בסיס נתונים יחסיתי את חוסר העקביות בנתונים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
עתק אחד, עדכון אחד, ללא סטייה. מערכת ניהול בסיסי הנתונים מספקת לכל תוכנית את אותו ערך נכון.
המונחים: טבלאות, שורות ועמודות
- טבלה (יחס) היא רשת של שורות ועמודות; טבלה אחת עבור כל סוג של אובייקט, כלומר דבר עליו מאוחסנים נתונים:
CUSTOMER,ORDER,PRODUCT. - רשומה היא שורה אחת, כלומר instance אחת של האובייקט; המונח הרשמי הוא טופל.
- שדה הוא עמודה אחת, כלומר חלק מידע אחד על כל רשומה; המונח הרשמי הוא תכונה.

שורות הן רשומות, עמודות הן שדות, ועמודה אחת נמשכת לתוך הטבלה השנייה
קריאת טבלה יחסית באמצעות SELECT
טבלה יחסית מורכבת רק משורות (רשומות) ועמודות (שדות). הפקודה WHERE מסננת את השורות העומדות בתנאי הספציפי; SELECT לאחר מכן שומר רק את העמודות שביקשת.
המונחים: מקורות
- מקור ראשוני הוא שדה או שילוב של שדות המזהים כל רשומה באופן ייחודי; הוא לעולם אינו null ואינו כפול. מקור מורכב הוא מקור ראשוני המורכב משני שדות או יותר.
- מקור מועמד הוא כל שדה או שילוב שיכול לשמש כמקור ראשוני. מקור משני הוא שדה שאינו ראשוני אך מדדק לייעול חיפוש מהיר; אינדוקסציה בונה אינדקס על שדה כדי לאפשר ביצועי חיפוש והצטרפויות מהירים.
- מפתח זר הוא שדה שערכו תואם למפתח הראשי של טבלה אחרת, המקשרת בין שתי הטבלאות. בכתיב מקוצר, המפתח הראשי תחתון והמפתח הזר מצוין:
CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate) -- CustomerID is a foreign key → CUSTOMER
מפתח ראשי:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
המפתח הראשי מזיהה כל שורה באופן ייחודי. מפתח זר הוא זה המקושר לשלוחה אחרת.
התאם כל סוג של מפתח לתיאור המתאים לו.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
המפתח הראשי מזהה שורה; מפתח זר מקשר לשלוחה אחרת; מורכב = מספר שדות בשילוב; מועמד = מפתח ראשי אפשרי.
שדה שערכו תואם למפתח הראשי של שלוחה אחרת הוא מפתח ______.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
המפתח הזר הוא מה שמייצר את הקשר בין שתי שלוחות.
דוגמה פותרת: הזרם חלקים של מאגר נתונים של ספרייה
- ספרייה מקטיגרת את הספרים שלה, את חבריה ואת כל ההלוואות. זיהו את האובייקטים, מקור ראשוני לכל אחד מהם, ואת המקורות החיצוניים.
- אובייקטים:
BOOK,MEMBER,LOAN. מקורות ראשוניים:BookID,MemberID,LoanID, שנבחרו מכיוון שהם ייחודיים לכל רשומה ולעולם אינם ריקים; כותרת או שם לא יהיו מתאימים, שכן שני ספרים עשויים לשתף אותו. LOAN(LoanID, BookID, MemberID, DateOut, DateDue):BookIDו-MemberIDהם מקורות חיצוניים, כל אחד מהם מתאים למקור הראשוני בטבלה שלו. מספר הטלפון של חבר נכלל ב-MEMBER, ולא בכל הלוואה.
ב-LANO(LoanID, BookID, MemberID, DateOut), BookID ו-MemberID הם ____ מפתחות.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כל אחד מהם תואם למפתח ראשי של טבלה אחרת, BOOK ו-MEMBER, ומקשר את ההלווה אליהן.
קשרים ושלימות הפניה
- קשר מחבר בין שני אובייקטים. אחד-ל-אחד: לכל חבר יש כרטיס ספרייה אחד. אחד-ל-רבים: לחבר ישנן הלוואות רבות; כל הלוואה שייכת לחבר אחד. רבים-ל-רבים: לספר ישנם מספר סופרים, וסופר כותב מספר ספרים.
- אינטגרציה ייחוסית פירושה שכל ערך מפתח חיצוני חייב להתאים למפתח ראשי קיים בטבלה שהוא מצביע עליה: אין הלוואה לחבר שאינו קיים, ואין רשומות יתומות.
- מערכת ניהול המאגרים מאכפת על כך: היא דוחה הכנסה עם מפתח חיצוני לא ידוע, ודוחה מחיקת רשומה שמאחרות עדיין מצביעות עליה.
שלמות ייחוס מבטיחה ש:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
היא מונעת רשומות יתומות — לא ניתן להתייחס למפתח ראשי שאינו קיים.
התאם כל קשר לסוג שלו.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ספור כמה מכל אנטיות ניתן לקשר לאחת משני האחרות. קשר רב-רב דורש טבלת קישור לאחסון.
דוגמה פותרת: מה אינטגרציה ייחוסית מונעת
- לקוח עם שלוש הזמנות פתוחות נמחק מטבלת
CUSTOMER. הסבר כיצד אינטגרציה ייחוסית חלה כאן. - ה-
CustomerIDשל כל הזמנה הוא מפתח זר שחייב להתאים ללקוח קיים. מחיקת הלקוח תשאיר שלושה הזמנות המצביעות על רשומה שאינה קיימת עוד: רשומות יתומות. - לכן, מערכת ניהול המאגרים דוחה את המחיקה עד שההזמנות יימחקו או יוקצו מחדש, או, אם הגדרה כקסקד (Cascade), תמחק גם את ההזמנות. בכל אופן, לעולם לא תופנה הזמנה ללקוח שאינו קיים.
- ציין מהי הכללה, מה ישבור אותה, ומה מערכת ניהול המאגרים עושה.
שלמות ייחוס מאפשרת מחיקת לקוח בעוד שההזמנות בטבלה אחרת עדיין מתייחסות אליו.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
דבר זה יצור רשומות יתומות. מערכת ניהול הנתונים מסרבת על המחיקה או מבצעת אותה בצורה קסקדית בהזמנות, כך שכל מפתח חיצוני ממשיך להפנות לרשומה קיימת.
הגדרות שהבוחן מקבל
| מונח | הגדרה |
|---|---|
| אובייקט (Entity) | דבר עליו נתונים מאוחים, המיוצג על ידי טבלה אחת |
| מאפיין (Attribute) | פריט נתונים אחד לגבי אובייקט, עמודה |
| טופל (Tuple) | שורה אחת בטבלה, רשומה אחת |
| מפתח ראשי | מאפיין או שילוב מאפיינים המזהה באופן ייחודי כל טופל |
| מפתח מועמד | מאפיין או שילוב שיכול להיבחר כמפתח ראשי |
| מפתח משני | מאפיין עם אינדקס המשמש לחפש במהירות בטבלה |
| מפתח חיצוני | מאפיין בטבלה אחת שהוא המפתח הראשי של טבלה אחרת, ומצור את הקשר |
| אינטגרציה ייחוסית | כל ערך מפתח חיצוני מצביע על מפתח ראשי קיים |
סימונים נופלים מהיד
- טופל הוא שורה, מאפיין הוא עמודה. החלפתם גורלת הפסד בשתי נקודות.
- "יחיד" לבדו אינו מגדיר מפתח ראשי; הוא מזהה כל רשומה ואינו יכול להיות null לעולם.
- מפתח חיצוני יכול לחזור: לקוח אחד, הזמנות רבות. זהו המפתח הראשי שלא יכול.
- מפתח משני משמש לחיפוש מהיר, לא לזיהוי. אל תקראו לו "מפתח ראשון שני".
הבנתך מושלמת
- הגישה המבוססת על קבצים סובלת מריבוי, אי-עקביות ותלות בנתונים, עם אינטגרציה חלשה, שיתוף, חיפוש ואבטחה
- מאגר נתונים יחסי מאחסן כל עובדה פעם אחת בטבלאות המנוהלות על ידי מערכת ניהול מאגרים (DBMS) אחת, כך שהתוכניות הן עצמאיות מבחינת האחסון והכללים מתופסים במרכזיות
- אישיות → טבלה · טרפל → רשומה, שורה · מאפיין → שדה, עמודה · מפתח ראשי מזוהה, מפתח זר מקשר, מועמד יכול לזהות, משני הוא מדורג לחיפוש
- אינטגרציה יחסית: כל מפתח זר תואם למפתח ראשי קיים, ולכן אין רשומות יתומות