1 / 21

תחשיב רלציוני על תחומים Domain Relational Calculus

תחשיב רלציוני על תחומים Domain Relational Calculus. DRC הוא הצהרתי, כמו SQL : מבטאים בו רק מה רוצים שתהיה התוצאה, ולא איך לחשב אותה. כל שאילתה ב- DRC היא מהצורה {<x 1 ,x 2 ,…x i > | F(x 1 ,x 2 ,…x i )} , כאשר F(y 1 ,y 2 ,…y i ) היא נוסחא בלוגיקה מסדר ראשון. משמעות:

egan
Download Presentation

תחשיב רלציוני על תחומים Domain Relational Calculus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. תחשיב רלציוני על תחומיםDomain Relational Calculus • DRC הוא הצהרתי, כמו SQL: מבטאים בו רק מה רוצים שתהיה התוצאה, ולא איך לחשב אותה. • כל שאילתה ב-DRC היא מהצורה {<x1,x2,…xi> | F(x1,x2,…xi)}, כאשר F(y1,y2,…yi) היא נוסחא בלוגיקה מסדר ראשון. • משמעות: כל הnיות <c1,c2,…ci> כך שתחת ההשמהx1= c1, x2 = c2, …xi = ci בF- יהיה ערכה של FTrue. • המשתנים בפרדיקט אינם מייצגים רשומות, אלא ערכי שדות בודדים מהתחום D שמתוכו נלקחים ערכי מסד הנתונים. • רשומה מיוצגת ע"י רשימה של משתנים המוקפת בסוגריים זוויתיים, לדוגמא <a,b,c>. - 236363 DBMS, שפות שאילתא: DRC

  2. כללים ליצירת נוסחאות DRC • הנוסחה חייבת להיות בנויה לפי הכללים הבאים: נוסחאות אטומיות: • שייכות של רשומה <x1,x2,…xi> לרלציה r: <x1,x2,…xi>r או r(x1,x2,…xi) • יחס בין שדה x לשדה או קבוע y: xy, כאשר  הוא אחד מסימני היחס =, , >, <, ,  נוסחאות מורכבות: אם F2, F1נוסחאות, גם הביטויים הבאים הם נוסחאות: F1 ⋀ F2 F1 ⋁ F2 F1 F1  F2 t(F1) t(F1) - 236363 DBMS, שפות שאילתא: DRC

  3. תזכורת: מסד שתייני הבירה • drinker(dname, dcity) - שם שתיין ועיר מגוריו. • pub(pname, pcity) - שם של פאב והעיר שבה הוא נמצא. • beer(bname, btype) - שם של בירה והסוג שלה . • frequents(dname, pname) – שתיין נוהג לבקר בפאב • serves(pname, bname) – פאב מגיש בירה. • likes(dname, bname) - שתיין אוהב בירה. - 236363 DBMS, שפות שאילתא: DRC

  4. דוגמאות • דוגמא 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’)} - 236363 DBMS, שפות שאילתא: DRC

  5. דוגמאות - המשך • דוגמא 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’)} - 236363 DBMS, שפות שאילתא: DRC

  6. דוגמאות - המשך • דוגמא 4: מי הם השתיינים שבכל פאב יש בירה שהם אוהבים? • ניסיון 1: {{<dn> |pn bn (serves(pn, bn)⋀ likes(dn, bn) ) • נקבל רלציה ריקה! יש ערך אפשרי ‘xxx’ למשתנה pn שמפיל את כולם. • ניסיון 2: {<dn> |pn bn’ (serves(pn, bn’)  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)))} - 236363 DBMS, שפות שאילתא: DRC

  7. בטיחות • הבעיה:DRC "חזק" מדי – ניתן לכתוב שאילתה המחזירה תוצאה לא חסומה (כל הערכים האפשריים בתחום). • דוגמא: מה תחזיר השאילתא אם נשמיט את החלק השני שלה? {<dn> |  pn, bn’ (serves(pn, bn’)   bn( serves(pn, bn)  likes(dn, bn) ))} אם טבלת serves ריקה, אזי נקבל את קבוצת כל הערכים האפשריים עבור dn. - 236363 DBMS, שפות שאילתא: DRC

  8. בטיחות – המשך • מוטיבציה: הגבלת DRC לנוסחאות "טובות" – אשר לא תלויות בתחום הערכים של המשתנים, אלא רק בתוכן המסד (domain independent). • בעיה נוספת: קשה לדעת האם נוסחה נתונה תלויה בתחום. • פתרון: הגדרת כללים סינטקטיים, אשר יבטיחו כי הנוסחה היא בלתי תלויה בתחום: • קל לבדוק האם נוסחה בטוחה (סינטקטית) או לא • כל נוסחה בטוחה (סינטקטית) היא בלתי תלויה בתחום • נוסחה שאינה תלויה בתחום אינה דווקא בטוחה, אבל תמיד קיימת נוסחה אחרת שקולה לה, שהיא כן בטוחה (סינטקטית). - 236363 DBMS, שפות שאילתא: DRC

  9. בטיחות – SafeDRC • ביטוי Safe-DRC הוא ביטוי שנוצר לפי הכללים הבאים: • נוסחאות אטומיות בטוחות: • R(x1,…xi) • xi = aכאשר a הינו קבוע. • סגור: • אם F בטוחהו-x משתנה חופשי שלה, אז  x F הינה נוסחה בטוחה. • אם F1, F2 בטוחות עם אותם משתנים חופשיים המופיעים במפורש, אז F1 F2 בטוחה. - 236363 DBMS, שפות שאילתא: DRC

  10. SafeDRC – המשך • סגור (המשך): • אם כל אחת מ- F1 ,F2 ,... Fm ( m > 1)היא אחת מהבאים: • בטוחה • מהצורה Giעבור Gi בטוחה • נוסחאאטומית (בטוחה או לא) אז F1  F2 ...  Fm בטוחה אם כל המשתנים החופשיים המופיעים בה הםמתוחמים. - 236363 DBMS, שפות שאילתא: DRC

  11. SafeDRC – המשך משתנה x הוא מתוחם ב- F1  F2 ...  Fm אם הוא מקיים אחד מהתנאים: • x מופיע חופשי ב- Fi שהיא עצמה נוסחא בטוחה (לא בשלילה) • x מופיע ב- Fi, שהיא מהצורה x=y או y=x, כאשר y מתוחם דוגמאות: • הנוסחה x=y איננה בטוחה, כי אין כלל היוצר אותה. • הנוסחה x=12  x=y בטוחה, כי שני המשתנים מתוחמים. - 236363 DBMS, שפות שאילתא: DRC

  12. SafeDRC – דוגמאות • דוגמא: • הנוסחה r(x,y,z) (p(x,y)  q(y,z)) איננה בטוחה, כי ה-  מתבצע על נוסחאות עם משתנים חופשיים שונים. • הנוסחה שקולה לנוסחה: r(x,y,z) p(x,y) q(y,z), שהיא בטוחה, ולכן הנוסחה המקורית גם בלתי תלויה בתחום. • דוגמא: מי הם השתיינים שבכל פאב יש בירה שהם אוהבים? {<dn> |  pn,bn’ (serves(pn, bn’)    bn( serves(pn, bn)  likes(dn, bn) ) )  dc (drinker(dn, dc))} - 236363 DBMS, שפות שאילתא: DRC

  13. תחשיב רלציוני על רשומותTuple Relational Calculus • TRC דומה ל-DRC עם מספר הבדלים. • כל שאילתא ב-TRC היא מהצורה {t | P(t)}, כאשר P(t)הוא פרדיקט שאומר האם רשומה t עונה על תנאי השאילתא. • לעיתים מציינים את שמות השדות ב-t בסוגרייםמרובעים, לדוגמא {t[A,B,C] | P(t)}. • הערכים עבור השדות של רשומות אלה נלקחים, כאמור, מתוך התחום D. לדוגמא, במסד שתייני הבירה, D הוא תחום המחרוזות. - 236363 DBMS, שפות שאילתא: DRC

  14. כללים ליצירת נוסחאות TRC • בתוך הנוסחה מתייחסים לשדות של רשומה t ע"י [שם שדה] t. הנוסחה חייבת להיות בנויה לפי הכללים הבאים: נוסחאות אטומיות: • שייכות של רשומה t לרלציה r: t  r או r(t) • יחס בין שדה x לשדה y או קבוע : t[x]s[y] אוt[x], כאשר  הוא אחד מסימני היחס =, , >, <, ,  נוסחאות מורכבות: אם F2, F1נוסחאות, גם הביטויים הבאים הם נוסחאות: F1 ⋀ F2 F1 ⋁ F2 F1 F1  F2 t(F1)t(F1) - 236363 DBMS, שפות שאילתא: DRC

  15. דוגמאות • דוגמא 1: אלו בירות יוסי אוהב? {t | t  likes ⋀ t[dname] = ‘Yossi’} • כדי לבחור רק את שמות הבירות, בלי לחזור על Yossi כל פעם: {t[bname] |  u (u  likes ⋀ u[dname] = ‘Yossi’ ⋀ u[bname] = t[bname])} - 236363 DBMS, שפות שאילתא: DRC

  16. דוגמאות - המשך • דוגמא 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’)} - 236363 DBMS, שפות שאילתא: DRC

  17. שאלה ממבחן – חורף 08/09 מועד א' • נתונות טבלאות היחסים הבאות. שימו לב לכך שטבלאות אלו מייצגות מידע על קורסים, סטודנטים ומרצים. • Courses(Cid, Number, Title, Semester) • CourseInfo(Cid, Tid, Room, Time, TeacherInCharge) • Teachers(Tid, Name, Status) • Students(Sid, Name) • Enrollment(Sid, Cid, Tid) - 236363 DBMS, שפות שאילתא: DRC

  18. שאלה 1 • כתבו מה מחשבת השאילתה הבאה: {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]) )) } - 236363 DBMS, שפות שאילתא: DRC

  19. פתרון • השאילתה מחזירה את כל הסמסטרים כך שקיים קורס בסמסטר ואין 2 קורסים שונים הניתנים באותו הסמסטר כך שזמן ההרצאה והכיתה בה הם ניתנים הוא זהה. - 236363 DBMS, שפות שאילתא: DRC

  20. שאלה 2 • כתבו שאילתה בתחשיב היחסים (DRC) המוצאת זוגות של שם קורס (Title) וסמסטר, כך שבסמסטר היו רשומים לקורס בדיוק שני סטודנטים. • שם קורס וסמסטר – נמצאים בטבלת courses • רישום לקורס של סטודנטים – נמצא בטבלת enrollment • קישור בין הטבלאות – ע"י השדה cid - 236363 DBMS, שפות שאילתא: DRC

  21. פתרון {<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))))} - 236363 DBMS, שפות שאילתא: DRC

More Related