אביב-תשס"ה236363- dbms, שפות שאילתה: ra1 שפות שאילתה מתמטיות...
Post on 20-Dec-2015
242 views
TRANSCRIPT
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 1
שפות שאילתה מתמטיותלמודל הרלציוני
התייחסות לרלציות שפות שאילתה מתמטיות :כאל קבוצות של רשומות )ללא חזרות וללא
משמעות לסדר(.
השפות שנלמד בקורס:(.RAאלגברה רלציונית )1.
(.DRCתחשיב רלציוני על תחומים )2.
(.TRCתחשיב רלציוני על רשומות )3.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 2
מסד שתייני הבירה
drinker)dname, dcity(.שם שתיין ועיר מגוריו - pub)pname, pcity(.שם של פאב והעיר שבה הוא נמצא - beer)bname, btype(. שם של בירה והסוג שלה - frequents)dname, pname(שתיין נוהג לבקר בפאב – serves)pname, bname(.פאב מגיש בירה – likes)dname, bname(.שתיין אוהב בירה -
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 3
ERDתיאור המסד על ידי
drinker pubfrequents
serves
beer
likes
dname dcity pcitypname
btypebname
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 4
מסד שתייני הבירה - המשך
dnamedcity
MosheHaifa
YossiTelAviv
AviHaifa
LiorNatania
Pnamepcity
HaShmuraHaifa
DartsTelAviv
MartefHaifa
CamelotNatania
bnamebtype
Becklight
Camelotroot
Guinesslager
Tuborgdark
drinker: pub:
beer:
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 5
dnamepname
MosheHaShmura
YossiDarts
AviMartef
YossiMartef
pnamebname
HaShmuraTuborg
DartsGuiness
MartefBeck
HashmuraGuiness
dnamebname
MosheGuiness
YossiTuborg
YossiBeck
AviBeck
:frequents
:serveslikes:
מסד שתייני הבירה - המשך
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 6
אלגברה רלציוניתRelational Algebra
-בRA.מוגדרים אופרטורים הפועלים על רלציות ,התוצאה של כל אופרטור היא בעצמה רלציה
שעליה אפשר להפעיל אופרטור נוסף, וכן הלאה...RA( היא שפה פקודתית imperative ולא )
הצהרתית
(declarative.) כלומר בשפה זו אומרים במפורש אלו אופרטורים
יש להפעיל ובאיזה סדר.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 7
RA: set-of-mapping אוset-of-list
-לRA :שתי גרסאות .1Set-of-mapping.עם שמות לעמודות
.2Set-of-list.בלי שמות לעמודות
שתי הרלציות הבאות set-of-mapping: לפי דוגמא1.שוות:
r)a, b( = {)1, 2(, )3, 4(} s)b ,a( = {)2, 1(, )4, 3(} הרלציות הבאות שונות:set-of-listלעומת זאת, לפי
t = {)1, 2(, )3, 4(} u = {)2, 1(, )4, 3(}
בלבדset-of-mappingבהמשך, אנו נתייחס לגרסא של 2.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 8
RAאופרטורים בסיסיים ב-
הן רלציות(:s ו-rאופרטורים מתורת הקבוצות ) 1. - איחודr s - חיתוךr s - חיסורr s - מכפילה קרטזיתr s
אופרטורים נוספים:2.
attrsrבחירת עמודות - 1.
condrבחירת שורות - 2.
ρaa1,bb1 - שינוי שם3.r
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 9
– המשךRAאופרטורים ב-
האופרטור "משלים" אינו מוגדר כי איננו רוציםלקבל רלציות אינסופיות.
חמשת האופרטורים , , , , , ρ הם . אפשר להגדיר RAהאופרטורים הבסיסיים ב-
באמצעותם את כל שאר האופרטורים שנראה. תרגיל: בטאו את האופרטור. :פתרוןr s = r )r s(
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 10
– המשךRAאופרטורים ב-
-בset-of-mapping אפשר להפעיל את ( בין האופרטורים מתורת הקבוצות )מלבד
)ללא חשיבות אותן עמודותרלציות שיש להן לסדר העמודות(.
:דוגמאשתי הרלציות:
r)a, b( = {)1, 2(, )3, 4(} s)b ,a( = {)2, 1(, )4, 3(}
שוות זו לזו, ולכן
r s = r
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 11
RA( בחירה – ( והיטל ))
-התנאי הבוליאני שב:יכול לכלול ,= ,< השוואה בין שתי עמודות ע"י אחד מסימני היחס.'וכו .השוואה בין עמודה לקבוע שילוב של השוואות כאלה ע"י הקשרים הלוגיים, ,
דוגמאות(r=r)a,b():ar יחזיר רלציה שמכילה את העמודה - a-ב r.
a=br-יחזיר רלציה שמכילה את השורות ב - r שמזדהות על .b ו-aהערכים של התכונות
ρaa1,bb1r יחזיר את - r)a1,b1(-שזהה ל r.פרט לשמות התכונות
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 12
דוגמאות
אלו בירות יוסי אוהב?1דוגמא :
dname=‘Yossi’likes
BeckYossi
BeckAvi
TuborgYossi
GuinessMoshe
bnamedname
Likes:
BeckYossi
TuborgYossi
bnamedname
התוצאה:•
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 13
דוגמאות – המשך
כדי לבחור את שמות הבירות, בלי לחזור עלYossi כל פעם:
dname=‘Yossi’likes
BeckYossi
TuborgYossi
bnamedname
Beck
Tuborg
bname
dname=‘Yossi’likes:
( )bnameהתוצאה:•
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 14
דוגמאות - המשך...
אלו בירות יוסי אוהב, או מוגשות ב"השמורה"?2דוגמא : bname)dname=‘Yossi’likes( bname)pname=‘HaShmura’serves(
אלו בירות יוסי אוהב, ואינן מוגשות 3דוגמא :ב"השמורה"?
bname)dname=‘Yossi’likes( bname)pname=‘HaShmura’serves(
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 15
דוגמאות - המשך...
.הצלבת מידע: מכפלה קרטזית אלו פאבים נמצאים בעיר שיוסי גר בה?4דוגמא :
pub:
TelAvivYossi
HaifaMoshe
dcitydname
NataniaCamelot
HaifaMartef
TelAvivDarts
HaifaHaShmura
pcitypnamedrinker:
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 16
1דוגמא – שלב
dnamedcitypnamepcity
MosheHaifaHaShmuraHaifa
MosheHaifaDartsTelAviv
MosheHaifaMartefHaifa
MosheHaifaCamelotNatania
YossiTelAvivHaShmuraHaifa
YossiTelAvivDartsTelAviv
YossiTelAvivMartefHaifa
YossiTelAvivCamelotNatania
drinker pub:
dname=‘Yossi’p
city=dcity
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 17
TelavivDartsTelAvivYossi
pcitypnamedcitydname
dname=‘Yossi’pcity=dcity(drinker pub):
שלב – 2דוגמא
Darts
pname
pname(dname=‘Yossi’pcity=dcity(drinker pub)):
שלב – (3דוגמא תוצאה )
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 18
דוגמאות - המשך...
בתוצאה של מכפילה קרטזית עשויות להיותמספר עמודות בעלות אותו שם.
כדי להבדיל ביניהן אפשר להוסיף את שםהרלציה כקידומת לפני שם העמודה )או
להוסיף מספר לאחר השם(.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 19
דוגמאות - המשך
lagerGuiness
darkTuborg
roofCamelot
LightBeck
btypebname
Beer:
BeckYossi
TuborgYossi
GuinessMoshe
bnamedname
Likes:
.5דוגמא אוהבים: שהם הבירות וסוגי השתיינים שמות
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 20
dnamelikes.bnamebeer.bnamebtype
MosheGuinessBecklight
MosheGuinessCamelotroof
MosheGuinessGuinesslager
MosheGuinessTuborgdark
YossiTuborgBecklight
YossiTuborgCamelotroof
YossiTuborgGuinesslager
YossiTuborgTuborgdark
YossiBeckBecklight
YossiBeckCamelotroof
YossiBeckGuinesslager
YossiBeckTuborgdark
1דוגמא – שלב
likes beer:
likes.bname=beer.bname
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 21
dnamelikes.bnamebeer.bname
btype
MosheGuinessGuinesslager
YossiTuborgTuborgdark
YossiBeckBecklight
2דוגמא – שלב
likes.bname=beer.bname(likes beer):
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 22
3דוגמא –שלב
dname,btype(likes.bname=beer.bname(likes beer)):
dnamebtype
Moshelager
Yossidark
Yossilight
ע"י שימוש באופרטור שינוי שם: וא
dname,btype(lbname=bname(( bnamelbnamelikes) beer))
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 23
Joinצרוף -
מכפלה קרטזית + בחירה = צירוף( Join:)
r s ⋈ condition)r s(
הפאבים: " דוגמא• מהם השאילתה את " גם לכתוב יכולנו בה גר שיוסי בעיר שנמצאים
כך:pname(drinker ⋈ pub)
condition
dname=‘Yossi’ pcity=dcity
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 24
natural joinצרוף טבעי -
מקרה מיוחד של צרוף שבו תנאי הבחירה הוא שוויון:s וב-rבין כל העמודות שיש להן אותו שם ב-
r ⋈ sattributes of r and s without duplication)equal values at identically-named attributes)r s((
-כמובן, אופרטור זה מוגדר רק בset-of-mappings ,כאשר יש שמות לעמודות.
למעשה, צרוף טבעי איננו בדיוק צרוף, בגלל פעולתההיטל.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 25
צרוף טבעי - המשך
?אלו פאבים מגישים בירה שיוסי אוהב
pname)dname=‘Yossi’)serves ⋈ likes((:או בצורה יעילה יותר
pname)serves ⋈ dname=‘Yossi’likes( יעילות: השאילתה האחרונה יעילה יותר בגלל
שהצרוף מבוצע בין טבלאות קטנות יותר, שכבר עברו את פעולת הבחירה.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 26
צירוף טבעי – דוגמא
?דוגמא: מה מחזירה השאילתה הבאה
dname)frequents ⋈)serves ⋈ likes((
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 27
serves ⋈ likes: 1דוגמא – שלב
BeckMartef
GuinessHashmura
GuinessDarts
TuborgHaShmura
bnamepname
:serves
BeckYossi
BeckAvi
TuborgYossi
GuinessMoshe
bnamedname
likes:
|
pnamebnamedname
HaShmuraTuborgYossi
DartsGuinessMoshe
HashmuraGuinessMoshe
MartefBeckYossi
MartefBeckAvi
serves ⋈ likes:
הביטוי serves ⋈ likes
שלשות נותן , בירה פאב של
כך ושתייןמגיש שהפאב
הבירה אתאוהב והשתיין
אותה
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 28
:2שלב frequents ⋈)serves ⋈ likes(
MartefAvi
MartefYossi
DartsYossi
HaShmoraMoshe
pnamedname
:frequents
AviBeckMartef
YossiBeckMartef
MosheGuinessHashmura
MosheGuinessDarts
YossiTuborgHaShmura
dnamebnamepnameserves ⋈ likes:
AviBeckMartef
YossiBeckMartef
MosheGuinessHashmura
dnamebnamepname
frequents ⋈(serves ⋈ likes):עם הצירוף
frequents את רק משאירשבהן השלשותנוהג גם השתיין
בפאב לבקר
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 29
)תוצאה(3דוגמא – שלב
:השאילתה
dname)frequents ⋈ )serves ⋈ likes((
פתרון: אנשים המבקרים לפחות בפאב אחדהמגיש בירה שאהובה עליהם:
dname
Moshe
Yossi
Avi
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 30
חילוק
"אופרטור הצרוף שימושי לשאילתות בסגנון של "קיים(.)
( "לשאילתות מסוג "לכל יש אופרטור )אחר: מרוכב חילוק.
התוצאה שלr s היא הרשומות כך שכל השלמה .r נותנת רשומה ב-sשלהן עם רשומה מ-
חילוק היא הפעולה ההפוכה, במובן מסוים, למכפלהקרטזית.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 31
חילוק
אםR, S הן הסכמות של הרלציות r, s ,בהתאמה .S Rאז החילוק מוגדר אם
הסכמה של התוצאה היאR\S.:התוכן מוגדר ע"י
r s R\S)r( \ R\S))R\S)r( s( \ r(
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 32
חילוק - דוגמא
ABCD
1111
2112
2222
2332
BC
11
22
AD
22
r= s= r s=
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 33
חילוק – דוגמא
הפאבים שמגישים בירה בכל: מי מבקר דוגמא "טובורג"?
עבור השתיינים בתוצאה, לכל פאב שמגיש הסבר :בירה טובורג, קיימת רשומה מתאימה
)המבטאת שהשתיין מבקר בפאב frequentsב-זה(.
פתרון:
frequents pname)bname=‘Tuborg’serves(
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 34
Semijoinצרוף למחצה -
-מסומן ב( צרוף טבעי למחצהr s⋉ מכיל את כל ) )על s שמסכימות עם רשומה כלשהי מ-rהרשומות מ-
העמודות המשותפות(:
r s ⋉ attributes of r )r ⋈ s( -היתרון: מצמצם, בעוד ש⋈ מרחיב לעיתים ⋊
(. לאחסון תוצאות ביניים של חישוב)יותר יעיל
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 35
Semijoinדוגמא -
נגדיר את הרלציות: R)A,B(, S)B,C(, T)A,D(, U)D,E(,V)C,A(
במקום לחשבA)R)A,B( ⋈ S)B,C( ⋈ T)A,D( ⋈ U)D,E((
⋊))R)A,B( S)B,C(( )T)A,D( U)D,E((A )ניתן לחשב ⋉ ⋉
לעומת זאת, אתA)R)A,B( ⋈ S)B,C( ⋈ V)C,A(( לא ניתן לחשב באופן דומה.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 36
⋈מתי אפשר לחשב שאילתת בלבד? ו- ⋊ע"י
שצמתיו מקשרעץ קיים אם ורק אם אפשרי הדבר הן הסכמות של הרלציות המשתתפות בשאילתה, והשורש שלו מכיל את כל האטריביוטים שעליהם
מתבצע ההיטל.
הוא עץ שבו לכל אטריביוט מקשרהגדרה: עץ A Aהמושרה על הצמתים המכילים את תת העץ
הוא קשיר.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 37
Semijoinהמשך -
בדוגמא האחרונה: המעגליות של האטריביוטיםהמופיעים בסכמה אינה מאפשרת בניית עץ קשיר.
לכן, לא ניתן לבטא אתA)R)A,B( ⋈ S)B,C( ⋈ V)C,A(( .Semijoinבאמצעות
R(A,B)
S(B,C) V(C,A)
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 38
Semijoinדוגמא -
עבורA)R)A,B( ⋈ S)B,C( ⋈ T)A,D( ⋈ U)D,E(( קיים העץ הקשיר הבא:
:ולכן ניתן לבטא אותה ע"י
A))R)A,B( S)B,C(( )T)A,D( U)D,E(((.⋉ ⋉ ⋉
-בתוצאה הוא מלמעלה למטה ואילו הסדר ⋊הערה: כיוון ה הסדר בין אחים איננו משנה..הוא מהעלים לשורש
R(A,B)
S(B,C) T(A,D)
U(D,E)
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 39
אלגוריתם לבניית עץ מקשר :⋈עבור שאילתת
⋈רשום את הסכמות של הרלציות המשתתפות ב- 1.
בצע עד שאין יותר שינויים:2. ואינו נמצא אם קיים אטריביוט שמופיע בסכמה בודדתא-
מחק אותו.בהטלה – אם קיימת סכמה שמוכלת בסכמה אחרת – מחק ב-
אותה.
אם נשארה סכמה אחת השווה להטלה - העץ 3.נבנה ע"י מעבר על מחיקות הסכמות, בסדר הפוך:
נמחקה בגלל שהייתה Rj אם Ri Rjקיימת קשת .Riמוכלת ב-
- לא קיים עץ מקשר. אחרת4.
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 40
– דוגמאSemijoinבניית עץ
:נתוןR1)A, B, C(, R2)B, C, D(, R3)D, E, F(, R4)A, G( האם .
בלבד?⋊ ע"י ו- )A)R1 ⋈ R2 ⋈ R3 ⋈ R4אפשר לחשב את פתרון: :נתחיל מכל הסכמותR1)A, B, C( R2)B, C, D( R3)D, E, F( R4)A, G(
נמחק אתG-מ R4 : R1)A, B, C( R2)B, C, D( R3)D, E, F( R4)A(
נמחק אתR4 :-כי היא מוכלת בR1 R1)A, B, C( R2)B, C, D( R3)D, E, F(
נמחק אתE, F-מ R3 : R1)A, B, C( R2)B, C, D( R3)D(
נמחק אתR3-כי היא מוכלת ב R2 : R1)A, B, C( R2)B, C, D(
נמחק אתD-מ R2 : R1)A, B, C( R2)B, C(
נמחק אתR2-כי היא מוכלת ב R1 : R1)A, B, C(
נמחק אתB, C-מ R1 : R1)A(
אביב-תשס"ה 236363- DBMS, שפות שאילתה: RA 41
דוגמא – המשך
אי אפשר לבצע עוד שינויים. קיבלנו סכמה אחת.השווה
קשיר:ץולכן קיים ע
לכן, השאילתהA)R1 ⋈ R2 ⋈ R3 ⋈ R4( -שקולה ל A))R1 ⋉ )R2 ⋉ R3(( ⋉ R4(.
R1
R4
R3
R2