ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΦΘΙΝΟΠΩΡΟ 2005 Λύση ΑΣΚΗΣΗΣ #2 Τ. Σελλής ΕΡΩΤΗΜΑ 1: ΣΧΕ ΙΑΣΗ ΚΑΤΑΝΕΜΗΜΕΝΩΝ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ Θεωρούµε τις ακόλουθες καθολικές σχέσεις, που αφορούν µία εταιρία λογισµικού: Τµήµα (Αριθµός_Τµήµατος, Όνοµα_Τµήµατος, Τοποθεσία) Υπάλληλος(Αριθµός_Υπαλλήλου, Αριθµός_Τµήµατος, Ειδικότητα, Μισθός) Προϊόν (Αριθµός_Προϊόντος, Αριθµός_Τµήµατος, Όνοµα_Προϊόντος, Κατηγορία_ Προϊόντος, Τιµή) Πελάτης (Αριθµός_Πελάτη, Ονοµατεπώνυµο, Κατηγορία_Πελάτη) Συµβόλαιο (Αριθµός_Συµβολαίου, Αριθµός_Πελάτη, Αριθµός_Προϊόντος, Ηµεροµηνία) Η εταιρία αποτελείται από περισσότερα του ενός τµήµατα, τα οποία βρίσκονται σε διαφορετικές τοποθεσίες και εξειδικεύονται σε ένα σύνολο από κατηγορίες προϊόντων. Για κάθε προϊόν είναι υπεύθυνο ένα συγκεκριµένο τµήµα. Η Κατηγορία_Προϊόντος µπορεί να πάρει µία από τις ακόλουθες τιµές: «Εµπορικό Πακέτο Λογισµικού», «Υπηρεσίες συντήρησης», «Υπηρεσίες Ανάπτυξης/Σχεδιασµού». Η Τοποθεσία ενός τµήµατος παίρνει µία από τις τιµές: «Αθήνα», «Θεσσαλονίκη», «Πάτρα». Η Κατηγορία_Πελάτη µπορεί να πάρει µία από τις ακόλουθες τιµές: «Μικρός», «Μέτριος», «Μεγάλος». Θεωρούµε τις ακόλουθες σηµαντικές εφαρµογές: 1. Η πρώτη εφαρµογή παρακολουθεί τα προϊόντα της εταιρίας. Ενεργοποιείται από όλες τις τοποθεσίες και επιστρέφει τα ονόµατα των προϊόντων και την τιµή τους ανά κατηγορία προϊόντος. 2. Η δεύτερη εφαρµογή αφορά αυξήσεις µισθών υπαλλήλων. Ενεργοποιείται από την κάθε τοποθεσία για τους υπαλλήλους των τµηµάτων που βρίσκονται στη συγκεκριµένη τοποθεσία και έχουν µισθό έως και 2000 Ευρώ. Οι αυξήσεις για υπαλλήλους µε µισθό άνω των 2000 Ευρώ πραγµατοποιούνται µόνο από την Αθήνα. 3. Η τρίτη εφαρµογή δηµιουργεί αναφορές για το συνολικά έσοδα από τους διάφορους πελάτες. Ενεργοποιείται από την Αθήνα για τους «Μεγάλους» και «Μέτριους» πελάτες και από τη Θεσσαλονίκη για τους «Μικρούς» πελάτες. 4. Η τέταρτη εφαρµογή παρακολουθεί συµβόλαια προϊόντων σύµφωνα µε τρεις κατηγορίες τιµών: Τα προϊόντα µε τιµή έως και 1000 Ευρώ, αυτά µε τιµή από 1000 έως και 5000 Ευρώ και τέλος τα ακριβά προϊόντα µε τιµή άνω των 5000 Ευρώ. Για κάθε global relation σχεδιάστε το σχήµα κατάτµησης (fragmentation schema) αιτιολογώντας τη σχεδίασή σας. Για κάθε primary horizontal fragmentation, πρoσδιορίστε τα minterm predicates και τις προϋποθέσεις που πρέπει να πληρούνται ώστε η κατάτµηση να είναι disjoint και complete. Για κάθε παραγόµενη κατάτµηση αναφέρετε προϋποθέσεις που πρέπει να πληρούνται ώστε τα αντίστοιχα join graphs να είναι partitioned ή simple. 1
Λύση Οι εφαρµογές που χρησιµοποιούνται έχουν τις εξής βασικές εκφράσεις: Εφαρµογή 1 π Όνοµα_Προϊόντος, Τιµή (σ Κατηγορία_ Προϊόντος = «Εµπορικό Πακέτο Λογισµικού» Προϊόν) π Όνοµα_Προϊόντος, Τιµή (σ Κατηγορία_ Προϊόντος = «Υπηρεσίες συντήρησης» Προϊόν) π Όνοµα_Προϊόντος, Τιµή (σ Κατηγορία_ Προϊόντος = «Υπηρεσίες Ανάπτυξης/Σχεδιασµού» Προϊόν) Εφαρµογή 2 σ (Μισθός < 2000) ΑΝD (Τοποθεσία = «Αθήνα») (Υπάλληλος Τµήµα) σ (Μισθός < 2000) ΑΝD (Τοποθεσία = «Θεσσαλονίκη») (Υπάλληλος Τµήµα) σ (Μισθός < 2000) ΑΝD (Τοποθεσία = «Πάτρα») (Υπάλληλος Τµήµα) σ Μισθός 2000 (Υπάλληλος Τµήµα) Εφαρµογή 3 σ (Κατηγορία_Πελάτη = «Μεγάλος») OR (Κατηγορία_Πελάτη = «Μέτριος») (Πελάτης Συµβόλαιο Προϊόν) σ Κατηγορία_Πελάτη = «Μικρός» (Πελάτης Συµβόλαιο Προϊόν) Εφαρµογή 4 σ Τιµή < 1000 (Συµβόλαιο Προϊόν) σ (Τιµή 1000) ΑΝD (Τιµή < 5000) (Συµβόλαιο Προϊόν) σ (Τιµή 5000) (Συµβόλαιο Προϊόν) Με βάση τα παραπάνω, ακολουθεί στη συνέχεια µία ενδεικτική λύση, η οποία, φυσικά, είναι µία από τις πολλές που θα µπορούσε να έχει κανείς. Με βάση τις εφαρµογές 1 και 4, έχουµε δύο οµάδες απλών κατηγορηµάτων που µπορούµε να χρησιµοποιήσουµε για την κατάτµηση της σχέσης Προϊόν: p1: Κατηγορία_ Προϊόντος = «Εµπορικό Πακέτο Λογισµικού» p2: Κατηγορία_ Προϊόντος = «Υπηρεσίες συντήρησης» p3: Κατηγορία_ Προϊόντος = «Υπηρεσίες Ανάπτυξης/Σχεδιασµού» P4: Τιµή < 1000 P5: (Τιµή 1000) ΑΝD (Τιµή < 5000) P6: (Τιµή 5000) Οι επιτρεπτοί συνδυασµοί µεταξύ τους µας δίνουν ένα πλήρες και διακριτό σύνολο σύνθετων κατηγορηµάτων που κατατέµνει την σχέση Προϊόν ως εξής: Προϊόν1 = σ Κατηγορία_ Προϊόντος = «Εµπορικό Πακέτο Λογισµικού» ΑΝD Τιµή < 1000 Προϊόν Προϊόν2 = σ Κατηγορία_ Προϊόντος = «Εµπορικό Πακέτο Λογισµικού» ΑΝD (Τιµή 1000) ΑΝD (Τιµή < 5000) Προϊόν Προϊόν3 = σ Κατηγορία_ Προϊόντος = «Εµπορικό Πακέτο Λογισµικού» ΑΝD (Τιµή 5000) Προϊόν Προϊόν4 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες συντήρησης» ΑΝD Τιµή < 1000 Προϊόν Προϊόν5 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες συντήρησης» ΑΝD (Τιµή 1000) ΑΝD (Τιµή < 5000) Προϊόν Προϊόν6 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες συντήρησης» ΑΝD (Τιµή 5000) Προϊόν Προϊόν7 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες Ανάπτυξης/Σχεδιασµού» ΑΝD Τιµή < 1000 Προϊόν Προϊόν8 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες Ανάπτυξης/Σχεδιασµού» ΑΝD (Τιµή 1000) ΑΝD (Τιµή < 5000) Προϊόν Προϊόν9 = σ Κατηγορία_ Προϊόντος = «Υπηρεσίες Ανάπτυξης/Σχεδιασµού» ΑΝD (Τιµή 5000) Προϊόν 2
Στη συνέχεια κάνουµε την κατάτµηση της σχέσης Τµήµα. Αυτό γίνεται µε βάση την δεύτερη εφαρµογή, οπότε έχουµε τα ακόλουθα σύνθετα κατηγορήµατα: q1: Τοποθεσία = «Αθήνα» q2: Τοποθεσία = «Θεσσαλονίκη» q3: Τοποθεσία = «Πάτρα» Τµήµα1 = σ Τοποθεσία = «Αθήνα» Τµήµα Τµήµα2 = σ Τοποθεσία = «Θεσσαλονίκη» Τµήµα Τµήµα3 = σ Τοποθεσία = «Πάτρα» Τµήµα Είναι προφανές ότι έχουµε ένα πλήρες σύνολο όρων, οι οποίοι είναι και διακριτοί µεταξύ τους. Επίσης, από την δεύτερη εφαρµογή προκύπτει η µικτή κατάτµηση για τη σχέση Υπάλληλος. Αρχικά, έχουµε οριζόντια κατάτµηση της σχέσης, έτσι όπως προκύπτει από τα κατηγορήµατα: q4: Μισθός < 2000 q5: Μισθός 2000 Υπάλληλος1 = σ Μισθός < 2000 Υπάλληλος Υπάλληλος2 = σ Μισθός 2000 Υπάλληλος Είναι προφανές ότι η συγκεκριµένη κατάτµηση είναι πλήρης και διαχωρίσιµη. Στη συνέχεια, και πάλι λόγω της δεύτερης εφαρµογής, προκύπτει η ακόλουθη παραγόµενη κατάτµηση το τµήµα Υπάλληλος1: Υπάλληλος11 = Υπάλληλος1 Τµήµα1 Υπάλληλος12 = Υπάλληλος1 Τµήµα2 Υπάλληλος13 = Υπάλληλος1 Τµήµα3 Ο γράφος σύνδεσης για κάθε µία από τις τέσσερις συγκεκριµένες εκφράσεις της εφαρµογής 2 είναι απλός. Όµως, ο γράφος σύνδεσης για αυθαίρετες ερωτήσεις σύνδεσης ανάµεσα στις σχέσεις Υπάλληλος και Τµήµα δεν είναι διαχωρισµένος, καθώς υπάλληλοι µε µισθό άνω των 2000 Ευρώ (µέλη της Υπάλληλος2) µπορεί να βρίσκονται σε οποιοδήποτε Τµήµα.. Έτσι, µε στόχο να έχουµε διαχωρισµένο γράφο σύνδεσης, µπορούµε να προχωρήσουµε σε επιπλέον (παραγόµενη) κατάτµηση του Υπάλληλος2 µε βάση την κατάτµηση στη σχέση Τµήµα: Υπάλληλος21 = Υπάλληλος2 Τµήµα1 Υπάλληλος22 = Υπάλληλος2 Τµήµα2 Υπάλληλος23 = Υπάλληλος2 Τµήµα3 Από την εφαρµογή 3 προκύπτουν τα ακόλουθα σύνθετα κατηγορήµατα για την σχέση Πελάτης: q6: (Κατηγορία_Πελάτη = «Μεγάλος») OR (Κατηγορία_Πελάτη = «Μέτριος») q7: Κατηγορία_Πελάτη = «Μικρός» Οπότε, προκύπτει η ακόλουθη οριζόντια κατάτµηση: Πελάτης 1 = σ (Κατηγορία_Πελάτη = «Μεγάλος») OR (Κατηγορία_Πελάτη = «Μέτριος») (Πελάτης) Πελάτης 2 = σ Κατηγορία_Πελάτη = «Μικρός» (Πελάτης) 3
Είναι προφανές ότι έχουµε ένα πλήρες σύνολο όρων, οι οποίοι είναι και διακριτοί µεταξύ τους. Τέλος, η σχέση Συµβόλαιο χρησιµοποιείται από την εφαρµογή 3 µόνο για την σύνδεση των σχέσεων Πελάτης και Προϊόν, ενώ από την εφαρµογή 4 έχουµε τη σύνδεση συγκεκριµένων συµβολαίων µε συγκεκριµένα προϊόντα (µε βάση τρεις κατηγορίες τιµής). Έτσι, έχουµε την ακόλουθη παραγόµενη κατάτµηση για τη σχέση Συµβόλαιο: Συµβόλαιο1 = Συµβόλαιο Πελάτης1 (Προϊόν1 Προϊόν4 Προϊόν7) Συµβόλαιο2 = Συµβόλαιο Πελάτης1 (Προϊόν2 Προϊόν5 Προϊόν8) Συµβόλαιο3 = Συµβόλαιο Πελάτης1 (Προϊόν3 Προϊόν6 Προϊόν9) Συµβόλαιο4 = Συµβόλαιο Πελάτης2 (Προϊόν1 Προϊόν4 Προϊόν7) Συµβόλαιο5 = Συµβόλαιο Πελάτης2 (Προϊόν2 Προϊόν5 Προϊόν8) Συµβόλαιο6 = Συµβόλαιο Πελάτης2 (Προϊόν3 Προϊόν6 Προϊόν9) Ο γράφος σύνδεσης για την συγκεκριµένη κατάτµηση είναι καθολικός, καθώς όλα τα τµήµατα της σχέσης Πελάτης συνδέονται µε όλα τα τµήµατα της σχέσης Προϊόν. Για να γίνει διαχωρισµένος ο συγκεκριµένος γράφος θα πρέπει να ισχύει µία επιπλέον σχέση ανάµεσα στα προϊόντα και τους πελάτες, έτσι ώστε συγκεκριµένοι πελάτες να συνδέονται µόνο µε συγκεκριµένα προϊόντα: π.χ. οι «Μικροί» πελάτες αγοράζουν µόνο προϊόντα αξίας κάτω των 1000 Ευρώ, ενώ οι «Μέτριοι» και οι «Μεγάλοι» πελάτες αγοράζουν µόνο προϊόντα αξίας άνω των 1000 Ευρώ. ΕΡΩΤΗΜΑ 2: ΕΠΕΞΕΡΓΑΣΙΑ ΕΡΩΤΗΣΕΩΝ ΣΕ ΚΑΤΑΝΕΜΗΜΕΝΕΣ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ Θεωρούµε το ακόλουθο Global Schema: ΚΑΘΗΓΗΤΗΣ (ΑΡ_ΚΑΘ, ΟΝΟΜΑ_ΚΑΘ, ΒΑΘΜΟΣ_ΚΑΘ, ΓΡΑΦΕΙΟ, ΣΧΟΛΗ, ΤΟΜΕΑΣ) ΜΑΘΗΜΑ(ΑΡ_ΜΑΘΗΜΑΤΟΣ, ΑΡ_ΚΑΘ, ΚΑΤΕΥΘΥΝΣΗ, ΤΙΤΛΟΣ, ΕΞΑΜΗΝΟ, ΠΕΡΙΓΡΑΦΗ) ΦΟΙΤΗΤΗΣ (ΑΡ_ΦΟΙΤ, ΟΝΟΜΑ, ΣΧΟΛΗ, ΕΙ ΙΚΕΥΣΗ, ΑΡ_ΜΗΤΡΟΥ, ΕΤΟΣ_ΕΙΣΑΓΩΓΗΣ) ΒΑΘΜΟΙ (ΑΡ_ΦΟΙΤ, ΑΡ_ΜΑΘΗΜΑΤΟΣ, ΒΑΘΜΟΣ) Στη σχέση ΜΑΘΗΜΑ, ο ΑΡ_ΚΑΘ είναι ο κωδικός του καθηγητή που είναι υπεύθυνος για το µάθηµα. Υπάρχει ένας µόνο υπεύθυνος καθηγητής για κάθε µάθηµα. Η ΚΑΤΕΥΘΥΝΣΗ ενός µαθήµατος είναι µία από τις ακόλουθες: «ΓΕΝΙΚΗ», «ΠΛΗΡΟΦΟΡΙΚΗ», «ΤΗΛΕΠΙΚΟΙΝΩΝΙΕΣ», «ΕΝΕΡΓΕΙΑ» και «ΗΛΕΚΤΡΟΝΙΚΗ». Η σχέση ΚΑΘΗΓΗΤΗΣ βρίσκεται αποθηκευµένη στον κόµβο Τ1, η σχέση ΜΑΘΗΜΑ στον κόµβο Τ2 και οι σχέσεις ΦΟΙΤΗΤΗΣ και ΒΑΘΜΟΙ στον κόµβο Τ3. ίνονται τα παρακάτω στοιχεία για τις σχέσεις αυτές: ΚΑΘΗΓΗΤΗΣ: έχει 50 εγγραφές. ΜΑΘΗΜΑ: έχει 150 εγγραφές. Τα µαθήµατα πληροφορικής αποτελούν το 10% των µαθηµάτων. Μπορούµε να θεωρήσουµε ότι τα µαθήµατα ισοκατανέµονται στους καθηγητές. ΦΟΙΤΗΤΗΣ: έχει 1500 εγγραφές. ΒΑΘΜΟΙ: έχει 75000 εγγραφές. Μπορούµε να θεωρήσουµε ότι κατά µέσο όρο αντιστοιχούν 50 εγγραφές σε κάθε φοιτητή και 20% από αυτές σε µαθήµατα πληροφορικής. Η κατανοµή των βαθµών είναι η ακόλουθη: Βαθµός Ποσοστό (%) <5 25 5 15 6 25 4
7 15 8 12.5 9 5 10 2.5 Τα µεγέθη των πεδίων είναι: Πεδίο Μέγεθος (bytes) ΑΡ_%%%%%, ΒΑΘΜΟΣ, ΕΞΑΜΗΝΟ 4 ΓΡΑΦΕΙΟ 10 ΟΝΟΜΑ_ΚΑΘ, ΒΑΘΜΟΣ_ΚΑΘ, ΣΧΟΛΗ, ΤΟΜΕΑΣ, ΚΑΤΕΥΘΥΝΣΗ (και γενικά όλα τα υπόλοιπα πεδία τύπου String) 100 ΠΕΡΙΓΡΑΦΗ 200 Μια τοποθεσία Τ4 ενεργοποιεί την ερώτηση Q = π ΟΝΟΜΑ_ΚΑΘ, ΤΙΤΛΟΣ, ΦΟΙΤΗΤΗΣ.ΟΝΟΜΑ, ΒΑΘΜΟΣ (σ ΚΑΤΕΥΘΥΝΣΗ = «ΠΛΗΡΟΦΟΡΙΚΗ» ΑΝD ΒΑΘΜΟΣ > 7 (ΚΑΘΗΓΗΤΗΣ ΜΑΘΗΜΑ ΒΑΘΜΟΙ ΦΟΙΤΗΤΗΣ)) Έστω ότι το κόστος µεταφοράς δεδοµένων είναι C = C 0 + C 1. M, όπου C 0 είναι το αρχικό κόστος σύνδεσης, C 1 ένας συντελεστής και M το µέγεθος των µεταφερόµενων δεδοµένων. Ειδικά εδώ, C 0 = 0 και C 1 =1. 1. ώστε ένα όσο το δυνατόν πιο βελτιστοποιηµένο δέντρο τελεστών για την ερώτηση Q. 2. Αν δεν χρησιµοποιηθούν SEMIJOIN λειτουργίες, ποιο είναι το καλύτερο πλάνο εκτέλεσης της παραπάνω ερώτησης; Ποιο είναι το κόστος µεταφοράς δεδοµένων της λύσης σας (σε bytes); 3. Ποιο είναι το καλύτερο πλάνο εκτέλεσης, µε SEMIJOIN, και γιατί; Ποιο είναι το κόστος µεταφοράς δεδοµένων της λύσης σας (σε bytes); Λύση 1. Το (αριστεροβαρές) δέντρο τελεστών για τη δοσµένη ερώτηση είναι: Μετασχηµατίζοντας την αρχική έκφραση καταλήγουµε στο ακόλουθο (αριστεροβαρές) δέντρο τελεστών: 5
Είναι προφανές ότι το πλάνο εκτέλεσης που προκύπτει από το νέο δέντρο τελεστών θα έχει πολύ µικρότερο κόστος από το αρχικό. Εκτελώντας τις τοπικές σε κάθε κόµβο πράξεις, έτσι όπως προκύπτουν από το βελτιστοποιηµένο δέντρο τελεστών, καταλήγουµε σε ένα σύνολο από νέες σχέσεις: ΚΑΘΗΓΗΤΗΣ2 = π ΟΝΟΜΑ_ΚΑΘ, ΑΡ_ΚΑΘ ΚΑΘΗΓΗΤΗΣ ΜΑΘΗΜΑ2 = π ΤΙΤΛΟΣ, ΑΡ_ΚΑΘ, ΑΡ_ΜΑΘ (σ ΚΑΤΕΥΘΥΝΣΗ = «ΠΛΗΡΟΦΟΡΙΚΗ» ΜΑΘΗΜΑ) ΒΑΘΜΟΙ2 = π ΒΑΘΜΟΣ,ΑΡ_ΦΟΙΤ, ΑΡ_ΜΑΘ (σ ΒΑΘΜΟΣ > 7 ΒΑΘΜΟΙ) ΦΟΙΤΗΤΗΣ2 = π ΟΝΟΜΑ, ΑΡ_ΦΟΙΤ ΦΟΙΤΗΤΗΣ Χρησιµοποιούµε τις συγκεκριµένες σχέσεις στα πλάνα εκτέλεσης που θα υπολογίσουµε στη συνέχεια γιατί µας εξασφαλίζουν ότι θα µεταφερθεί το µικρότερο ποσοστό πληροφορίας πάνω από το δίκτυο. 2. Υπολογίζουµε το µέγεθος της κάθε σχέσης: Η σχέση ΚΑΘΗΓΗΤΗΣ2 έχει 50 εγγραφές και κάθε µία από αυτές έχει 100 + 4 = 104 bytes. Άρα, το µέγεθος της είναι 50 * 104 = 5,200 bytes. Η σχέση ΜΑΘΗΜΑ έχει 150 εγγραφές, οπότε λόγω της επιλογής µόνο των µαθηµάτων πληροφορικής, η σχέση ΜΑΘΗΜΑ2 έχει 0.1 * 150 = 15 εγγραφές. Κάθε εγγραφή της σχέσης ΜΑΘΗΜΑ2 έχει 100 + 4 + 4 = 108 bytes. Άρα, το µέγεθος της είναι 15 * 108 = 1,620 bytes. Η σχέση ΒΑΘΜΟΙ έχει 75,000 εγγραφές, οπότε λόγω της επιλογής µόνο των µαθηµάτων µε βαθµό πάνω από 7, η σχέση ΒΑΘΜΟΙ2 έχει 0.2 * 75000 = 15,000 εγγραφές. Κάθε εγγραφή της σχέσης ΒΑΘΜΟΙ2 έχει 3*4 = 12 bytes. Άρα, το µέγεθος της είναι 15000 * 12 = 180,000 bytes. 6
3. Η σχέση ΦΟΙΤΗΤΗΣ2 έχει 1500 εγγραφές και κάθε µία από αυτές έχει 100 + 4 = 104 bytes. Άρα, το µέγεθος της είναι 1500 * 104 = 156,000 bytes. Το αποτέλεσµα της ερώτησης Q είναι µια νέα σχέση R µε σχήµα: R (ΟΝΟΜΑ_ΚΑΘ, ΤΙΤΛΟΣ, ΟΝΟΜΑ_ΦΟΙΤ, ΒΑΘΜΟΣ) Άρα, το µέγεθος κάθε εγγραφής θα είναι 100 + 100 + 100 + 4 = 304 bytes. Εφόσον το 20% των βαθµών αντιστοιχούν σε µαθήµατα πληροφορικής, στην τελική απάντηση θα συνεισφέρουν 0.2 * 15000 = 3000 εγγραφές της σχέσης Βαθµοί2. Επιπλέον, επειδή για κάθε εγγραφή της σχέσης ΒΑΘΜΟΙ2 υπάρχει µία µοναδική εγγραφή στις σχέσεις ΦΟΙΤΗΤΗΣ2 και ΜΑΘΗΜΑ2 και καθώς υπάρχει ένας µόνο υπεύθυνος καθηγητής για κάθε µάθηµα, η σχέση R θα έχει 3000 εγγραφές. Συνεπώς, το µέγεθος της σχέσης R θα είναι 3000 * 304 = 912,000 bytes. Ακολουθώντας τη λογική του παραδείγµατος των σηµειώσεων, εάν η ερώτηση εκτελεστεί σε οποιονδήποτε κόµβο εκτός του Τ4, το κόστος της θα είναι τουλάχιστον αυτό της µεταφοράς της απάντησης στον κόµβο Τ4, το οποίο είναι 912000 bytes. Έτσι, το καλύτερο πλάνο εκτέλεσης προκύπτει εάν µεταφέρουµε τις σχέσεις ΚΑΘΗΓΗΤΗΣ2, ΜΑΘΗΜΑ2, ΒΑΘΜΟΙ2 και ΦΟΙΤΗΤΗΣ2 στον κόµβο Τ4 και εκτελέσουµε εκεί την ερώτηση. Το κόστος του συγκεκριµένου πλάνου εκτέλεσης θα είναι: C1 = 5200 + 1620 + 180000 + 156000 = 342,820 bytes. Παρατήρηση: Εάν θέλουµε να βελτιώσουµε ακόµα περισσότερο το πλάνο εκτέλεσης, µπορούµε να εκµεταλλευτούµε το γεγονός ότι οι σχέσεις ΒΑΘΜΟΙ2 και ΦΟΙΤΗΤΗΣ2 είναι στον ίδιο κόµβο (Τ3). Οπότε υπολογίζουµε τοπικά τη σύνδεσή τους: ΤΕΜP1 = π ΒΑΘΜΟΣ, ΟΝΟΜΑ, ΑΡ_ΜΑΘ (ΒΑΘΜΟΙ2 ΦΟΙΤΗΤΗΣ2) H σχέση ΤΕΜP1 θα έχει 15000 εγγραφές (όσες και η σχέση ΒΑΘΜΟΙ2) και κάθε εγγραφή θα έχει µέγεθος: 4 + 100 + 4 = 108 bytes. Οπότε το µέγεθος της σχέσης TEMP1 θα είναι 15000 * 108 = 1,620,000 bytes, το οποίο είναι πολύ µεγαλύτερο από το µέγεθος των σχέσεων ΒΑΘΜΟΙ2 και ΦΟΙΤΗΤΗΣ2 µαζί! Οπότε, βλέπουµε πως η επιλογή µας να κάνουµε τη σύνδεση σε τοπικό επίπεδο αντί να οδηγήσει σε ένα καλύτερο πλάνο, οδήγησε σε ένα πολύ χειρότερο πλάνο εκτέλεσης... Παρατηρούµε ότι εάν στείλουµε το πεδίο ΑΡ_ΜΑΘΗΜΑΤΟΣ της σχέσης ΜΑΘΗΜΑ2 στον κόµβο Τ3 θα µπορούσαµε να ελαττώσουµε αρκετά το µέγεθος της σχέσης ΒΑΘΜΟΙ2. Αυτό οφείλεται στο γεγονός ότι γνωρίζουµε ότι µόνο το 20% των βαθµών αναφέρονται σε µαθήµατα πληροφορικής και η πληροφορία που βρίσκεται στο συγκεκριµένο πεδίο θα µας βοηθήσει να ελαττώσουµε κατά 20% το µέγεθος της σχέσης ΒΑΘΜΟΙ2. Αντίστοιχα, στέλνοντας το πεδίο ΑΡ_ΚΑΘΗΓΗΤΗ της σχέσης ΜΑΘΗΜΑ2 στον κόµβο Τ1 µπορούµε να ελαττώσουµε το µέγεθος της σχέσης ΚΑΘΗΓΗΤΗΣ2. Εφόσον υπάρχουν 15 εγγραφές στη σχέση ΜΑΘΗΜΑ2, στη χειρότερη περίπτωση θα υπάρχουν 15 καθηγητές στην τελική απάντηση. Εκµεταλλευόµενοι την παραδοχή ότι τα µαθήµατα ισοκατανέµονται στους καθηγητές, µπορούµε να θεωρήσουµε ότι θα υπάρχουν (50/150) * 15 = 5 καθηγητές στην τελική απάντηση. Κατά συνέπεια, το καλύτερο πλάνο εκτέλεσης της ερώτησης Q είναι το εξής: 1. Προβάλλουµε το πεδίο ΑΡ_ΜΑΘΗΜΑΤΟΣ της σχέσης ΜΑΘΗΜΑ2 στον κόµβο Τ2: ΤΕΜP1 = π ΑΡ_ΜΑΘ ΜΑΘΗΜΑ2 H σχέση TEMP1 θα έχει 15 εγγραφές και συνολικό µέγεθος 15*4 = 60 bytes. Μεταφέρουµε τη σχέση ΤΕΜP1 στον κόµβο Τ3. 2. Προβάλλουµε το πεδίο ΑΡ_ΚΑΘΗΓΗΤΗ της σχέσης ΜΑΘΗΜΑ2 στον κόµβο Τ2: ΤΕΜP2 = π ΑΡ_ΚΑΘ ΜΑΘΗΜΑ2 H σχέση TEMP2 θα έχει 15 εγγραφές και συνολικό µέγεθος 15*4 = 60 bytes. Μεταφέρουµε τη σχέση ΤΕΜP2 στον κόµβο Τ1. 3. Μεταφέρουµε τη σχέση ΜΑΘΗΜΑ2, συνολικού µεγέθους 1,620 bytes, στον κόµβο Τ4. 7
4. Στον κόµβο Τ1 κάνουµε το semijoin: ΚΑΘΗΓΗΤΗΣ3 = ΚΑΘΗΓΗΤΗΣ2 ΤΕΜP2. Όπως αναφέραµε σε προηγούµενη παράγραφο, η σχέση ΚΑΘΗΓΗΤΗΣ3 έχει 5 εγγραφές και συνολικό µέγεθος: 5 * 104 = 520 bytes. Μεταφέρουµε τη σχέση ΚΑΘΗΓΗΤΗΣ3 στον κόµβο Τ4. 5. Στον κόµβο Τ3 κάνουµε το semijoin: ΒΑΘΜΟΙ3 = ΒΑΘΜΟΙ2 ΤΕΜP1. Όπως αναφέραµε σε προηγούµενη παράγραφο, η σχέση ΒΑΘΜΟΙ3 έχει 20% λιγότερες εγγραφές από την σχέση ΒΑΘΜΟΙ2, δηλαδή 0.2*15,000 = 3000 εγγραφές. Το συνολικό της µέγεθος είναι: 3000 * 12 = 36,000 bytes. Μεταφέρουµε τη σχέση ΒΑΘΜΟΙ3 στον κόµβο Τ4. 6. Μεταφέρουµε τη σχέση ΦΟΙΤΗΤΗΣ2 στον κόµβο Τ4. Το µέγεθος της είναι 1500 * 104 = 156,000 bytes. (και πάλι δεν συµφέρει η εκτέλεση τοπικά της σύνδεσης ΒΑΘΜΟΙ3 ΦΟΙΤΗΤΗΣ2), καθώς το µέγεθος του αποτελέσµατος είναι 30,00 * 108 = 324,000 >> 192,000 = 36,000 + 156,000 bytes) 7. Υπολογίζουµε το τελικό αποτέλεσµα στον κόµβο Τ4: π ΟΝΟΜΑ_ΚΑΘ, ΤΙΤΛΟΣ, ΦΟΙΤΗΤΗΣ.ΟΝΟΜΑ, ΒΑΘΜΟΣ (ΚΑΘΗΓΗΤΗΣ3 ΜΑΘΗΜΑ2 ΒΑΘΜΟΙ3 ΦΟΙΤΗΤΗΣ2) Το συνολικό κόστος του πλάνου εκτέλεσης µε χρήση semijoins είναι: C2 = 60 + 60 + 1620 + 520 + 36000 + 156000 = 194,260 bytes. 8