ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Τ. Σελλής ΦΘΙΝΟΠΩΡΟ 2009 Λύση ΑΣΚΗΣΗΣ #2 ΕΡΩΤΗΜΑ 1: ΔΕΔΟΜΕΝΩΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΡΩΤΗΣΕΩΝ ΣΕ ΚΑΤΑΝΕΜΗΜΕΝΕΣ ΒΑΣΕΙΣ Θεωρούμε τις ακόλουθες σχέσεις, οι οποίες ανήκουν στην κατανεμημένη βάση δεδομένων μίας χρηματιστηριακής εταιρίας: SHARE (SID:int, SNAME:char(50), SCATEGORY:char(30), SSELLVALUE:real, SPROFIT:real) CUST (CID:int, CNAME:char(48), CADDRESS:char(40), CINCOME:real) PORTFOLIO (CID:int, SID:int, SBUYVALUE:int, SPIECES:int) Στις παραπάνω σχέσεις, για κάθε μετοχή, καταγράφεται το όνομα, η κατηγορία, η τρέχουσα τιμή πώλησης της μετοχής και το μέρισμα που δίνει (SPROFIT). Αντίστοιχα, για κάθε πελάτη καταγράφεται το όνομα, η διεύθυνση, και το εισόδημά του. Τέλος, για κάθε μετοχή που έχει αγοράσει ένας πελάτης, στη σχέση χαρτοφυλάκιο (PORTFOLIO) καταγράφεται ο κωδικός του πελάτη, ο κωδικός της μετοχής, η τιμή στην οποία ο πελάτης έχει αγοράσει τη μετοχή και πόσα κομμάτια της μετοχής (SPIECES) έχει αγοράσει. Επίσης, για το κάθε πεδίο, δίνεται ο τύπος. Κάθε ακέραιος (int) έχει μέγεθος 4bytes κάθε πραγματικός (real) 8bytes και κάθε χαρακτήρας μίας συμβολοσειράς (char()) 1byte. Η σχέση SHARE περιέχει 50 σελίδες, η CUST 10000 σελίδες και η PORTFOLIO 4800 σελίδες. Το μέγεθος μίας σελίδας είναι 1000bytes. Θεωρούμε το κόστος του κάθε Ι/Ο μηδενικό. Το κόστος αποστολής μίας σελίδας είναι Ts = 40 Td, το κόστος μίας επιλογής ή προβολής είναι ίσο με το μέγεθος της σχέσης σε σελίδες, το κόστος ενός join ισούται με 3 (Μ + Ν) Τd και το κόστος της ένωσης ισούται με 2 (Μ + Ν) Τd, όπου Μ, Ν τα μεγέθη των σχέσεων σε σελίδες. Οι εγγραφές στέλνονται από ένα κόμβο σε ένα άλλο σε σελίδες (δηλαδή αν είναι λιγότερες σε μέγεθος από μια σελίδα, θεωρούμε ότι στέλνεται ολόκληρη η σελίδα). Η σχέση CUST έχει υποστεί οριζόντια κατάτμηση με βάση το αν οι πελάτες μένουν στη βόρεια ή νότια Ελλάδα. Οι εγγραφές των πελατών της βόρειας Ελλάδας είναι αποθηκευμένες στη Θεσσαλονίκη και της νότιας Ελλάδας στην Αθήνα. Σημειώνεται ότι το 20% των πελατών μένουν στη βόρεια Ελλάδα και οι υπόλοιποι στη νότια. Η σχέση SHARE βρίσκεται στη Θεσσαλονίκη και η σχέση PORTFOLIO στην Πάτρα. Από το Βόλο, τίθεται η παρακάτω ερώτηση: SELECT FROM WHERE CNAME, ((SSELLVALUE - SBUYVALUE)* SPIECES), SNAME SHARE, CUST, PORTFOLIO SHARE.SID = PORTFOLIO. SID AND CUST.CID = PORTFOLIO.CID Βρείτε το κόστος της απάντησης της ερώτησης με καθένα από τους παρακάτω τρόπους: α) Υπολόγισε το αποτέλεσμα στο Βόλο. β) Υπολόγισε το αποτέλεσμα με semi-join στη Θεσσαλονίκη και στείλε το στο Βόλο. γ) Υπολόγισε το αποτέλεσμα με semi-join στην Αθήνα και στείλε το στο Βόλο. 1
Λύση Η σχέση SHARE έχει: (50*1000)/(4+50+30+8+8)=500 εγγραφές Η σχέση PORTFOLIO έχει: (4800*1000)/(4+4+4+4)=300000 εγγραφές Η σχέση CUST1 (Θεσσαλονίκη) έχει: 0,20*(10000*1000)/(4+48+40+8)=20000 εγγραφές Η σχέση CUST2 (Αθήνα) έχει: 0,80*(10000*1000)/(4+48+40+8)=80000 εγγραφές α) 1. Προβολή των SID, SNAME και SSELLVALUE της σχέσης SHARE: 50*1Τd = 50 Τd Η SHARE = π SID, SNAME,SSELVALUE SHARE έχει μέγεθος: (500*(4+50+8))/1000 = 31 σελίδες. 2. Μεταφορά της SHARE στο Βόλο: 31*40Τd = 1240 Τd 3. Μεταφορά της PORTFOLIO στο Βόλο: 4800*40 Τd = 192000 Τd 4. Προβολή των CID, CNAME της σχέσης CUST1: 0,20*10000*1Τd = 2000 Τ d Η CUST1 = π CID, CNAME CUST1 έχει μέγεθος: (20000*(4+48))/1000 = 1040 σελίδες. 5. Μεταφορά της CUST1 στο Βόλο: 1040*40 Τd = 41600 Τd 6. Προβολή των CID, CNAME της σχέσης CUST2: 0,80*10000*1Τd = 8000 Τ d Η CUST2 = π CID, CNAME CUST2 έχει μέγεθος: (80000*(4+48))/1000 = 4160 σελίδες. 7. Μεταφορά της CUST2 στο Βόλο: 4160*40 Τd = 166400 Τd 8. Ένωση των σχέσεων CUST1, CUST2 στο Βόλο: 2*(1040 + 4160)Τd = 10400 Τd 9. Join μεταξύ των σχέσεων PORTFOLIO και SHARE : 3*(31 + 4800) Τd = 14493 Τd Προκύπτει η PORTFOLIO < SHARE με μέγεθος: (300000*(4+4+4+4+50+8))/1000 = 22200 σελίδες. 10. Join μεταξύ των PORTFOLIO < SHARE, και CUST : 3*(22200 + 5200) Τd = 82200 Τd 50 +1240 +192000 +2000 +41600 +8000 +166400 +10400 +14493 +82200 = 518383 Τd β) Από τα δεδομένα της άσκησης, δεν προκύπτει ότι θα μειωθεί το μέγεθος μίας σχέσης εάν πραγματοποιήσουμε semi-join μεταξύ 2 σχέσεων, μιας και τελικά, όλες οι εγγραφές όλων των σχέσεων χρησιμοποιούνται στο τελικό αποτέλεσμα. Άρα, με αντίστοιχο τρόπο με το ερώτημα (α), υπολογίζουμε το κόστος του αποτελέσματος στη Θεσσαλονίκη και σε αυτό προσθέτουμε το κόστος μεταφοράς στο Βόλο: 1. Μεταφορά της PORTFOLIO στη Θεσσαλονίκη: 4800*40 Τd = 192000 Τd 2
2. Προβολή των CID, CNAME της σχέσης CUST2: 0,80*10000*1Τd = 8000 Τ d Η CUST2 = π CID, CNAME CUST2 έχει μέγεθος: (80000*(4+48))/1000 = 4160 σελίδες. 3. Μεταφορά της CUST2 στη Θεσσαλονίκη: 4160*40 Τd = 166400 Τd 4. Ένωση των σχέσεων CUST1, CUST2 στη Θεσσαλονίκη: 2*(1040 + 4160)Τd = 10400 Τd 5. Join μεταξύ των σχέσεων PORTFOLIO και SHARE : 3*(31 + 4800) Τd = 14493 Τd Προκύπτει η PORTFOLIO SHARE με μέγεθος: (300000*(4+4+4+4+50+8))/1000 = 22200 σελίδες. 6. Join μεταξύ των PORTFOLIO SHARE, CUST : 3*(22200 + 5200) Τd = 82200 Τd Προκύπτει η SHARE PORTFOLIO CUST με μέγεθος: (300000*(4+4+4+4+48+50+8))/1000 = 36600 σελίδες 7. Προβολή των CNAME, SSELLVALUE, SBUYVALUE SPIECES, SNAME της σχέσης SHARE PORTFOLIO CUST : 36600*1Τd = 36600 Τd Η προβολή έχει μέγεθος: (300000*(48+8+4+4+50))/1000 = 34200 σελίδες. 8. Μεταφορά της τελικής σχέσης στο Βόλο: 34200*40Τd = 1368000 Τd 192000 +8000 +166400 +10400 +14493 +82200 +1368000 = 1841493 Τd γ) Ομοίως: 1. Μεταφορά της PORTFOLIO στην Αθήνα: 4800*40 Τd = 192000 Τd 2. Προβολή των CID, CNAME της σχέσης CUST1: 0,20*10000*1Τd = 2000 Τ d Η CUST1 = π CID, CNAME CUST1 έχει μέγεθος: (20000*(4+48))/1000 = 1040 σελίδες. 3. Μεταφορά της CUST1 στην Αθήνα: 1040*40 Τd = 41600 Τd 4. Ένωση των σχέσεων CUST1, CUST2 στην Αθήνα: 2*(1040 + 4160)Τd = 10400 Τd 5. Προβολή των SID, SNAME και SSELLVALUE της σχέσης SHARE: 50*1Τd = 50 Τd Η SHARE π SID, SNAME,SSELVALUE SHARE έχει μέγεθος: (500*(4+50+8))/1000 = 31 σελίδες. 6. Μεταφορά της SHARE στην Αθήνα: 31*40Τd = 1240 Τd 7. Join μεταξύ των σχέσεων PORTFOLIO και SHARE : 3*(31 + 4800) Τd = 14493 Τd Προκύπτει η PORTFOLIO SHARE με μέγεθος: (300000*(4+4+4+4+50+8))/1000 = 22200 σελίδες. 3
8. Join μεταξύ των PORTFOLIO SHARE, CUST : 3*(22200 + 5200) Τd = 82200 Τ d Προκύπτει η SHARE PORTFOLIO CUST με μέγεθος: (300000*(4+4+4+4+48+50+8))/1000 = 36600 σελίδες 9. Προβολή των CNAME, SSELLVALUE, SBUYVALUE SPIECES, SNAME της σχέσης SHARE PORTFOLIO CUST : 36600*1Τd = 36600 Τd Η προβολή έχει μέγεθος: (300000*(48+8+4+4+50))/1000 = 34200 σελίδες. 10. Μεταφορά της τελικής σχέσης στο Βόλο: 36600*40Τd = 1368000 Τd 192000 +2000 +41600 +10400 +50 +1240 +14493 +82200 +1368000 = 1711983 Τd ΕΡΩΤΗΜΑ 2: ΕΠΕΞΕΡΓΑΣΙΑ ΕΡΩΤΗΣΕΩΝ ΣΕ ΚΑΤΑΝΕΜΗΜΕΝΕΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Θεωρούμε τη βάση του προηγούμενου ερωτήματος. SHARE (SID:int, SNAME:char(50), SCATEGORY:char(30), SSELLVALUE:real, SPROFIT:real) CUST (CID:int, CNAME:char(48), CADDRESS:char(40), CINCOME:real) PORTFOLIO (CID:int, SID:int, SBUYVALUE:int, SPIECES:int) Όπως έχουμε ήδη αναφέρει, οι πελάτες χωρίζονται σε πελάτες βόρειας και νότιας Ελλάδας και αποθηκεύονται σε Θεσσαλονίκη και Αθήνα αντίστοιχα. Επιπλέον, οι πελάτες χωρίζονται σε 3 κατηγορίες ανάλογα με το εισόδημα τους: Α: 40000 ευρώ < CINCOME. Β: 20000 ευρώ < CINCOME <= 40000 ευρώ. Γ: CINCOME <= 20000 ευρώ. Μία από τις εφαρμογές διαχείρισης στατιστικών της εταιρείας, πραγματοποιεί στατιστικές αναλύσεις σε κάθε μία από αυτές τις κατηγορίες πελατών ξεχωριστά. Στις στατιστικές αυτές αναλύσεις, χρησιμοποιεί πεδία από τη σχέση SHARE (SPROFIT) και από τη σχέση PORTFOLIO (CID, SID, SPIECES) έτσι ώστε να υπολογίζει τοπικά και ξεχωριστά για κάθε κατηγορία πελάτη το μέρισμα που κερδίζει από τις μετοχές. Μία δεύτερη εφαρμογή, η οποία τρέχει κεντρικά στη Θεσσαλονίκη, υπολογίζει για την κάθε κατηγορία μετοχής (και ανεξάρτητα από το ποιοι πελάτες την έχουν αγοράσει) το συνολικό κέρδος (ή απώλεια) της μετοχής, για όλους τους πελάτες, χρησιμοποιώντας τις σχέσεις SHARE (SCATEGORY, SSELLVALUE) και PORTFOLIO (SID, SBUYVALUE, SPIECES). Δεδομένων των παραπάνω, για κάθε σχέση σχεδιάστε το σχήμα κατάτμησης, αιτιολογώντας τη σχεδίασή σας και χωρίς να λαμβάνετε υπόψη σας πώς έχουν κατανεμηθεί οι σχέσεις στις διάφορες πόλεις στο ΕΡΩΤΗΜΑ 1. Λύση Οριζόντια κατάτμηση στο CUST με βάση την «CADDRESS» (λόγω της πρώτης εφαρμογής). CUST1 = σ CADDRESS=Θεσσαλονικη CUST CUST2 = σ CADDRESS=Αθήνα CUST 4
Περαιτέρω οριζόντια κατάτμηση στα CUST1, CUST2 με βάση το «CINCOME» (λόγω της πρώτης εφαρμογής). CUST1,1 = σ CINCOME<=20000 CUST1 CUST1,2 = σ 20000<CINCOME<=40000 CUST1 CUST1,3 = σ CINCOME>40000 CUST1 CUST2,1 = σ CINCOME<=20000 CUST2 CUST2,2 = σ 20000<CINCOME<=40000 CUST2 CUST2,3 = σ CINCOME>40000 CUST2 Κάθετη κατάτμηση στο SHARE (λόγω της πρώτης και δεύτερης εφαρμογής): SHARE1 = σ SID, SPROFIT SHARE SHARE2 = σ SID, SNAME, SCATEGORY, SSELLVALUE SHARE Κάθετη κατάτμηση στο PORTFOLIO (λόγω της πρώτης και δεύτερης εφαρμογής): PORTFOLIO1 = σ CID, SID, SPIECES PORTFOLIO PORTFOLIO2 = σ SID, SBUYVALUE, SPIECES PORTFOLIO Παραγόμενη κατάτμηση της PORTFOLIO1 με βάση την κατάτμηση της CUST (λόγω της εφαρμογής 1). PORTFOLIO1,1 = PORTFOLIO1 CUST1,1 PORTFOLIO1,2 = PORTFOLIO1 CUST1,2.. PORTFOLIO1,6 = PORTFOLIO1 CUST2,3 Παραγόμενη κατάτμηση της SHARE1 με βάση την κατάτμηση της PORTFOLIO1 (λόγω της εφαρμογής 1). SHARE1,1 = SHARE1 PORTFOLIO1,1 SHARE1,2 = SHARE1 PORTFOLIO1,2.. SHARE1,6 = SHARE1 PORTFOLIO1,6 5