1 / 15

תחשיב רלציוני על תחומים 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 ) היא נוסחא בלוגיקה מסדר ראשון. משמעות:

gent
Télécharger la présentation

תחשיב רלציוני על תחומים 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. דוגמאות • דוגמא 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

  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’)} 236363- DBMS, שפות שאילתא: DRC

  5. דוגמאות - המשך • דוגמא 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 |dc (drinker(dn, dc))  pn, bn (serves(pn, bn) bn’( serves(pn, bn’)  likes(dn, bn’) ))} 236363- DBMS, שפות שאילתא: DRC

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

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

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

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

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

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

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

  13. כללים ליצירת נוסחאות 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

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

  15. דוגמאות - המשך • דוגמא 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

More Related