תחשיב רלציוני על תחומים Domain Relational Calculus
description
Transcript of תחשיב רלציוני על תחומים Domain Relational Calculus
2012אביב DBMS 236363 שפות שאילתה - DRC 1
תחשיב רלציוני על תחומיםDomain Relational Calculus
DRC הוא הצהרתי, כמו SQL ,מבטאים בו רק מה רוצים שתהיה התוצאה :ולא איך לחשב אותה.
-כל שאילתה בDRC היא מהצורה <{x1,x2,…xi< | F(x1,x2,…xi)} כאשר , F(y1,y2,…yi).היא נוסחא בלוגיקה מסדר ראשון
:משמעות יהיה -F בx1= c1, x2 = c2, …xi = ci כך שתחת ההשמה<c1,c2,…ci>יות n כל ה
.F Trueערכה של
המשתנים בפרדיקט אינם מייצגים רשומות, אלא ערכי שדות בודדים שמתוכו נלקחים ערכי מסד הנתונים.Dמהתחום
,רשומה מיוצגת ע"י רשימה של משתנים המוקפת בסוגריים זוויתיים .<a,b,c>לדוגמא
2012אביב DBMS 236363 שפות שאילתה - DRC 2
DRCכללים ליצירת נוסחאות
:הנוסחה חייבת להיות בנויה לפי הכללים הבאיםנוסחאות אטומיות:
שייכות של רשומה<x1,x2,…xi> לרלציה r:
<x1,x2,…xi<r או r(x1,x2,…xi) יחס בין שדהx לשדה או קבוע y: xy כאשר , הוא אחד מסימני
, <, >, , =, היחס
נוסחאות, גם הביטויים F2 , F1 אם נוסחאות מורכבות:הבאים הם נוסחאות:
F1 F⋀ 2 F1 F⋁ 2 F1 F1 F2 t(F1) t(F1)
2012אביב DBMS 236363 שפות שאילתה - DRC 3
תזכורת: מסד שתייני הבירה
drinker(dname, dcity).שם שתיין ועיר מגוריו - pub(pname, pcity) שם של פאב והעיר שבה הוא -
נמצא.beer(bname, btype). שם של בירה והסוג שלה - frequents(dname, pname) שתיין נוהג לבקר –
בפאבserves(pname, bname).פאב מגיש בירה – likes(dname, bname).שתיין אוהב בירה -
2012אביב DBMS 236363 שפות שאילתה - 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’){⋀
2012אביב DBMS 236363 שפות שאילתה - 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’⋀ ⋀ ){
2012אביב DBMS 236363 שפות שאילתה - 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))){
2012אביב DBMS 236363 שפות שאילתה - DRC 7
בטיחות
הבעיה: DRC חזק" מדי – ניתן לכתוב שאילתה" המחזירה תוצאה לא חסומה (כל הערכים האפשריים
בתחום). דוגמא: מה תחזיר השאילתא אם נשמיט את החלק
השני שלה?
}>dn< | pn, bn’ (serves(pn, bn’)
bn( serves(pn, bn) likes(dn, bn) ) ){
ריקה, אזי נקבל את קבוצת כל servesאם טבלת .dnהערכים האפשריים עבור
2012אביב DBMS 236363 שפות שאילתה - DRC 8
תחשיב רלציוני על רשומותTuple Relational Calculus
TRC-דומה ל DRC.עם מספר הבדלים -כל שאילתא בTRC היא מהצורה {t | P(t)} כאשר ,
P(t) הוא פרדיקט שאומר האם רשומהt עונה על תנאי השאילתא.
-לעיתים מציינים את שמות השדות ב tבסוגריים .{t[A,B,C] | P(t)}מרובעים, לדוגמא
,הערכים עבור השדות של רשומות אלה נלקחים. לדוגמא, במסד שתייני Dכאמור, מתוך התחום
הוא תחום המחרוזות. Dהבירה,
2012אביב DBMS 236363 שפות שאילתה - DRC 9
TRCכללים ליצירת נוסחאות
בתוך הנוסחה מתייחסים לשדות של רשומהt ע"י . הנוסחה חייבת להיות בנויה לפי הכללים הבאים:t]שם שדה[
נוסחאות אטומיות: שייכות של רשומהt לרלציה r: t r או r(t) יחס בין שדהx לשדה y או קבוע : t[x]s[y]או t[x] ,
, <, >, , =, הוא אחד מסימני היחס כאשר נוסחאות, גם הביטויים F2 , F1 אם נוסחאות מורכבות:
הבאים הם נוסחאות:
F1 F⋀ 2 F1 F⋁ 2 F1 F1 F2 t(F1) t(F1)
2012אביב DBMS 236363 שפות שאילתה - DRC 10
דוגמאות
אלו בירות יוסי אוהב?1דוגמא :
}t | t likes t[dname] = ‘Yossi’{⋀
כדי לבחור רק את שמות הבירות, בלי לחזור עלYossiכל פעם :
}t[bname] | u (u likes u[dname] = ‘Yossi’ ⋀
⋀ u[bname] = t[bname]){
2012אביב DBMS 236363 שפות שאילתה - DRC 11
דוגמאות - המשך
שמות השתיינים וסוגי הבירות שהם 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’){⋀
2012אביב DBMS 236363 שפות שאילתה - DRC 12
מועד 08/09שאלה ממבחן – חורף א'
נתונות טבלאות היחסים הבאות. שימו לב לכךשטבלאות אלו מייצגות מידע על קורסים,
סטודנטים ומרצים. Courses(Cid, Number, Title, Semester) CourseInfo(Cid, Tid, Room, Time,
TeacherInCharge) Teachers(Tid, Name, Status) Students(Sid, Name) Enrollment(Sid, Cid, Tid)
2012אביב DBMS 236363 שפות שאילתה - DRC 13
1שאלה
:כתבו מה מחשבת השאילתה הבאה}t[Semester] |
uCourses(u[Semester]=t[Semester] v,wCourses(
(v[Semester] = u[Semester] w[Semester] = u[Semester] v[Cid]w[Cid])
i,jCourseInfo (i[Cid]=v[Cid] j[Cid]=w[Cid] i[Room]=j[Room]
i[Time]=j[Time]) )) {
2012אביב DBMS 236363 שפות שאילתה - DRC 14
פתרון
השאילתה מחזירה את כל הסמסטרים כך שקיים קורסים שונים הניתנים 2קורס בסמסטר ואין
באותו הסמסטר כך שזמן ההרצאה והכיתה בה הם ניתנים הוא זהה.
2012אביב DBMS 236363 שפות שאילתה - DRC 15
2שאלה
) כתבו שאילתה בתחשיב היחסיםDRC () וסמסטר, כך Titleהמוצאת זוגות של שם קורס (
שבסמסטר היו רשומים לקורס בדיוק שני סטודנטים.
שם קורס וסמסטר – נמצאים בטבלתcourses רישום לקורס של סטודנטים – נמצא בטבלת
enrollment קישור בין הטבלאות – ע"י השדהcid
2012אביב DBMS 236363 שפות שאילתה - DRC 16
פתרון
}>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)))){
2012אביב DBMS 236363 שפות שאילתה - DRC 17
בטיחות – המשך
:הגבלת מוטיבציה DRC לנוסחאות "טובות" – אשר לא תלויות בתחום הערכים של המשתנים, אלא רק בתוכן המסד
)domain independent.(קשה לדעת האם נוסחה נתונה תלויה בתחום.בעיה נוספת :אשר יבטיחו כי הנוסחה סינטקטיים: הגדרת כללים פתרון ,
היא בלתי תלויה בתחום:קל לבדוק האם נוסחה בטוחה (סינטקטית) או לאכל נוסחה בטוחה (סינטקטית) היא בלתי תלויה בתחום נוסחה שאינה תלויה בתחום אינה דווקא בטוחה, אבל תמיד קיימת
נוסחה אחרת שקולה לה, שהיא כן בטוחה (סינטקטית).
2012אביב DBMS 236363 שפות שאילתה - DRC 18
SafeDRCבטיחות –
ביטויSafe-DRC הוא ביטוי שנוצר לפי הכללים הבאים:
:נוסחאות אטומיות בטוחות
.1R(x1,…xi)
.2 xi = a כאשרa.הינו קבוע
:סגור
הינה x F משתנה חופשי שלה, אז xו- בטוחהFאם 1.נוסחה בטוחה.
בטוחות עם אותם משתנים חופשיים המופיעים F1, F2אם 2. בטוחה.F1 F2במפורש, אז
2012אביב DBMS 236363 שפות שאילתה - DRC 19
SafeDRCהמשך –
:(המשך) סגור
היא אחת F1 ,F2 ,... Fm ( m < 1)אם כל אחת מ- 3.מהבאים:
בטוחה מהצורה Gi עבורGiבטוחה אטומית (בטוחה או לא) נוסחא
בטוחה אם כל המשתנים החופשיים F1 F2 ... Fmאז מתוחמים. המופיעים בה הם
2012אביב DBMS 236363 שפות שאילתה - DRC 20
SafeDRCהמשך –
אם הוא F1 F2 ... Fm ב- מתוחם הוא xמשתנה מקיים אחד מהתנאים:
x -מופיע חופשי ב Fi שהיא עצמה נוסחא בטוחה (לא בשלילה)
x -מופיע ב Fi שהיא מהצורה ,x=y או y=x כאשר ,y מתוחם
דוגמאות: הנוסחהx=y.איננה בטוחה, כי אין כלל היוצר אותה הנוסחהx=12 x=y.בטוחה, כי שני המשתנים מתוחמים
2012אביב DBMS 236363 שפות שאילתה - DRC 21
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’) dc (drinker(dn, dc))
bn( serves(pn, bn) likes(dn, bn) ) ) dc (drinker(dn, dc)){