עיצוב נתבן
הוצג| English | משמעות |
|---|---|
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | מאגר נתונים יחסי |
| tables/ˈteɪblz/ | טבלאות |
| entities/ˈentɪtiz/ | אובייקטים |
| primary key/ˈpraɪməri kiː/ | מפתח ראשי |
| foreign key/ˈfɒrən kiː/ | מפתח זר |
| normalisation/ˌnɔːməlaɪˈzeɪʃn/ | נורמליזציה |
קורס שנשנה שמו כעת הוא בעל שני כותרות
- בית ספר מעתיק כותרת קורס לכל שורת הרשמה. שינוי שם של חלק מההעתקות משאיר שתי כותרות סותרות לקורס אותו.
- מאגר נתונים יחסי מאחסן שורות בטבלאות. תחילה זיהה אתהאנטיות, כמו סטודנטים וקורסים, ואת הקשרים ביניהם.
הפרד בין זהות לתווית משתנה
- מפתח ראשוני מזהה באופן ייחודי שורה ואינו יכול להיות null. מזהה סטודנט יציב מאפשר שינוי שם ללא שינוי במזהות הסטודנט.
- מפתח טבעי יכול לעבוד כאשר הייחודיות והיציבות שלו מובטחות. שם הוא מפתח גרוע כאן כי סטודנטים שונים יכולים לשתף אותו; כתובת דוא"ל עשויה גם להשתנות.
תלמידים יכולים לשתף שמות ולשנות כתובות דוא"ל. איזהו המפתח הטוב ביותר לעיצוב זה?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
בחר זהות יציבה במקום תווית החוזרת או משתנה.
ייצוג הקשר רב-לרב
- סטודנט אחד יכול ללמוד בקורסים רבים; קורס אחד יכול להיות עם סטודנטים רבים. השתמש בטבלת הרשמות עם שורה אחת לכל זוג סטודנט-קורס.
- מפתח חיצוני מקשר כל הרשמה למפתח סטודנט או קורס תקף. מפתח ראשי מורכב
(student_id, course_id)מונע הופעת אותו זוג פעמיים.
איזה עיצוב מייצג תלמידים הנוטים מספר רב של קורסים וקורסים המכילים מספר רב של תלמידים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כל הרשמה מקליטה זוג אחד של תלמיד–קורס.
איזה סוג של מפתח מקשר הרשמה למפתח קורס קיים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מפתח חיצוני מייצג ומוגבל את ההפניה הזו כאשר האכיפה מופעלת.
איזה הגבלה מונעת הופעה כפולה של זוג תלמיד-קורס?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
המפתח הראשי המורכב מזהה את הזוג.
אחסון עובדה על קורס יחד עם הקורס
- נורמליזציה מארגנת טבלות באמצעות התלותיהן כדי להפחית חזרות לא תואמות. בעיצוב זה, מפתח קורס קובע את כותרתו, ולכן יש לאחסן את הכותרת בטבלת הקורסים.
- ערכי מפתח חיצוני חוזרים צפויים: הרשמות רבות יכולות להתייחס לקורס אחד. הכללה "לעולם אל תחזור ערך" אינה כלל עיצוב בסיס נתונים שימושי.
חזרה על אותו מזהה קורס בשורות הרשמה שונות היא תמיד טעות נורמליזציה.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הפניות חוזרות מצופות. העתקת שם הקורס לשורה כללית יוצרת כאן בעיית עדכון.
הפעלת ובדיקת הגבלות
- ב-SQLite, הפעל אכיפת מפתח חיצוני בכל חיבור עם
PRAGMA foreign_keys = ONלפני שמתחילים לעבוד. הצהרת יחס לבד אינה מספיקה. - בדוק הרשמה תקפה, זוג כפול והרשמה המתייחסת לקורס שאינו קיים. ההגבלות אמורות לדחות את שתי האחרונות; הן לא קובעות מי מהקוראים רשאי לגשת.
PRAGMA foreign_keys = ON;
CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
CREATE TABLE courses (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
CREATE TABLE enrolments (
student_id INTEGER REFERENCES students(id),
course_id INTEGER REFERENCES courses(id),
PRIMARY KEY (student_id, course_id),
CHECK (student_id IS NOT NULL AND course_id IS NOT NULL)
);
הצהרת מפתחות חיצוניים ב-SQLite אינה מבטיחה אכיפה בכל חיבור ללא הפעלתם.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הפעילו PRAGMA foreign_keys = ON בחיבור כלשהו ובדקו את ההתנהגות.
בדיקת העיצוב מול מקרה חדש
- בהלוות בספריות, כותרת ספר אינה בהכרח העתק פיזי ייחודי. זיהוי המלווה, ההעתק ואירוע ההלווה לפני בחירת המפתחות.
- החלט אם אירועים חוזרים מותרים. זוג סטודנט-קורס יכול לזהות הרשמה אחת כאן, אך זוג מלווה-העתק לא יכול להבחין בין הלוות חוזרות בתאריכים שונים.
בחר מפתחות לזהות שאתה צריך. הפרד עובדות על אובייקטים משורות היחס, ואז ודא ייחוד והגבלות ייחוס עם מקרים ספציפיים.
הצעו אנטיתיות ומפתחים לביבליוטקה שבה נדבן יכול להשכיר אותו עותק פיזי יותר מפעם אחת.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
השתמשו ב-ID של נדבן, ID של עותק ומזהה נפרד לאירוע השכרה עם פרטי האירוע הנדרשים.
מדוע נדבן-עותק לבדם אינו מספק כמפתח להשכרות חוזרות?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
המפתח חייב להבחין בין האירועים בפועל שברצונכם לתעד.