כללים ליצירת נוסחאות DRC תחשיב רלציוני על תחומים Domain Relational Calculus DRC הואהצהרתי, כמוSQL : מבטאיםבורקמהרוציםשתהיההתוצאה, ולא איךלחשבאותה. כלשאילתהב- DRC היאמהצורה )} i,{<x 1,x 2, x i > F(x 1,x 2, x כאשר ) i F(y 1,y 2, y היאנוסחאבלוגיקהמסדרראשון. משמעות: כלהnיות< <c 1,c 2, c i כךשתחתההשמה x 1 = c 1, x 2 = c 2, x i = c i ב- F יהיה ערכהשלF.True המשתנים בפרדיקט אינם מייצגים רשומות, אלא ערכי שדות בודדים מהתחום D שמתוכו נלקחים ערכי מסד הנתונים. הנוסחהחייבתלהיותבנויהלפיהכלליםהבאים: נוסחאותאטומיות: שייכותשלרשומה< <x 1,x 2, x i לרלציהr : r(x 1,x 2, x i ) או <x 1,x 2, x i > r כאשר הואאחדמסימני,x y לשדהאוקבועy : יחסביןשדהx היחס, <, >,, =, נוסחאותמורכבות: אם F 1, F 2 נוסחאות, גםהביטוייםהבאים הםנוסחאות: F 1 F 2 F 1 F 2 F 1 F 1 F 2 t(f 1 ) t(f 1 ) רשומה מיוצגתע"ירשימהשלמשתניםהמוקפתבסוגרייםזוויתיים, לדוגמא.<a,b,c> DBMS 236363 DRCשפותשאילתה- 1 DBMS 236363 DRCשפותשאילתה- 2 דוגמאות תזכורת: מסד שתייני הבירה dcity) - drinker(dname, שםשתייןועירמגוריו. pcity) - pub(pname, שםשלפאבוהעירשבההוא נמצא.. שם של בירה והסוג שלה - beer(bname, btype) pname) frequents(dname, שתייןנוהגלבקרבפאב bname) serves(pname, פאבמגישבירה. bname) - likes(dname, שתייןאוהבבירה. דוגמא 1 : אלובירותיוסיאוהב? {<dn, bn> <dn, bn> likes dn = Yossi } או: {<dn, bn> likes(dn, bn) dn = Yossi } או: likes(dn, bn) dn = Yossi כדילקבלרקאתשמותהבירות, בליYossi : {<bn> dn(<dn, bn> likes dn = Yossi )} DBMS 236363 DRCשפותשאילתה- 3 DBMS 236363 DRCשפותשאילתה- 4
דוגמאות - המשך דוגמא 2: שמותהשתייניםוסוגיהבירהשהםאוהבים: {<dn, bt> bn (likes(dn, bn) beer(bn, bt))} דוגמא 3: באלועריםמגישיםבירהשיוסיאוהב? {<pc> pn, bn, dn (pub(pn, pc) serves(pn, bn) likes(dn, bn) dn = Yossi )} דוגמאות - המשך דוגמא 4 : מיהםהשתייניםשבכלפאב (המגישבירה) יש בירהשהםאוהבים? ניסיון :1 )} bn) {<dn> pn bn (serves(pn, bn) likes(dn, נקבלרלציהריקה! ישערךאפשרי xxx למשתנהpn שמפילאת כולם. {<dn> pn bn (serves(pn, bn ) :2 ניסיון bn ( serves(pn, bn) likes(dn, bn) ) ) } נקבלאתכלהתחום! תמידנוכללמצואערךלמשתנה bn שייתן False עבור.serves(pn, bn ) הפתרון: {<dn> pn, bn (serves(pn, bn ) bn ( serves(pn, bn) likes(dn, bn) ) dc (drinker(dn, dc)))} DBMS 236363 DRCשפותשאילתה- 5 DBMS 236363 DRCשפותשאילתה- 6 כללים ליצירת נוסחאות TRC תחשיב רלציוני על רשומות Tuple Relational Calculus TRC דומהל- DRC עם מספרהבדלים. כלשאילתאב- TRC היאמהצורה P(t)} t}, כאשר P(t) הואפרדיקטשאומרהאםרשומה t עונהעל השאילתא. תנאי לעיתיםמצייניםאתשמותהשדותב- t בסוגריים מרובעים, לדוגמא P(t)}.{t[A,B,C] הערכיםעבורהשדותשלרשומותאלהנלקחים, כאמור, מתוךהתחום D. לדוגמא, במסדשתייני הבירה, D הואתחוםהמחרוזות. בתוךהנוסחהמתייחסיםלשדותשלרשומה t ע"י [שםשדה] t. הנוסחהחייבתלהיותבנויהלפיהכלליםהבאים: נוסחאותאטומיות: שייכותשלרשומה t לרלציהr : t r או r(t) יחסביןשדהx לשדהy אוקבועα : t[x] s[y] או,t[x] α כאשר הואאחדמסימניהיחס, <, >,, =, נוסחאותמורכבות: אם F 1, F 2 נוסחאות, גםהביטוייםהבאים הםנוסחאות: F 1 F 2 F 1 F 2 F 1 F 1 F 2 t(f 1 ) t(f 1 ) DBMS 236363 DRCשפותשאילתה- 7 DBMS 236363 DRCשפותשאילתה- 8
דוגמאות דוגמאות - המשך דוגמא 1 : אלובירותיוסיאוהב? {t t likes t[dname] = Yossi } בלילחזורעלYossi כדילבחוררקאתשמותהבירות, כלפעם: {t[bname] u (u likes u[dname] = Yossi u[bname] = t[bname])} דוגמא 2: שמות השתיינים וסוגי הבירות שהם אוהבים: {t[dname,type] u,v (u likes v beer u[bname] = v[bname] u[dname] = t[dname] t[type] = v[type])} דוגמא 3: באלועריםמגישיםבירהשיוסיאוהב? {t[pcity] u,v,w(u pub u[pcity] = t[pcity] v serves v[pname] = u[pname] w likes w[bname] = v[bname] w[dname] = Yossi )} DBMS 236363 DRCשפותשאילתה- 9 DBMS 236363 DRCשפותשאילתה- 10 שאלה 1 שאלה ממבחן חורף 09/08 מועד א' נתונותטבלאותהיחסיםהבאות. שימולבלכך שטבלאותאלומייצגותמידעעלקורסים, סטודנטים ומרצים. Courses(Cid, Number, Title, Semester) CourseInfo(Cid, Tid, Room, Time, TeacherInCharge) Teachers(Tid, Name, Status) Students(Sid, Name) Enrollment(Sid, Cid, Tid) כתבומהמחשבתהשאילתההבאה: {t[semester] u Courses(u[Semester]=t[Semester] v,w Courses( (v[semester] = u[semester] w[semester] = u[semester] v[cid] w[cid]) i,j CourseInfo (i[cid]=v[cid] j[cid]=w[cid] i[room]=j[room] i[time]=j[time]) )) } DBMS 236363 DRCשפותשאילתה- 11 DBMS 236363 DRCשפותשאילתה- 12
שאלה 2 פתרון השאילתהמחזירהאתכלהסמסטריםכךשקיים קורסבסמסטרואין 2 קורסיםשוניםהניתניםבאותו הסמסטרכךשזמןההרצאהוהכיתהבההםניתנים זהה. הוא כתבושאילתהבתחשיבהיחסים (DRC) המוצאת זוגותשלשםקורס (Title) וסמסטר, כךשבסמסטר היורשומיםלקורסבדיוקשניסטודנטים. courses בטבלת נמצאים קורס וסמסטר שם רישוםלקורסשלסטודנטים נמצאבטבלת enrollment קישורביןהטבלאות ע"יהשדהcid DBMS 236363 DRCשפותשאילתה- 13 DBMS 236363 DRCשפותשאילתה- 14 בטיחות פתרון {<title,semester> cid,number(courses(cid,number, title,semester) tid1,tid2,sid1,sid2 (sid1 sid2 Enrolment(sid1,cid,tid1) Enrolment(sid2,cid,tid2) sid3,tid (Enrolment(sid3,cid,tid) (sid3=sid1 sid3=sid2))))} בהרצאהמוגדרתתלותתחום( dependency,(domain צורהנורמאלית,SRNF ושיטהלבדוקהאםנוסחהב- SRNF היאתלויתתחום. השקפיםהבאיםמציגיםשיטה נוספתלוודאששאילתות אינןתלויותתחום. החומר בשקפים הבאים לא יופיע במבחן. DBMS 236363 DRCשפותשאילתה- 15 DBMS 236363 DRCשפותשאילתה- 16
בטיחות בטיחות המשך הבעיה: DRC "חזק" מדי ניתןלכתובשאילתה המחזירהתוצאהלאחסומה (כלהערכיםהאפשריים בתחום). מה תחזיר השאילתא אם נשמיט את החלק השני דוגמא: שלה? {<dn> pn, bn (serves(pn, bn ) bn( serves(pn, bn) likes(dn, bn) ) )} אםטבלת serves ריקה, אזינקבלאתקבוצתכלהערכים האפשרייםעבור.dn DBMS 236363 DRCשפותשאילתה- 17 מוטיבציה: הגבלת DRC לנוסחאות "טובות" אשרלאתלויות בתחוםהערכיםשלהמשתנים, אלארקבתוכןהמסד ) domain.(independent בעיהנוספת: קשהלדעתהאםנוסחהנתונהתלויהבתחום. אשריבטיחוכיהנוסחההיא הגדרתכללים סינטקטיים, פתרון: בלתיתלויהבתחום: קללבדוקהאםנוסחהבטוחה (סינטקטית) אולא כלנוסחהבטוחה (סינטקטית) היאבלתיתלויהבתחום נוסחהשאינהתלויהבתחוםאינהדווקאבטוחה, אבלתמידקיימתנוסחה אחרתשקולהלה, שהיאכןבטוחה (סינטקטית). DBMS 236363 DRCשפותשאילתה- 18 המשך בטיחות SafeDRC SafeDRC.1.2 ביטוי Safe-DRC הוא ביטוי שנוצר לפי הכללים הבאים: נוסחאות אטומיות בטוחות: R(x 1, x i ) x i = a סגור:.1.2 כאשרa הינו קבוע. אםF בטוחהו- x משתנהחופשישלה, אזF x הינהנוסחה בטוחה. אם F 1, F 2 בטוחותעםאותםמשתניםחופשייםהמופיעים במפורש, אז F 1 F 2 בטוחה. סגור (המשך):.3 אםכלאחתמ- ( m > 1) F 1,F 2,... F m היאאחתמהבאים: בטוחה בטוחה G i עבור G i מהצורה נוסחאאטומית (בטוחהאולא) אז F 1 F 2... F m בטוחהאםכלהמשתניםהחופשיים המופיעיםבההם מתוחמים. DBMS 236363 DRCשפותשאילתה- 19 DBMS 236363 DRCשפותשאילתה- 20
דוגמאות SafeDRC המשך SafeDRC משתנהx הואמתוחםב- F 1 F 2... F m אםהוא מקייםאחדמהתנאים: x מופיעחופשיב- F i שהיאעצמהנוסחאבטוחה (לא בשלילה) כאשרy אוy=x, שהיאמהצורהx=y F, i מופיעב- x מתוחם דוגמאות: הנוסחהx=y איננהבטוחה, כיאיןכללהיוצראותה. הנוסחהx=y 12=x בטוחה, כישניהמשתניםמתוחמים. דוגמא: הנוסחה q(y,z)) r(x,y,z) (p(x,y) איננהבטוחה, כיה- מתבצעעלנוסחאותעםמשתניםחופשייםשונים. הנוסחהשקולהלנוסחה: q(y,z),r(x,y,z) p(x,y) הנוסחה המקורית גם בלתי תלויה בתחום. ולכן בטוחה, שהיא דוגמא: מיהםהשתייניםשבכלפאבישבירהשהם אוהבים? {<dn> pn,bn (serves(pn, bn ) bn( serves(pn, bn) likes(dn, bn) ) ) dc (drinker(dn, dc))} DBMS 236363 DRCשפותשאילתה- 21 DBMS 236363 DRCשפותשאילתה- 22