6133f0a7d9af765b7390b6fb782478de.ppt
- Количество слайдов: 33
PID type Pet name age owns Person PName since • סמן נכון/לא נכון: – – – יכולים להיות 2 חתולים ) (type עם אותו שם ) (name יתכן שלכלב פלוטו )שמופיע ביחס( אין בעלים יתכן שלשמעון )שמופיע ביחס( אין חיית מחמד יתכן שלתוכי זיפזיף )שמופיע ביחס( יש 2 בעלים יתכן שלדני )שמופיע ביחס( יש חתול וגם כלב נכון לא נכון
2006 A להלן דיאגרמה לתיאור מערכת שיבוצי ניתוחים בבית חולים: סמן את התשובה הנכונה עבור כל טענה: א-יתכן כי חולה מסוים יעבור שני ניתוחים באותו יום ב-יתכן כי קיימים שני ניתוחים באותו תאריך, שעה, ומאותו סוג ג-יתכן כי אותו ניתוח יתבצע במספר חדרים ד-יתכן כי באותו תאריך ושעה יבוצעו ניתוחים שונים ע"י אותו מנתח כן כן לא לא
– – מהו המפתח של היחס "מבצע"? )אין צורך לבטא אילוצי השתתפות שאינם גם אילוצי מפתח( )ת. ז. , תאריך, שעה, מס' רשיון( האם ניתן לוותר על קבוצת הישויות "חדר ניתוח" )ועל קבוצת הקשרים "שיבוץ"(, ותחת זאת להוסיף את התכונה "מס' חדר" לקבוצת הקשרים "מבצע", וזאת מבלי לשנות את משמעות הדיאגרמה? הסבר. לא ניתן. במקרה זה אותו מנתח יוכל לנתח ניתוחים שונים בחדרים שונים. בנוסף, תכונה יכולה להיות ריקה ולכן יוכלו להיות ניתוחים שאינם מתבצעים בחדרים.
דוגמה • נתונה מערכת לשמירת מידע על סרטים ועל : השחקנים ששיחקו בסרטים fno Films title year Acts salary Films (fno, title, year) Actors (id, name, nationality) Acts (id, fno, salary) Actors id nationality name relation definitions - מהם ה ? המתאימים לדיאגרמה זו
בטא באלגברה של יחסים את שמות השחקנים שהלאום שלהם הוא ישראלי Films (fno, title, year) Actors (id, name, nationality) Acts (id, fno, salary) name( nationality=‘Israel’(Actors))
בטא באלגברה של יחסים את שמות השחקנים 2000 הישראלים ששיחקו בסרט שהופק בשנת Films (fno, title, year) Actors (id, name, nationality) Acts (id, fno, salary) name( nationality=‘Israel’ year=2000(Actors Acts Films)) ואפשר גם name ( nationality=‘Israel’ (Actors) Acts year=2000(Films))
Films (fno, title, year) Actors (id, name, nationality) Acts (id, fno, salary) מספרי זהות של שחקנים ששיחקו בסרט שהופק בשנת 0791 וגם שיחקו 2000 בסרט שהופק בשנת ? מה נכון id( year=1970 year=2000(Acts Films)) id( year=1970(Acts Films)) id( year=2000(Acts Films)) id( A 1. id=A 2. id A 1. fno=F 1. fno A 2. fno=F 2. fno F 1. year=1970 F 2. year=2000 (ρ (A 1, Acts) x ρ (A 2, Acts) x ρ(F 1, Films) x ρ(F 2, Films))
Films (fno, title, year) Actors (id, name, nationality) Acts (id, fno, salary) מספרי זהות של שחקנים שלא שיחקו בסרט שהופק בשנת 2000 ? מה נכון id( year 2000(Acts Films)) id(Actors) id( year=2000(Acts Films)) ? 2000 ואם רוצים את שמות כל השחקנים שלא שיחקו בסרט שהופק בשנת name(Actors) name( year=2000(Acts Films)) name{[ id(Actors) id( year=2000(Acts Films))] Actors}
2004 A Q 3 Flights(fno, from, to, distance, departs, arrives) מצא את כל הערים שמגיעות אליהן טיסות אבל אין אליהן טיסות . ישירות מתל אביב : באלגברה של יחסים to (Flights)- to ( from=‘Tel. Aviv’ (Flights)) : SQL ב Select distinct to from flights Minus /where to not in Select distinct to from flights where from=‘Tel. Aviv’;
Sportsman(spid, sname, age, country) Coach(coid, cname, age, country) Coaches(coid, spid, salary) a. Names of all coaches from Germany b. Names of all sportsmen who are either from Jordan or are between the ages 20 and 30 c. The ages of the coaches who coach the sportsman with spid=2234 d. Names of all coaches who coach more than one sportsman e. Names of all coaches who do not coach a sportsman who is over the age of 40 f. Names of the coaches who coach all sportsmen
answers
2003 A Q 2 (modified) Aircrafts(aid, aname, cruisingrange) המוצאת מספרי מטוסים שטווח הטיסה שלהם גדול SQL כתוב שאילתה ב . ‘boeing 747’ מטווחי כל מטוסי ה Select a. aid from aircrafts a Where a. cruisingrange>all(select a 2. cruisingrange from aircrafts a 2 where a 2. aname=‘Boeing 747’);
2003 B Q 5 Suppliers(sid, sname, city) Q 1 Select sid from suppliers where city=‘jerusalem’ or sname like ‘%Smith’ Q 2 Select sid from suppliers where city=‘jerusalem’ Union all (select sid from suppliers where sname like ‘%Smith’) ? מה היחס בין תוצאות שתי השאילתות ולא Q 1 תמיד מכילה את התוצאה של Q 2 התוצאה של להיפך. למשל אם יש את הרשומה הבודדת (11, ’J. Smith’, ’jerusalem’)
2003 B Q 5 Suppliers(sid, sname, city) Q 1 Select sid from suppliers where city=‘jerusalem’ or sname like ‘%Smith’ Q 2 Select sid from suppliers where city=‘jerusalem’ Union (select sid from suppliers where sname like ‘%Smith’) ? מה היחס בין תוצאות שתי השאילתות ? לא מפתח sid השאילתות תמיד מחזירות אותה תוצאה. ואם ולא להיפך. למשל אם יש Q 2 תמיד מכילה את התוצאה של Q 1 התוצאה של (11, ’J. Smith’, ’Tel Aviv’) את שתי הרשומות (11, ’Moshe’, ’Jerusalem’)
2004 A Q 11 R(A, B, C, D) ? 2 - מה היחס בין התוצאות של 1 ו 1 Select A from R Intersect where B=12 and C=2 A 2 (Select A from R where B=12) (select A from R where C=2); B C D 1 12 2 A B C 2 12 3 2 2 1 1 D null 2
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) שמות הסטודנטים שמשתתפים בספורט כלשהו Select S. stud. Name from Students S, Plays P Where S. stud. ID=P. stud. ID
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) Golden Arena שמות הסטודנטים שמשחקים באצטדיון Select S. stud. Name From Students S, Plays P, Sport SP Where S. stud. ID=P. stud. ID and P. sport. Name=SP. sport. Name and SP. stadium=’Golden Arena’
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) של הסטודנטים שמשחקים בדיוק בספורט אחד stud. ID select stud. ID from Plays P minus select stud. ID from Plays P 1, Plays P 2 where P 1. stud. ID=P 2. stud. ID and P 1. sport. Name!=P 2. sport. Name
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) של הסטודנטים שמשחקים בדיוק בספורט אחד stud. ID (group by )ע"י שימוש ב select stud. ID from Plays P Group by stud. ID Having count(*)=1;
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) שמות הסטודנטים שמשחקים בדיוק בספורט אחד select stud. Name from Students S, Plays P Where S. stud. ID=P. stud. ID Group by S. stud. ID, S. stud. Name Having count(*)=1;
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) של סטודנטים ששמם "גדול" משמות כל Stud. ID האיצטדיונים בהם הם משחקים select students. stud. ID from students S where not exists ( select * from plays, sport where plays. sport. Name=sport. Name and S. stud. ID=plays. stud. ID and S. stud. Name<=sport. stadium)
Students(stud. ID, stud. Name, stud. Age) Plays(stud. ID, sport. Name) Sport(sport. Name, stadium) : דרך נוספת של סטודנטים ששמם "גדול" משמות כל Stud. ID האיצטדיונים בהם הם משחקים select students. stud. ID from students S where S. stud. Name > all ( select stadium from plays, sport where plays. sport. Name=sport. Name and S. stud. ID=plays. stud. ID )
: להלן הגדרות יחסים בבסיס נתונים כלשהו Worker(id, name, age, city); Belongs(id, dept. Num, salary); Department(dept. Num, manager. Id, budget); : SQL כתוב את השאילתות הבאות ב – מצא את שמות העובדים השייכים ליותר מ-01 מחלקות Select name from worker, belongs where worker. id=belongs. id Group by worker. id Having count(dept. Num)>10; מצא את שמות העובדים עם משכורת מצטברת גדולה מ 0005. משכורת מצטברת של עובד היא סכום המשכורות . שהוא מקבל מכל המחלקות בהן הוא מועסק Select Name from worker, belongs Where worker. id=belongs. id Group by worker. id Having sum(salary)>5000; – • •
סמן נכון/לא נכון: – – כאשר קיים אינדקס מקובץ, תמיד כדאי להשתמש בו לגישה לנתונים אם כל שאר הפרמטרים קבועים, כאשר מקטינים את גודל ה , buffer עולה הכדאיות של שימוש ב - block nested loop לעומת index-nested loop בצירוף טבעי בין יחסים ) R(A, B ו ) , S(B, C כאשר שניהם ממוינים לפי , B זמן הריצה של sort-merge join הוא תמיד לינארי במס' הבלוקים של R ו S עבור אינדקס מסוג עץ + B על שדה , X נאמר שהוא מקובץ אם ערכי X המופיעים בעלים שלו ממוינים לא נכון
: לאחר הרצת הקוד הבא secret. Table 2 מה מכילה הטבלה Create table secret. Table 2(col. A integer, col. B integer); CREATE FUNCTION secret. Func 2() RETURNS trigger AS $$ BEGIN If new. col. A>10 then Insert into secret. Table 2 values(new. col. A-new. col. B, 2*new. Col. B); end if; return new; END; : תשובה $$ LANGUAGE plpgsql; insert into secret. Table 2 values(50, 10); col. B 10 20 40 -20 CREATE TRIGGER secret. Trig 2 after INSERT or UPDATE on secret. Table 2 FOR EACH ROW execute procedure secret. Func 2(); col. A 50 40 20 80
א. כן. החיתוך של שתי התבניות הוא , AE שמהווה מפתח של התבנית הראשונה ב. דוגמא לפירוק עפ"י האלגוריתם: פירוק ל CED ו ABCEHI את ABCEHI מפרקים ל BEH ו ABCEI מפרקים את ABCEI ל CA ו BCEI מפרקים את BCEI ל EB ו CEI סה"כ התקבל הפירוק: CEI , BE , AC , BEH , CDE הפירוק אינו משמר ת"פ, למשל את D B ג. כיסוי קנוני: } F’={AB->D, AB->C, C->A, E->B, E->H, D->B מפתחות: CEI , AEI CEI , BEH , ABCD ואז האלגוריתם מייצר את הפירוק: )נשים לב שאיחדנו כאן ת"פ עם צד ימין זהה לפני יצירת התבניות, ניתן גם להימנע מכך ולקבל יותר תבניות(
2006 b 1 T ) R(A 3 T 2 T ) R(A נתון תזמון : S ) W(A ) R(C ) W(A א-האם S הוא בר סדרתיות קונפליקטית? ב-האם S הוא בר סדרתיות מבטית? ג-האם בגרף הקדימויות של S יש מעגל? כן לא
2006 b נתון R=ABCDE } F={A->DE, C->DB, B->CE, CE->A • מצא כיסוי מינימלי ל F } Fc={A->D, A->E, C->D, C->B, B->C, B->E, CE->A • מצא את כל המפתחות של R B, C • מצא פירוק משמר תלויות ומשמר מידע ל R AD, AE, CD, BC, BE, CEA
2003 A Q 7 {a, b} {c} • Support=60%, confidence=30% של confidence - וה support • מה ניתן לומר על ה החוק {a} {c} Supp({a, b}->{c}) = supp({a, b, c}) =< supp({a, c}) = supp({a}->{c}) Conf({a, b}->{c})= supp({a, b, c})/ supp({a, b}) Conf({a}->{c})= supp({a, c})/ supp({a})