ΓΡΑΦΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ ΙΑ ΙΚΑΣΙΩΝ ΕΞΑΓΩΓΗΣ-ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ-ΦΟΡΤΩΣΗΣ Ε ΟΜΕΝΩΝ (ΤΟΜΟΣ Ι)

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΓΡΑΦΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ ΙΑ ΙΚΑΣΙΩΝ ΕΞΑΓΩΓΗΣ-ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ-ΦΟΡΤΩΣΗΣ Ε ΟΜΕΝΩΝ (ΤΟΜΟΣ Ι)"

Transcript

1 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΖΩΓΡΑΦΟΥ , ΑΘΗΝΑ ΕΒΓ - ΙΠΛ Νοεµβρίου 2002 ΓΡΑΦΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ ΙΑ ΙΚΑΣΙΩΝ ΕΞΑΓΩΓΗΣ-ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ-ΦΟΡΤΩΣΗΣ Ε ΟΜΕΝΩΝ (ΤΟΜΟΣ Ι) ΓΕΩΡΓΑΝΤΑΣ ΠΑΝΑΓΙΩΤΗΣ ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: Τίµος Σελλής ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΡΓΑΣΤΗΡΙΟ ΣΥΣΤΗΜΑΤΩΝ ΒΑΣΕΩΝ ΓΝΩΣΕΩΝ

2 ii ΚΑΙ Ε ΟΜΕΝΩΝ

3 iii

4 Πρόλογος Η παρούσα διπλωµατική εργασία εκπονήθηκε στο Εργαστήριο Συστηµάτων Βάσεων και Γνώσεων εδοµένων (ΕΒΓ ) του τµήµατος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Εθνικού Μετσόβιου Πολυτεχνείου Ευχαριστώ τον καθηγητή κ. Τ. Σελλή και τον υποψήφιο διδάκτορα και επιβλέποντα της διπλωµατικής κ. A. Σιµιτσή για την πολύτιµη βοήθεια που µου παρείχαν κατά την εκπόνηση της διπλωµατικής αυτής εργασίας, καθώς και όλους τους υπεύθυνους (και µη) του εργαστηρίου για τις πολύτιµες συµβουλές, πάνω σε τεχνικά θέµατα, που µου προσέφεραν. Οκτώβριος 2002 ΓΕΩΡΓΑΝΤΑΣ ΠΑΝΑΓΙΩΤΗΣ iv

5 v

6 Περίληψη Αντικείµενο αυτής της διπλωµατικής είναι ο σχεδιασµός, η ανάπτυξη και η υλοποίηση ενός εργαλείου γραφικής αναπαράστασης ETL Σεναρίων (Εξαγωγής Μετασχηµατισµού- Φόρτωσης). Με τον όρο ETL σενάριο εννοούµε το σύνολο των διαδικασιών που είναι υπεύθυνες για την εξαγωγή των δεδοµένων από διάφορες πηγές, τον καθαρισµό, την προσαρµογή και την εισαγωγή τους σε µία Αποθήκη εδοµένων. Η διπλωµατική βασίστηκε στο µοντέλο γραφικής αναπαράστασης ETL διαδικασιών που έχει προταθεί από τους κ.κ. Π.Βασιλειάδη, Α.Σιµιτσή και Σ.Σκιαδόπουλο. Το εργαλείο που δηµιουργήθηκε είναι υπεύθυνο για τη διαχείριση ενός repository ETL σεναρίων και πιο συγκεκριµένα επιτρέπει τη σχεδίαση νέων σεναρίων, η οποία διευκολύνεται µε τη βοήθεια µίας παλέτας πρότυπων, συχνά χρησιµοποιούµενων, ETL διαδικασιών, την αποθήκευσή τους στο repository και την επίδειξη των υπαρχόντων σεναρίων. ΛΕΞΕΙΣ ΚΛΕΙ ΙΑ: γραφική αναπαράσταση, ETL, σενάριο, διαδικασίες, repository. vi

7 vii

8 Summary The object of this Diploma Thesis is the designing, development and implementation of a tool for the graphical representation of ETL (Extraction-Transformation-Loading) Scenaria. The term ETL scenario stands for the set of the processes responsible for the extraction of data from several sources, their cleansing, customization and insertion into a data warehouse. The Diploma Thesis was based on the graphical representation model of ETL processes proposed by P.Vassiliadis, A.Simitsis, S.Skiadopoulos. The created tool is responsible for the administration of a repository of ETL scenaria, specifically it and allows the designing of new ones, simplified by using a palette of a set of frequently used ETL Activities, their insertion into the repository and the display of existing scenaria. KEYWORDS: graphical representation, ETL, scenario, processes, repository. viii

9 ix

10 Πίνακας περιεχοµένων 1 Εισαγωγή Αντικείµενο της διπλωµατικής Οργάνωση του τόµου Περιγραφή Θέµατος ETL ιαδικασίες Σχετικές Εργασίες (εφαρµογές) Στόχος Μοντέλο Γραφικής Αναπαράστασης ETL ιαδικασιών Ανάλυση και σχεδίαση Περιγραφή Αρχιτεκτονικής Περιγραφή Λειτουργιών Υλοποίηση Πλατφόρµες και προγραµµατιστικά εργαλεία Λεπτοµέρειες υλοποίησης Έλεγχος Μεθοδολογία Ελέγχου Αναλυτική παρουσίαση έλεγχου Επίλογος Σύνοψη και συµπεράσµατα Μελλοντικές επεκτάσεις Βιβλιογραφία Παράρτηµα x

11 xi

12

13 1 Εισαγωγή Στο παρόν κεφάλαιο, στην παράγραφο 1.1 αναλύεται το αντικείµενο της παρούσας διπλωµατικής εργασίας και στην παράγραφο 1.2 γίνεται µια επισκόπηση της οργάνωσης του τόµου που κρατάτε στα χέρια σας. 1.1 Αντικείµενο της διπλωµατικής Τα ETL εργαλεία είναι µία κατηγορία ειδικευµένων εργαλείων επιφορτισµένα µε το έργο της διατήρησης της οµοιογένειας, του καθαρισµού και της φόρτωσης µίας Αποθήκης εδοµένων. Το κόστος αυτών των εργαλείων υπολογίζεται ότι ανέρχεται στο ένα τρίτο της προσπάθειας και των εξόδων στον προϋπολογισµό µίας Αποθήκης εδοµένων, ενώ ο χρόνος ανάπτυξής τους µπορεί να φτάσει ως και το 80% του συνολικού χρόνου ανάπτυξης µίας Αποθήκης εδοµένων. Παρόλα αυτά, κυρίως λόγω της πολυπλοκότητας, της µακράς καµπύλης µάθησης καθώς και του κόστους, πολλοί οργανισµοί αναπτύσσουν µόνοι τους εργαλεία για την εκτέλεση ETL εργασιών. Είναι λοιπόν προφανές ότι ο σχεδιασµός, η ανάπτυξη και η υλοποίηση των ETL διαδικασιών έχει ανάγκη από σχεδιαστική και µεθοδολογική θεµελίωση. Αυτό το κενό προσπαθεί να καλύψει η διπλωµατική αυτή µε τη δηµιουργία ενός εργαλείου που θα επιτρέπει την εύκολη σχεδίαση αλλά και περαιτέρω ανάπτυξη ETL σεναρίων βασισµένων σε ένα αυστηρά ορισµένο µοντέλο ETL διαδικασιών. Θέλουµε δηλαδή να 1

14 κατασκευάσουµε ένα εργαλείο που να προσφέρει ένα εύχρηστο γραφικό περιβάλλον για την δηµιουργία ETL σεναρίων και την αποθήκευσή τους σε ένα repository. Το repository αυτό θα µπορεί να χρησιµοποιηθεί στη συνέχεια ως «πηγή» σεναρίων κατά την εξέλιξη της Αποθήκης εδοµένων. Το µεγαλύτερο όφελος που επιθυµούµε να αποκοµίσουµε από τη χρήση του µοντέλου γραφικής αναπαράστασης των σεναρίων, και κατά επέκταση του εργαλείου, είναι η δηµιουργία µίας «εποπτικής εικόνας» του σεναρίου που θα απεικονίζει µε σαφήνεια τόσο το διαχωρισµό όσο και τις συσχετίσεις των διαδικασιών που χρησιµοποιούµε, γεγονός που θα διευκολύνει πολύ την εξέλιξη του σεναρίου ώστε να ακολουθεί τις διαρκώς µεταβαλλόµενες απαιτήσεις µίας Αποθήκης εδοµένων. 1.2 Οργάνωση του τόµου Ο τόµος που κρατάτε στα χέρια σας αποτελείται από 7 κεφάλαια και αναλύει πλήρως την ανάπτυξη της εργασίας. Το πρώτο κεφάλαιο είναι η εισαγωγή, η οποία εξηγεί τις ανάγκες που η διπλωµατική αυτή έρχεται να καλύψει και παρουσιάζει το γενικό στόχο που επιθυµούµε να επιτύχουµε. Στο δεύτερο κεφάλαιο γίνεται µια εκτενής περιγραφή του µοντέλου γραφικής αναπαράστασης των ETL διαδικασιών και στη συνέχεια αναλύεται ο στόχος του εργαλείου που δηµιουργήσαµε και οι ανάγκες που αυτό έρχεται να καλύψει. Το τρίτο κεφάλαιο ασχολείται µε τη σχεδίαση και την ανάπτυξη του εργαλείου. Αρχικά, γίνεται µία περιγραφή της αρχιτεκτονικής του και ακολουθεί περιγραφή των λειτουργιών που µπορεί να επιτελέσει ένας χρήστης. Στο τέταρτο κεφάλαιο γίνεται η περιγραφή της υλοποίησης του συστήµατος. Αρχικά τεκµηριώνεται η επιλογή της πλατφόρµας και των προγραµµατιστικών εργαλείων που επιλέχθηκαν για την ανάπτυξη. Στη συνέχεια ο κώδικας της εφαρµογής αποσυντίθεται σε ενότητες και παρατίθεται µία σειρά από διαγράµµατα που περιγράφουν τις συσχετίσεις µεταξύ των ενοτήτων και των συστατικών στοιχείων τους. Τέλος, περιγράφεται το σχήµα του repository. Το πέµπτο κεφάλαιο πραγµατεύεται τον έλεγχο του συστήµατος. Παρουσιάζεται αρχικά η µεθοδολογία του ελέγχου και κατόπιν παρατίθενται αναλυτικά τα αποτελέσµατα του ελέγχου. 2

15 Στο έκτο κεφάλαιο, που αποτελεί τον επίλογο της διπλωµατικής, γίνεται επισκόπηση της εργασίας και παρουσιάζονται ορισµένες ιδέες που αφορούν βελτιώσεις και µελλοντικές επεκτάσεις του συστήµατος. Στο έβδοµο κεφάλαιο, τέλος, δίνεται η βιβλιογραφία και γενικότερα οι πηγές από τις οποίες αντλήθηκαν οι απαραίτητες πληροφορίες για τη συγγραφή της διπλωµατικής. Στο κείµενο που ακολουθεί έγινε προσπάθεια να χρησιµοποιηθούν κυρίως ελληνικοί όροι στη θέση των αγγλικών που προτείνει το µοντέλο γραφικής αναπαράστασης ETL διαδικασιών. Κρίθηκε όµως ότι υπήρχαν όροι των οποίων η έννοια αποδίδεται καλύτερα στην Αγγλική γλώσσα. Για αυτούς τους όρους υπάρχει γλωσσάρι στο παράρτηµα µετά το έβδοµο κεφάλαιο. 3

16 4

17 2 Περιγραφή Θέµατος Στο κεφάλαιο αυτό παρουσιάζουµε εκτενέστερα το αντικείµενο της διπλωµατικής. Αρχικά γίνεται µία εισαγωγή στις ETL διαδικασίες, στη συνέχεια γίνεται µία αναφορά σε σχετικές µε το θέµα µας εργασίες, αναλύονται οι στόχοι που προσπαθούµε να επιτύχουµε και τέλος παρουσιάζεται το µοντέλο γραφικής αναπαράστασης ETL διαδικασιών που χρησιµοποιείται. 2.1 ETL ιαδικασίες Για ένα µεγάλο διάστηµα στο παρελθόν, η έρευνα αντιµετώπιζε τις Αποθήκες εδοµένων ως συλλογές υλοποιηµένων όψεων. Αν και αυτή η θεώρηση είναι κοµψή και πιθανώς επαρκής για τον σκοπό της εξέτασης εναλλακτικών στρατηγικών για την διατήρηση όψεων, κρίνεται ανεπαρκής για την περιγραφή της δοµής και των περιεχοµένων µίας Αποθήκης εδοµένων. Στο [VQVJ01] οι συγγραφείς θίγουν το ζήτηµα των λειτουργικών διαδικασιών των Αποθηκών δεδοµένων (data warehouse operational processes) και καταλήγουν στον ορισµό ενός πίνακα σε µία Αποθήκη εδοµένων ως το αποτέλεσµα ενός συνδυασµού των διαδικασιών που τον παράγουν. Αυτό το νέο είδος ορισµού συµπληρώνει τις υπάρχουσες προσεγγίσεις, καθώς παρέχει τη λειτουργική σηµασιολογία του περιεχοµένου ενός πίνακα Αποθήκης εδοµένων, ενώ οι υπάρχουσες δίνουν απλώς µία αφαίρεση της προθετικής σηµειολογίας του. 5

18 Με σκοπό να διευκολύνουµε και να χειριστούµε τις λειτουργικές διαδικασίες, εξειδικευµένα εργαλεία υπάρχουν ήδη στην αγορά, υπό τον γενικό χαρακτηρισµό εργαλεία Εξαγωγής- Μετασχηµατισµού-Φόρτωσης (ETL, Extraction-Transformation-Loading). Για να δώσουµε µία γενική ιδέα της λειτουργικότητας αυτών των εργαλείων αναφέρουµε τις πιο χαρακτηριστικές λειτουργίες τους, οι οποίες περιλαµβάνουν : την ταυτοποίηση της σχετικής πληροφορίας στην πλευρά της πηγής την εξαγωγή της πληροφορίας την προσαρµογή και την ενοποίηση πληροφορίας προερχόµενης από πολλαπλές πηγές σε µία κοινή µορφή τον καθαρισµό του απορρέοντος Data Set, µε βάση τους κανόνες της Βάσης εδοµένων αλλά και τις επιχειρηµατικές απαιτήσεις την προώθηση των δεδοµένων στην Αποθήκη εδοµένων και/ή στα Data Marts. Στη συνέχεια δε θα κάνουµε διάκριση µεταξύ των ETL λειτουργιών και αυτών του καθαρισµού των δεδοµένων και θα υιοθετήσουµε το όνοµα ETL και για τις δύο αυτές ενέργειες. Extract Transform & Clean Load Sources DSA DW Σχήµα : Το περιβάλλον των ETL διαδικασιών Στο σχήµα περιγράφεται αφηρηµένα το γενικό πλαίσιο των ETL διαδικασιών. Στο κατώτερο επίπεδο απεικονίζονται οι πηγές δεδοµένων που εµπλέκονται στην όλη διαδικασία. Στην αριστερή πλευρά, παρατηρούµε τους αρχικούς παροχείς δεδοµένων. Τυπικά, οι παροχείς δεδοµένων είναι σχεσιακές Βάσεις εδοµένων και αρχεία. Τα δεδοµένα από αυτές 6

19 τις πηγές εξάγονται (όπως φαίνεται στο πάνω αριστερό µέρος του Σχ ) από ρουτίνες εξαγωγής, οι οποίες παρέχουν είτε ολόκληρα στιγµιότυπα είτε τις διαφορές των πηγών. Στη συνέχεια, αυτά τα δεδοµένα αναπαράγονται στη Data Staging Area (DSA Μεταβατική Περιοχή Αποθήκευσης εδοµένων) όπου και µετασχηµατίζονται και καθαρίζονται πριν φορτωθούν στην Αποθήκη εδοµένων. Η Αποθήκη εδοµένων απεικονίζεται στο δεξί µέρος του στρώµατος αποθήκευσης δεδοµένων και αποτελεί τους τελικούς χώρους αποθήκευσης δεδοµένων, πιο συγκεκριµένα πίνακες δεδοµένων για την αποθήκευση της πληροφορίας και πίνακες διαστάσεων µε την περιγραφή και τις πολυδιάστατες, roll up ιεραρχίες των αποθηκευµένων δεδοµένων. Η φόρτωση της κεντρικής Αποθήκης εδοµένων γίνεται από τις αντίστοιχες ρουτίνες που απεικονίζονται στο πάνω δεξί µέρος του σχήµατος. Η σχετική βιβλιογραφία έχει αποδώσει διάφορα χαρακτηριστικά στις ETL διαδικασίες. Καταρχάς, µπορούµε σίγουρα να τις χαρακτηρίσουµε πολυσύνθετες. Η διαδικασία ανανέωσης µίας Αποθήκης εδοµένων µπορεί να αποτελείται από πολλές διαφορετικές υπολειτουργίες, όπως ο καθαρισµός των δεδοµένων, η αρχειοθέτηση, οι µετασχηµατισµοί και η συνένωση, διασυνδεόµενα µεταξύ τους µε ένα πολυσύνθετο σχέδιο. εύτερον, οι λειτουργικές διαδικασίες µίας Αποθήκης εδοµένων είναι δαπανηρές και πολύ κρίσιµες για την επιτυχία του όλου εγχειρήµατος. Στην πραγµατικότητα, ο σχεδιασµός και η υλοποίησή τους έχει χαρακτηριστεί ως µία επίπονη και εκτενής διεργασία, η οποία καλύπτει από το τριάντα έως το ογδόντα τοις εκατό της προσπάθειας και του κόστους της συνολικής κατασκευής της Αποθήκης εδοµένων. Τρίτον, αυτές οι διαδικασίες είναι πολύ σηµαντικές για την ορθότητα, την πληρότητα και την ενηµερότητα των περιεχοµένων της Αποθήκης εδοµένων, καθώς όχι µόνο διευκολύνουν τη φόρτωση της µε σύγχρονα δεδοµένα, αλλά και είναι υπεύθυνες για την οµογένεια της δοµής τους και το µπλοκάρισµα εσφαλµένων και ασυνεπών εισαγωγών. Σκοπός της διερεύνησης µας είναι να διευκολύνουµε, να χειριστούµε και να βελτιστοποιήσουµε το σχεδιασµό και την υλοποίηση των ETL διαδικασιών τόσο κατά τον αρχικό στάδιο σχεδιασµού και ανάπτυξης όσο και κατά τη διάρκεια της συνεχούς εξέλιξης της Αποθήκης εδοµένων. Για να διερευνήσουµε το προαναφερθέν πρόβληµα, πρέπει να αποσαφηνίσουµε τη θέση των ETL διαδικασιών στον κύκλο ζωής µίας Αποθήκης εδοµένων. Όπως µπορούµε να δούµε στο Σχήµα ο κύκλος ζωής µίας Αποθήκης εδοµένων ξεκινά µε ένα στάδιο Ανάστροφης Σχεδίασης και Συλλογής Απαιτήσεων (Reverse Engineering and Requirements Collection) κατά την οποία τα δεδοµένα αναλύονται ώστε να κατανοηθούν η δοµή και το περιεχόµενο τους. Ταυτοχρόνως, συλλέγονται οι διάφορες απαιτήσεις από την πλευρά των 7

20 χρηστών (συνήθως λίγοι διαχειριστές). Το προϊόν αυτού του σταδίου είναι ένα Εννοιολογικό Μοντέλο (Conceptual Model) για τα Data Stores και τις Activities (διεργασίες) [VaSS02b].Σε δεύτερη φάση, και συγκεκριµένα στο στάδιο Λογικού Σχεδιασµού (Logical Design), κατασκευάζεται το λογικό σχήµα της Αποθήκης και των Activities [VaSS02]. Τρίτον, το λογικό σχήµα και οι διαδικασίες εκλεπτύνονται µε βάση τις επιλογές όσον αφορά στις συγκεκριµένες φυσικές δοµές στην Αποθήκη (π.χ. ευρετήρια) και στις ανάλογες του περιβάλλοντος εκτέλεσης των λειτουργικών διαδικασιών παραµέτρους. Ονοµάζουµε αυτό το στάδιο Ρύθµιση (Tuning), και το προϊόν του Φυσικό Μοντέλο (Physical Model) του περιβάλλοντος. Σε ένα τέταρτο στάδιο, αυτό της Κατασκευής Λογισµικού (Software Construction), το κατάλληλο λογισµικό δηµιουργείται, ελέγχεται και αξιολογείται και µία πρώτη έκδοση της Αποθήκης εδοµένων κατασκευάζεται. Η όλη διαδικασία καθοδηγείται από συγκεκριµένες Μετρήσεις Λογισµικού (Software Metrics). Στη συνέχεια, ο κύκλος ξεκινά ξανά, καθώς οι απαιτήσεις των χρηστών, οι πηγές δεδοµένων και η Αποθήκη εδοµένων βρίσκονται σε συνεχή εξέλιξη. Ένα επιπλέον στοιχείο που εµφανίζεται στο προσκήνιο µετά την ανάπτυξη της Αποθήκης εδοµένων είναι αυτό της ιαχείρισης (Administration Task), το οποίο απαιτεί µε τη σειρά του ειδικές µετρήσεις για την συντήρηση και την επίβλεψη της Αποθήκης εδοµένων. Administration of DW Metrics Logical Model for DW, Sources & Activities Logical Design Tuning Full Activity Description Physical Model for DW, Sources & Activities Conceptual Model for DW, Sources & Activities Reverse Engineering of Sources & Software Requirements Construction Collection Software & SW Metrics Σχήµα : Ο κύκλος ζωής της Αποθήκης εδοµένων και των ETL διαδικασιών της 8

21 2.2 Σχετικές Εργασίες (εφαρµογές) Εµπορικά Εργαλεία και Πρότυπα. Τα εµπορικά εργαλεία είναι κυρίως υπεύθυνα για την υλοποίηση της ροής δεδοµένων στο περιβάλλον της Αποθήκης εδοµένων, η οποία είναι µόνο µία (αν και πολύ σηµαντική) από τις διεργασίες µίας Αποθήκης εδοµένων. Τα περισσότερα ETL εργαλεία είναι δύο ειδών: τα engine-based και τα code-generation based. Της πρώτης κατηγορίας υποθέτουν ότι τα δεδοµένα πρέπει να περάσουν από µία µηχανή για µετασχηµατισµό και επεξεργασία. Σε αυτά της δεύτερης κατηγορίας όλες οι διεργασίες λαµβάνουν χώρα είτε στο σύστηµα πηγή είτε στο σύστηµα στόχο. Υπάρχει ποικιλία τέτοιων εργαλείων στην αγορά. Ενδεικτικά αναφέρουµε τρία engine based εργαλεία, από τις Ardent [Arde01], DataMirror [Data01] και Microsoft [Micr01], και ένα code-generation based από την ΕΤΙ [ΕΤΙ01]. Το Open Information Model (ΟΙΜ) [MeCo99] είναι µία πρόταση (υπό την καθοδήγηση της Microsoft) για τους CORE τύπους µεταδεδοµένων στο λειτουργικό περιβάλλον και στο περιβάλλον της Αποθήκης εδοµένων των επιχειρήσεων. 2.3 Στόχος Στόχος αυτής της διπλωµατικής είναι η δηµιουργία ενός εργαλείου που θα προσφέρει ένα εύχρηστο γραφικό περιβάλλον για το σχεδιασµό και την αποθήκευση ETL σεναρίων µε βάση το µοντέλο που αναλύθηκε στην παράγραφο 2.2. Ο χρήστης θα µπορεί να σχεδιάζει τους κατάλληλους κόµβους όπως αυτοί ορίζονται στο παραπάνω µοντέλο και να ορίζει τις µεταξύ τους σχέσεις. Πιο συγκεκριµένα, θα επιλέγει τις πηγές των δεδοµένων, την Αποθήκη εδοµένων στην οποία επιθυµεί να προωθηθούν τα δεδοµένα αυτά, καθώς και τις Activities οι οποίες θα αναλάβουν την επεξεργασία τους. Στη συνέχεια θα ορίζει µε τη µορφή ακµών του γράφου Αρχιτεκτονικής τη ροή των δεδοµένων στο σενάριο. Για κάθε Activity θα σχεδιάζονται οι είσοδοι, οι έξοδοι και οι παράµετροί της.mε τη χρήση των κατάλληλων ακµών θα απεικονίζεται ο τρόπος µε τον οποίο µία Activity επεξεργάζεται τις εισόδους της, παρέχει δεδοµένα στις εξόδους της, το από που δέχονται δεδοµένα οι παράµετροι και τέλος ο ρόλος που παίζουν οι παράµετροι στη ρύθµιση των εξόδων της Activity. Όπως είναι προφανές, η ύπαρξη των κατάλληλων εργαλείων που θα υποστηρίζουν και θα διευκολύνουν τη σχεδίαση (αλλαγή διαστάσεων και µετακίνηση των κόµβων, σµίκρυνση ή µεγέθυνση του γράφου) είναι απαραίτητη. Το εργαλείο αυτό θα πρέπει ακόµα να δίνει τη δυνατότητα στο χρήστη να ορίζει πρότυπους τύπους δεδοµένων, συναρτήσεων και Activities που θα 9

22 χρησιµοποιεί στη συνέχεια ως templates κατά τη σχεδίαση του σεναρίου, αλλά και να βλέπει τη συσχέτιση των τύπων αυτών µε τα αντικείµενα στιγµιότυπά τους που υπάρχουν στο σενάριο. Είναι επιθυµητή ή όσο το δυνατόν µεγαλύτερη αυτοµατοποίηση της διαδικασίας σχεδιασµού ενός σεναρίου, στα πλαίσια πάντα του χρησιµοποιούµενου µοντέλου, χωρίς όµως να επηρεάζεται η ελευθερία για προσαρµογή του στις εκάστοτε ανάγκες του χρήστη. Επίσης, θα πραγµατοποιούνται οι σχετικές µετρήσεις σπουδαιότητας. Τέλος, το σενάριο θα µπορεί να αποθηκεύεται σε ένα repository σεναρίων για µελλοντική επεξεργασία και εξέλιξη, ενώ θα υπάρχει φυσικά η δυνατότητα επίδειξης ή διαγραφής ενός υπάρχοντος στο repository σεναρίου. 2.4 Μοντέλο Γραφικής Αναπαράστασης ETL ιαδικασιών Η διπλωµατική αυτή επικεντρώνεται κυρίως στο λογικό σχεδιασµό ενός ETL σεναρίου µίας Αποθήκης εδοµένων και πιο συγκεκριµένα στον ορισµό ενός τυπικού λογικού µοντέλου των ETL διαδικασιών. Γίνεται τυπική εισαγωγή στα DATΑ STORES, στα ACTIVITIES και στα συστατικά τους µέρη. Ένα ETL σενάριο αποτελείται από ένα συνδυασµό Πηγών εδοµένων και Activities. Στη συνέχεια δείχνουµε πώς αυτό το µοντέλο αποσυντίθεται σε ένα γράφο, τον οποίο ονοµάζουµε Γράφο Αρχιτεκτονικής. Μοντελοποιούνται όλες οι προαναφερθείσες οντότητες σαν κόµβοι και τέσσερα διαφορετικά είδη σχέσεων (στιγµιότυπου, µέρους, ρύθµισης και παροχής) σαν ακµές. Επίσης, παρουσιάζονται συγκεκριµένες µετρήσεις σπουδαιότητας, η εξάρτηση και η υπευθυνότητα, για τον υπολογισµό του βαθµού κατά τον οποίο είναι συνδεδεµένες µεταξύ τους οι οντότητες του σεναρίου, µε σκοπό να υποστηριχτεί ο σχεδιασµός και η εξέλιξη της Αποθήκης εδοµένων ΕΙΣΑΓΩΓΗ Το ιδεατό µοντέλο των ETL διαδικασιών καθώς και µία µεθοδολογία για την παραγωγή του περιγράφεται στο [VaSS02b]. Στο [VaSS02], η προσοχή επικεντρώνεται κυρίως στο λογικό σχεδιασµό του ETL σεναρίου µίας Αποθήκης εδοµένων µε τα ακόλουθα χαρακτηριστικά : Πρώτον, ο ορισµός ενός τυπικού λογικού µοντέλου ως µία λογική αφαίρεση των ETL διαδικασιών. Τα Data Stores, οι Activities και τα συστατικά τους µέρη ορίζονται αυστηρά. Ως Activity ορίζεται µία οντότητα µε ένα (ή περισσότερα) σχήµα(τα) εισόδου, ένα σχήµα εξόδου, ένα σχήµα απόρριψης για τις εγγραφές που δεν ικανοποιούν τα κριτήριά της και ένα σχήµα παραµέτρων έτσι ώστε η Activity να δέχεται κάθε φορά τις κατάλληλες τιµές παραµέτρων. Η ροή των δεδοµένων από τους παραγωγούς προς τους καταναλωτές επιτυγχάνεται µε τη χρήση των Provider 10

23 σχέσεων (σχέσεων παροχής) οι οποίες απεικονίζουν τα attributes (πεδία) του πρώτου σχήµατος στα αντίστοιχα του δεύτερου. Ένας σειριοποιήσιµος συνδυασµός από ETL Activities, Provider σχέσεις και Data Stores συνιστά ένα ETL Σενάριο. εύτερον, δείχνεται πώς αυτό το µοντέλο µπορεί να αναχθεί σε ένα γράφο, ο οποίος αποκαλείται Γράφος Αρχιτεκτονικής. Μοντελοποιούνται όλες οι προαναφερθείσες οντότητες ως κόµβοι και τέσσερα διαφορετικά είδη σχέσεων ως ακµές. Αυτές οι σχέσεις αντιστοιχούν σε (α) πληροφορίες ελέγχου τύπου (Instance-of relationships), (β) σχέσεις µέρους, π.χ. σε ποια Activity ανήκει ένα attribute (Part-of relationships), (γ) σχέσεις ρύθµισης, οι οποίες καλύπτουν το θέµα της παροχής δεδοµένων στις παραµέτρους των Activities από attributes ή σταθερές (Regulator Relationships ) και (δ) σχέσεις παροχής που προσδιορίζουν τη ροή των δεδοµένων από τα attributes πηγές στα attributes καταναλωτές (Provider Relationships). Τέλος, µετριέται η σηµασία καθώς και η ευπάθεια των κόµβων µέσω κάποιων metrics και πιο συγκεκριµένα αυτών της εξάρτησης και της υπευθυνότητας. Η εξάρτηση δείχνει το βαθµό κατά τον οποίο συνδέεται µε άλλες οντότητες που του παρέχουν δεδοµένα και η υπευθυνότητα το βαθµό κατά τον οποίο άλλες οντότητες του γράφου εξαρτώνται από τον υπό θεώρηση κόµβο. Η εξάρτηση και η υπευθυνότητα είναι κρίσιµες µετρήσεις για την κατασκευή και την εξέλιξη του ETL περιβάλλοντος Γενικό Μοντέλο των ETL ACTIVITIES Το µοντέλο αυτό ξεφεύγει από τις τεχνικότητες της επίβλεψης, του προγραµµατισµού και των αρχείων παρακολούθησης εργασιών (Logs), καθώς επικεντρώνεται κυρίως στη ροή των δεδοµένων από τις πηγές προς την Αποθήκη εδοµένων µέσω ενός συνδυασµού από Activities και Data Stores Βασικές Αρχές Σε αυτό το τµήµα, γίνεται εισαγωγή της τυπικής µοντελοποίησης των Τύπων εδοµένων (Data Types), των Data Stores και των συναρτήσεων, πριν προχωρήσουµε στην περιγραφή της µοντελοποίησης των ETL Activities, όπως αυτά αναφέρονται στο [VaSS02]. Βασικές Οντότητες. Υποθέτουµε την ύπαρξη ενός αριθµίσιµου συνόλου από Τύπους εδοµένων. Κάθε τύπος Τ χαρακτηρίζεται από ένα όνοµα και έναν τοµέα, δηλαδή ένα αριθµίσιµο σύνολο τιµών, το οποίο καλείται dom(t). Οι τιµές των τοµέων αναφέρονται ως Σταθερές. 11

24 Επίσης, υποθέτουµε την ύπαρξη ενός πεπερασµένου συνόλου από Attributes. Τα attributes χαρακτηρίζονται από το όνοµά τους και τον τύπο δεδοµένου τους και αποτελούν το πιο θεµελιώδες στοιχείο της δοµής του όλου συστήµατος. Ο τοµέας ενός attribute είναι ένα υποσύνολο του τοµέα του τύπου του. Τα attributes και οι σταθερές αναφέρονται συνολικά ως όροι (terms). Σχήµα είναι µία πεπερασµένη λίστα από attributes.κάθε οντότητα η οποία χαρακτηρίζεται από ένα ή περισσότερα σχήµατα αποκαλείται οµηµένη Οντότητα 1.Επιπλέον, υποθέτουµε την ύπαρξη µίας ειδικής οικογένειας από σχήµατα, όλα υπό το γενικό όνοµα NULL σχήµα, µε σκοπό να δρα ως χώρος κράτησης δεδοµένων που δεν θα αποθηκευτούν µόνιµα σε κάποιο Data Store. H αναφορά σε µία οικογένεια και όχι σε ένα µόνο NULL σχήµα οφείλεται σε µία λεπτοµέρεια που έχει να κάνει µε τον αριθµό των attributes που έχει ένα τέτοιο σχήµα. RecordSets(σύνολα εγγραφών). Ορίζεται ως εγγραφή το στιγµιότυπο ενός σχήµατος σε µία λίστα από τιµές οι οποίες ανήκουν στους τοµείς των αντίστοιχων attributes του σχήµατος. Όπως αναφέρεται στο [VQVJ01] µπορούµε να αντιµετωπίσουµε οποιαδήποτε δοµή δεδοµένων σαν ένα σύνολο εγγραφών µε την προϋπόθεση ότι είναι δυνατόν να την αναδοµήσουµε λογικά σε ένα επίπεδο τυπικό σχήµα εγγραφών. Αρκετές φυσικές δοµές αποθήκευσης υποτάσσονται στον κανόνα αυτό, όπως είναι οι σχεσιακές βάσεις δεδοµένων,cobol ή ASCII αρχεία, πολυδιάστατοι κύβοι κ.τ.λ. Ο γενικός όρος RecordSet θα χρησιµοποιηθεί στη συνέχεια κάθε φορά που αναφερόµαστε σε δοµές τέτοιου είδους. Παραδείγµατος χάριν, το σχήµα των πολυδιάστατων κύβων είναι της µορφής [D 1,,D n,m 1,,M m ] όπου το D i αναπαριστά διαστάσεις (που αποτελούν το πρωτεύον κλειδί του κύβου) και το Μ i µετρικές [VaSk00].Άλλο παράδειγµα είναι τα αρχεία COBOL, τα οποία είναι εγγραφές µε πεδία που έχουν δύο ιδιαιτερότητες: φωλιασµένες εγγραφές και εναλλακτικές αναπαραστάσεις. Εύκολα µπορούν να αποκανονικοποιηθούν οι πρώτες και να επιλεγεί µία από τις δεύτερες. Οι σχεσιακές Βάσεις εδοµένων είναι προφανώς RecordSets επίσης. Τυπικά, ένα RecordSet χαρακτηρίζεται από το όνοµα του, το λογικό του σχήµα και τη φυσική του έκταση (δηλ. ένα πεπερασµένο σύνολο από εγγραφές υπό το σχήµα του).εάν θεωρήσουµε ένα σχήµα S=[A 1,,A k ] για ένα συγκεκριµένο RecordSet η έκτασή του είναι µία αντιστοίχηση S=[A 1,,A k ] dom(a 1 ) dom(a k ). Συνεπώς, η έκταση ενός RecordSet είναι ένα πεπερασµένο υποσύνολο του dom(a 1 ) dom(a k ) και µία εγγραφή είναι ένα στιγµιότυπο της αντιστοίχησης dom(a 1 ) dom(a k ) [x 1,,x k ] όπου x i dom (A i ). 1 Σε αντίθεση µε τα µη δοµηµένα ή τα ηµιδοµηµένα δεδοµένα, τα οποία και δεν θεωρούνται µέρος του συγκεκριµένου µοντέλου. 12

25 Οι δύο πιο δηµοφιλείς τύποι RecordSet είναι οι σχεσιακοί πίνακες και τα αρχεία εγγραφών, και σε αυτούς θα επικεντρώσουµε την προσοχή µας. Μία Βάση εδοµένων ορίζεται ως ένα πεπερασµένο σύνολο από σχεσιακούς πίνακες. Συναρτήσεις. Υποθέτουµε την ύπαρξη ενός αριθµίσιµου συνόλου από ενσωµατωµένους στο σύστηµα τύπους συναρτήσεων. Ένας τύπος συνάρτησης περιλαµβάνει ένα όνοµα, µία πεπερασµένη λίστα από τύπους δεδοµένων των παραµέτρων του και ένα µόνο τύπο αποτελέσµατος. Μία συνάρτηση είναι ένα στιγµιότυπο ενός τύπου συνάρτησης. Συνεπώς χαρακτηρίζεται και αυτή από ένα όνοµα, µία λίστα από παραµέτρους εισόδου και µία παράµετρο για την επιστρέφουσα τιµή. Οι τύποι δεδοµένων των παραµέτρων του γεννήτορα τύπου συνάρτησης ορίζουν : (α) τους τύπους των παραµέτρων της συνάρτησης καθώς και (β) τους δεκτούς υποψήφιους των τελευταίων (δηλαδή attributes ή σταθερές κατάλληλου τύπου δεδοµένων) Activities και Σχέσεις Όπως αναφέρεται στο [VaSS02] οι Activities είναι η ραχοκοκαλιά της δοµής κάθε πληροφοριακού συστήµατος. Υιοθετώντας την WfMC ορολογία για τις εργασίες θα τις αποκαλούµε στη συνέχεια Activities. Μία Activity είναι το σύνολο της εργασίας που διεκπεραιώνεται µέσω ενός συνδυασµού από πόρους και εφαρµογές υπολογιστών [WfMC98].Στο πλαίσιο στο οποίο κινηθήκαµε οι Activities είναι λογικές αφαιρέσεις που αναπαριστούν µέρη ή και ολόκληρες ενότητες κώδικα. Η εκτέλεση µίας Activity πραγµατοποιείται από ένα συγκεκριµένο πρόγραµµα. Συνήθως οι ETL Activities εκτελούνται µε την τεχνική του µαύρου κουτιού από ένα ειδικό εργαλείο ή εκφράζονται σε µία scripting γλώσσα (π.χ. PL/SQL, Perl, C). Εντούτοις στο δικό µας πλαίσιο ασχολούµαστε µε τη γενική περίπτωση των ETL Activities συνεπώς υιοθετείται µία αφαίρεση του πηγαίου κώδικα µε τη µορφή µίας SQL πρότασης, µε σκοπό να αποφύγουµε την ενασχόληση µε τις ιδιαιτερότητες κάθε προγραµµατιστικής γλώσσας. Πρέπει ωστόσο να γίνει σαφές ότι αυτή η SQL πρόταση δεν απεικονίζει τον τρόπο µε τον οποίο υλοποιούνται οι Activities αλλά την σηµασιολογία της κάθε µίας. Μία Στοιχειώδης Activity τυπικά περιγράφεται από τα παρακάτω στοιχεία: Όνοµα. Ένα µοναδικό αναγνωριστικό για κάθε Activity. Σχήµατα εισόδου. Ένα πεπερασµένο σύνολο από ένα ή περισσότερα σχήµατα εισόδου τα οποία δέχονται δεδοµένα από τις πηγές δεδοµένων τις Activity. 13

26 Σχήµα εξόδου. Το σχήµα που περιγράφει τον προσωρινό χώρο αποθήκευσης για τις σειρές που ικανοποιούν τον πραγµατοποιούµενο από την Activity έλεγχο. Σχήµα Απόρριψης. Το σχήµα που περιγράφει τον προσωρινό χώρο αποθήκευσης για τις σειρές που δεν ικανοποιούν τον πραγµατοποιούµενο από την Activity έλεγχο ή οι τιµές τους δεν είναι κατάλληλες για τον εκτελούµενο µετασχηµατισµό. Λίστα Παραµέτρων. Ένα σύνολο από ζεύγη που λειτουργούν ως ρυθµιστές για την λειτουργικότητα της Activity (π.χ. το attribute-στόχο ενός ελέγχου για εξωτερικό κλειδί). Το πρώτο συστατικό του ζεύγους είναι ένα όνοµα και το δεύτερο ένα σχήµα, ένα attribute µία συνάρτηση ή µία σταθερά. Λειτουργική Σηµασιολογία Εξόδου. Μία SQL πρόταση που περιγράφει το περιεχόµενο που περνιέται στην έξοδο της λειτουργίας, αναφορικά µε είσοδο της. Αυτή η SQL πρόταση ορίζει (α) τη λειτουργία που επιτελείται στις σειρές που περνούν από την Activity και (β) µία αυστηρή απεικόνιση µεταξύ των attributes εισόδου και των αντίστοιχων attributes του σχήµατος εξόδου. Λειτουργική Σηµασιολογία Απόρριψης. Μία SQL πρόταση που περιγράφει τις απορριφθείσες εγγραφές, κατά κάποια έννοια παρόµοια µε τη Λειτουργική Σηµασιολογία Εξόδου. Αυτή η πρόταση θεωρείται εξ ορισµού να είναι η άρνηση της Λειτουργικής Σηµασιολογίας Εξόδου, εκτός και αν σαφώς οριστεί διαφορετικά. Σηµασιολογία Πηγής / Καταναλωτή εδοµένων. Ορίζει (α) αν τα δεδοµένα απλώς διαβάζονται (πρότυπη συµπεριφορά) ή διαβάζονται και στη συνέχεια διαγράφονται από την πηγή δεδοµένων και (β) αν τα δεδοµένα προστίθενται στον καταναλωτή (πρότυπη συµπεριφορά) ή αν τα περιεχόµενα του καταναλωτή επικαλύπτονται από τις εξόδους της λειτουργίας. Συνεπώς, ο τοµέας της Σηµασιολογίας Πηγής εδοµένων είναι {SELECT,DELETE} και ο τοµέας της Σηµασιολογίας Καταναλωτή εδοµένων είναι {APPEND,OVERWRITE}. Πρέπει να σηµειωθεί ότι: Η Σηµασιολογία Πηγής / Καταναλωτή εδοµένων είναι µία διευκόλυνση που χρησιµοποιείται µε σκοπό την κάλυψη των περιπτώσεων Activities που διαγράφουν ή ενηµερώνουν πίνακες στην Αποθήκη εδοµένων. Στη συνέχεια θα αναφερόµαστε µόνο σε Activities που απλά διαβάζουν δεδοµένα από τις πηγές και προσθέτουν στους στόχους τους. Παρόλα αυτά θεωρούµε ότι ακόµα και αυτή η περίπτωση δεν αλλοιώνει ιδιαίτερα τα όσα αναφέρονται παρακάτω. Όποτε δεν αναφέρεται σαφώς ένας καταναλωτής δεδοµένων για το σχήµα εξόδου ή απόρριψης, συνεπάγεται η ύπαρξη του αντίστοιχου NULL σχήµατος 14

27 (περιλαµβάνοντας τον σωστό αριθµό attributes). Αυτό στην ουσία σηµαίνει ότι τα δεδοµένα που παράγονται ούτε προωθούνται σε µία άλλη Activity ούτε αποθηκεύονται κάπου, δηλαδή απλώς αγνοούνται. Η ροή των δεδοµένων από τις πηγές προς την Αποθήκη εδοµένων επιτυγχάνεται µε το συνδυασµό των Activities σε ένα µεγαλύτερο σενάριο. Η είσοδος µιας Activity µπορεί να είναι είτε ένα µόνιµο Data Store είτε η έξοδος µίας άλλης Activity, δηλαδή κάθε δοµηµένη οντότητα υπό κάποιο συγκεκριµένο σχήµα. Το ίδιο ισχύει και για την έξοδο της Activity. Η απεικόνιση του περάσµατος των δεδοµένων από τις πηγές στους καταναλωτές γίνεται µε µία σχέση Provider (παροχής) ανάµεσα στα attributes των εµπλεκόµενων σχηµάτων 2. Τυπικά µία Provider σχέση Provider ορίζεται από τα εξής: Όνοµα: Ένα µοναδικό αναγνωριστικό για τη σχέση 3. Αντιστοίχηση: Ένα διατεταγµένο ζεύγος. Το πρώτο µέρος του ζεύγους είναι ένα attribute το οποίο λειτουργεί ως πηγή και το δεύτερο ένα attribute που λειτουργεί ως καταναλωτής. Η αντιστοίχηση δεν είναι αναγκαίο να είναι 1:1 καθώς ένα attribute εισόδου µπορεί να παρέχει δεδοµένα για περισσότερα από attributes. Παρόλα αυτά το αντίστροφο δεν ισχύει. Επίσης να σηµειωθεί ότι ένα Attribute µπορεί να δεχτεί δεδοµένα από µια σταθερά σε ορισµένες περιπτώσεις 4. Προκειµένου να επιτευχθεί η ροή των δεδοµένων από τις πηγές µίας Activity προς τους καταναλωτές τους είναι απαραίτητες τρεις οµάδες Provider σχέσεων : 1. Μία αντιστοίχηση ανάµεσα στο σχήµα εξόδου των πηγών και το σχήµα εισόδου της Activity.Αυτό σηµαίνει ότι για κάθε attribute του σχήµατος εισόδου θα πρέπει να υπάρχει ένα attribute της πηγής δεδοµένων που να αντιστοιχεί στο προαναφερθέν attribute. 2. Μία αντιστοίχηση ανάµεσα στα attributes του σχήµατος εισόδου και σε αυτά του σχήµατος εξόδου ή απόρριψης. 2 Χωρίς βλάβη της γενικότητας, στη συνέχεια θα χρησιµοποιείται ο όρος τόσο για τα εµπλεκόµενα σχήµατα όσο και για τις αντίστοιχες δοµηµένες οντότητες. 3 εδοµένης της µοναδικότητας της αντιστοίχησης µίας σχέσης σε ένα σενάριο, µε άλλα λόγια του µοναδικού τρόπου µε τον οποίο µπορούν να συνδέονται δύο οντότητες ενός σεναρίου, το όνοµα µπορεί να θεωρηθεί ότι προκύπτει από την αντιστοίχηση ως Attribute Πηγή - Attribute Καταναλωτής. 4 Πρόκειται για την περίπτωση δηµιουργίας ενός καινούργιου Attribute που δέχεται τα δεδοµένα του από µία σταθερά, η οποία µπορεί να αντικατασταθεί µε τη δηµιουργία µίας ενδιάµεσης παραµέτρου και Regulator σχέσεων (βλ. Παράγραφο 2.3.1) 15

28 3. Μία αντιστοίχηση ανάµεσα στο σχήµα εξόδου της Activity και στο σχήµα εισόδου του καταναλωτή των δεδοµένων της. Οι αντιστοιχήσεις της δεύτερης οµάδας είναι εσωτερικές για την κάθε Activity.Μπορούν να παραχθούν από την SQL πρόταση του σχήµατος εξόδου / απόρριψης. Οι υπόλοιπες θα πρέπει να καθοριστούν κατά την κατασκευή του σεναρίου από τον χρήστη. POPULATED_FIELD NotNull_A1 IN IN.A 1 OUT IN A 1 A 1 A 1 A 1 A 2 A 2 A 2 A 2 R A 3 A 3 A 3 A 3 A 4 A 4 A 4 A 4 OUT OPERATIONAL SEMANTICS Legend: NotNull_A1 SK_A2 SELECT IN.A1 AS OUT.A1, IN.A2 AS OUT.A2, R IN.A3 AS OUT.A3, IN.A4 AS OUT.A4 FROM NOTNULL_A1.IN WHERE IN.A1 NOT NULL Σχήµα : Τα σχήµατα και η ροή δεδοµένων ενός µικρού σεναρίου Στο παράδειγµα του σχήµατος διαβάζουµε δεδοµένα από τον πίνακα-πηγή R και τα περνάµε από ένα έλεγχο για NULL τιµές στο πεδίο Α 1.Στη συνέχεια προωθούµε τα δεδοµένα που ικανοποιούν τον πρώτο έλεγχο σε ένα δεύτερο µετασχηµατισµό. Στο πάνω µέρος του σχήµατος παρατηρούµε τα εξής στοιχεία: i. Το RecordSet R περιλαµβάνει τα attributes Α 1,Α 2,Α 3,Α 4. ii. Τις Provider σχέσεις µεταξύ του σχήµατος του R και του σχήµατος εισόδου IN της Activity NotNull_A1. iii. Τις Provider σχέσεις µεταξύ του σχήµατος εισόδου IN και του σχήµατος εξόδου OUT της Activity NotNull_A1. iv. Τις Provider σχέσεις µεταξύ του σχήµατος εξόδου OUT της Activity NotNull_A1 και του σχήµατος εισόδου IN της Activity SK_A2. v. Τη λειτουργική σηµασιολογία εξόδου της Activity NotNull_A1 µε τη µορφή SQL πρότασης. Για λόγους απλότητας του σχήµατος δεν ασχολούµαστε µε τα σχήµατα απόρριψης των αναφερθέντων Activities, θεωρώντας ότι είναι η άρνηση των σχηµάτων εξόδου. 16

29 Σενάρια Ένα Σενάριο είναι µία απαρίθµηση από Activities µαζί µε τα RecordSet πηγές / στόχους και τις αντίστοιχες Provider σχέσεις για κάθε Activity. Τυπικά ένα Σενάριο αποτελείται από τα εξής: Όνοµα: Ένα µοναδικό αναγνωριστικό. Activities: Μία πεπερασµένη λίστα από Activities.Να σηµειωθεί ότι χρησιµοποιώντας λίστα (αντί συνόλου) επιβάλλουµε µία συνολική διάταξη των Activities στην εκτέλεση του Σεναρίου. RecordSets: Ένα πεπερασµένο σύνολο από RecordSets. Στόχοι: Ένα ειδικού σκοπού υποσύνολο των RecordSets του σεναρίου, το οποίο περιλαµβάνει τους τελικούς προορισµούς της όλης διαδικασίας (στην ουσία τους πίνακες της Αποθήκης εδοµένων που πρέπει να γεµίσουν από τις Activities του Σεναρίου). Provider σχέσεις: Μία πεπερασµένη λίστα από Provider σχέσεις µεταξύ των Activities και των RecordSets του Σεναρίου. ιαισθητικά µπορούµε να πούµε ότι ένα Σενάριο είναι ένα σύνολο από Activities αναπτυγµένες κατά µήκους ενός γράφου, σε µία σειρά εκτέλεσης η οποία είναι γραµµικά σειριοποιήσιµη 5. Επιπλέον, θεωρούµε τους παρακάτω Περιορισµούς Ακεραιότητας για ένα Σενάριο : Στατικοί Περιορισµοί: Όλες οι αδύναµες οντότητες ενός σεναρίου (attributes και παράµετροι) πρέπει να ενυπάρχουν σε µία Part-of σχέση (δηλαδή θα πρέπει να έχουν ένα περιέχον αντικείµενο) Όλες οι αντιστοιχήσεις στις Provider σχέσεις θα πρέπει να ορίζονται µεταξύ attributes του ίδιου τύπου δεδοµένων. Περιορισµοί Ροής εδοµένων: Όλα τα attributes του σχήµατος εισόδου πρέπει να έχουν µία πηγή δεδοµένων. 5 Για την ώρα δε θεωρούµε τις διάφορες εναλλακτικές της διάταξης εκτέλεσης του Σεναρίου απλώς απαιτούµε την ύπαρξη µίας συνολικής διάταξης για την κάθε εκτέλεση, δηλαδή κάθε Activity να έχει µία συγκεκριµένη προτεραιότητα εκτέλεσης. 17

30 Ως αποτέλεσµα της προηγούµενης απαίτησης, εάν ένα attribute χρησιµοποιείται σε µία Activity Α, τότε το περιέχον αντικείµενό του πρέπει να προηγείται της Α στη διάταξη εκτέλεσης του σεναρίου. Όλα τα Attributes των σχηµάτων των RecordSets στόχων πρέπει να έχουν µία πηγή δεδοµένων Κινητήριο Παράδειγµα Στη συνέχεια παρουσιάζεται ένα παράδειγµα βασισµένο στα πρότυπα TPC-R/TPC-H [TPC00]. Υποθέτουµε την ύπαρξη δύο Βάσεων εδοµένων πηγών S 1 και S 2 καθώς και µίας Αποθήκης εδοµένων όλα υπό τα σχήµατα του πίνακα Επιπλέον υποθέτουµε και την ύπαρξη µίας Μεταβατικής Περιοχής Αποθήκευσης εδοµένων (Data Staging Area- DSA), όπου λαµβάνουν χώρα όλοι οι µετασχηµατισµοί. Πηγή Όνοµα Recordset Σχήµα Recordset S 1 S 1.PARTSUPP PKEY, DATE, QTY, COST S 2 S 2.PARTSUPP PKEY, QTY, COST DSA DS.PS_NEW 1 PKEY, DATE, QTY, COST DS.PS_OLD 1 DS.PS 1 DS.PS_NEW 2 DS.PS_OLD 2 DS.PS 2 PKEY, DATE, QTY, COST PKEY, DATE, QTY, COST PKEY, QTY, COST PKEY, QTY, COST PKEY, QTY, COST DW DW.PARTSUPP PKEY, SUPPKEY, DATE, QTY, COST LOOKUP_PS V1 V2 TIME PKEY, SOURCE, SKEY PKEY, DAY, MIN_COST PKEY, MONTH, AVG_COST DAY, MONTH, YEAR Πίνακας : Τα σχήµατα των Βάσεων εδοµένων-πηγών και της Αποθήκης εδοµένων Το σενάριο περιλαµβάνει την προώθηση των δεδοµένων από τον πίνακα PARTSUPP της πηγής S 1 καθώς και από τον ίδιο πίνακα της πηγής S 2 στην Αποθήκη εδοµένων. Ο πίνακας DW.PARTSUPP αποθηκεύει πληροφορίες για την διαθέσιµη ποσότητα (QTY) και το κόστος (COST) των εξαρτηµάτων (PKEY) ανά προµηθευτή (SUPPKEY). Πρακτικά, οι δύο πηγές S 1 και S 2 αναπαριστούν τους προµηθευτές της Αποθήκης εδοµένων. Υποθέτουµε ότι ο πρώτος προµηθευτής είναι Αµερικανός ενώ ο δεύτερος Ευρωπαίος, συνεπώς τα δεδοµένα που προέρχονται από την πρώτη πηγή πρέπει να µετατραπούν σε Ευρωπαϊκές τιµές και τύπους. 18

31 Όταν γεµίσει ο πίνακας PARTSUPP τα δεδοµένα συναθροίζονται για να γεµίσουν δύο Data Marts V 1 και V 2 στην Αποθήκη εδοµένων. Όλα τα attributes εκτός από τις ηµεροµηνίες είναι τύπου Integer (ακεραίου). To Data Mart V 1 αποθηκεύει πληροφορίες για το ελάχιστο κόστος των εξαρτηµάτων κάθε µέρα και τo Data Mart V 2 πληροφορίες για το µέσο κόστος των εξαρτηµάτων κάθε µήνα. Τα attributes ηµεροµηνίας των πινάκων S 1.PARTSUPP, DS.PS_NEW 1, DS.PS.OLD 1, DS.PS 1, είναι τύπου US_DATE (ηµεροµηνία Αµερικής) και όλα τα attributes ηµεροµηνίας είναι EU_DATE (ηµεροµηνία Ευρώπης).Το σενάριο απεικονίζεται γραφικά στο σχήµα και περιλαµβάνει τους εξής µετασχηµατισµούς: 1. Πρώτον µεταφέρουµε µέσω FTP τα στιγµιότυπα από τις πηγές S 1.PARTSUPP και S 2.PARTSUPP στα RecordSet DS.PS_NEW 1 και DS.PS_NEW 2 του DSA. 2. Στο DSA διατηρούµε τοπικά δύο αντίγραφα του στιγµιότυπου κάθε πηγής. Το RecordSet DS.PS_NEW 1 αντιπροσωπεύει το πιο πρόσφατο στιγµιότυπο του S 1.PARTSUPP ενώ το DS.PS.OLD 1 το προτελευταίο µεταφερµένο στιγµιότυπο. Από την ανίχνευση των διαφορών αυτών προκύπτουν οι νεοεισελθείσες εγγραφές στην πηγή S 1.PARTSUPP. Αποθηκεύουµε τις σειρές αυτές στο RecordSet DS.PS 1. Να σηµειωθεί ότι η Activity διαφορών που χρησιµοποιούµε, η Diff 1, ελέγχει για διαφορές µόνο στο πρωτεύον κλειδί προφανώς λοιπόν αγνοούνται οι πιθανές διαγραφές ή ανανεώσεις των attributes COST, QTY των υπαρχόντων σειρών. Τα ίδια συµβαίνουν και για τα δεδοµένα που προέρχονται από την πηγή S Στη συνέχεια ξεκινούν δύο ροές, µία για τις σειρές του DS.PS 1 και µία άλλη για αυτές του DS.PS 2. Και για τις δύο ροές προσθέτουµε ένα attribute σηµαία, το SUPPKEY, έτσι ώστε να συγκρατήσουµε τον προµηθευτή της κάθε σειράς, το οποίο παίρνει τιµή 1 ή 2 για τον αντίστοιχο προµηθευτή. Αυτό επιτυγχάνεται µέσω των Activities Add_SPK 1 και Add_SPK 2 αντίστοιχα. 4. Ξανά, και στις δύο ροές, αναθέτουµε ένα surrogate (υποκατάστατο) κλειδί στο PKEY, για τα δεδοµένα και των δύο πηγών. Στο περιβάλλον της Αποθήκης εδοµένων είναι κοινή τακτική η αντικατάσταση των κλειδιών των συστηµάτων παραγωγής µε ένα οµοιόµορφο κλειδί, το οποίο αποκαλούµε surrogate κλειδί. Οι βασικοί λόγοι για αυτή την αντικατάσταση είναι η απόδοση και η σηµασιολογική οµοιοµορφία. Τα αλφαριθµητικά δεν είναι τα καλύτερα δυνατά κλειδιά και πρέπει να αντικατασταθούν από κλειδιά ακεραίους. Επίσης, διαφορετικά συστήµατα παραγωγής µπορεί να χρησιµοποιούν διαφορετικά κλειδιά για το ίδιο αντικείµενο ή ίδιο κλειδί για διαφορετικά αντικείµενα, γεγονός που απαιτεί την αντικατάστασή των τιµών αυτών στην Αποθήκη 19

32 εδοµένων. Αυτή γίνεται µε τη συνδροµή ενός πίνακα αναζήτησης της µορφής L(PRODKEY,SOURCE,SKEY). Η στήλη SOURCE οφείλεται στο γεγονός ότι µπορούν να υπάρχουν συνώνυµα στις πηγές τα οποία αντιστοιχίζονται σε διαφορετικά αντικείµενα στην Αποθήκη εδοµένων. Στο συγκεκριµένο σενάριο οι δύο Activities που πραγµατοποιούν την ανάθεση του surrogate κλειδιού είναι οι SK 1 και SK 2 αντίστοιχα για τις δύο ροές. Και στις δύο περιπτώσεις χρησιµοποιείται ο πίνακας αναζήτησης LOOKUP_PS. 5. Στην ροή δεδοµένων του S 1, χρειάζεται να εφαρµόσουµε µία συνάρτηση στο attribute COST που να µετατρέπει τις τιµές από Αµερικανικά δολάρια σε Ευρώ. Επίσης είναι απαραίτητο να µετατρέψουµε τις Αµερικανικές ηµεροµηνίες (attribute DATE) σε Ευρωπαϊκή µορφή. Οι µετασχηµατισµοί που αναφέρθηκαν πραγµατοποιούνται από τις Activities $2 και A2Edate. 6. Ταυτόχρονα, για τα δεδοµένα που προέρχονται από το S 2 πραγµατοποιούµε τους εξής τρεις µετασχηµατισµούς: (α) έλεγχο για NULL τιµές του attribute COST (Activity NotNULL) (β) πρόσθεση ενός attribute DATE µε τιµή την ηµεροµηνία του συστήµατος καθώς η πηγή S 2 δεν περιέχει πληροφορία ηµεροµηνίας (Activity AddDate) και (γ) επιλογή µόνο των εγγραφών για τις οποίες υπάρχει διαθέσιµη ποσότητα. (QTY>0, Activity CheckQTY) 7. Στη συνέχεια, οι δύο ροές δεδοµένων συγχωνεύονται σε µία µέσω µίας Activity ένωσης, την U, η οποία γεµίζει επίσης τον πίνακα DW.PARTSUPP. 8. Ακολούθως, πρέπει να γεµίσουµε τα δύο Data Marts της Αποθήκης εδοµένων. Για το V 1 απλώς οµαδοποιούµε κατά DAY και PKEY για τον υπολογισµό του ελάχιστου κόστους ανά εξάρτηµα µέσω της Activity AGGREGATE Όσον αφορά στο V 2 κάνουµε join των δεδοµένων του πίνακα DW.PARTSUPP µε αυτά του πίνακα TIME (Activity ) και στη συνέχεια συναθροίζουµε το αποτέλεσµα ανά MONTH και PKEY για τον υπολογισµό του µέσου κόστους ανά εξάρτηµα (Activity AGGREGATE) 20

33 DS.PS_NEW 1.PKEY, SUPPKEY=1 DS.PS 1.PKEY, LOOKUP_PS.SKEY, COST DATE DS.PS_NEW 1 DIFF 1 DS.PS 1 Add_SPK 1 SK 1 rejected $2 rejected A2EDate rejected U DS.PS_OLD 1 Log Log Log DS.PS_NEW 2.PKEY, SUPPKEY=2 DS.PS 2.PKEY, LOOKUP_PS.SKEY COST DATE=SYSDATE QTY>0 DS.PS_NEW 2 DIFF 2 DS.PS 2 Add_SPK 2 SK 2 NotNULL AddDate CheckQTY DS.PS_OLD 2 Log rejected Log rejected PKEY, DAY S 1 _PARTSUPP FTP 1 DW.PARTSUPP Aggregate 1 V 1 DW.PARTSUPP.DATE, PKEY, MONTH S 2 _PARTSUPP FTP 2 Σχήµα : Κινητήριο Παράδειγµα TIME Aggregate 2 V 2 21

34 Σηµειώνεται επίσης, ότι για µερικές από τις προαναφερόµενες Activities (SK 1,2, NotNULL, $2, A2Edate) είναι απαραίτητο να ανιχνεύσουµε τις σειρές που δεν περνούν τον έλεγχο που πραγµατοποιεί ο κάθε µετασχηµατισµός. Στην περίπτωση αυτή χρησιµοποιούµε το σχήµα απόρριψης της Activity και στέλνουµε τις εν λόγω σειρές στο αντίστοιχο Log αρχείο Ο Γράφος Αρχιτεκτονικής ενός ETL Σεναρίου Στις προηγούµενες παραγράφους δώσαµε τον τυπικό ορισµό των Activities, των RecordSets και των άλλων συνθετικών ενός ETL σεναρίου. Το συνολικό πλάνο ενός ETL σεναρίου, συµπεριλαµβάνοντας Activities, RecordSets και συναρτήσεις µπορεί να µοντελοποιηθεί ως γράφος, που ονοµάζεται Γράφος Αρχιτεκτονικής. Ο γράφος αρχιτεκτονικής περιέχει όλες τις Activities και τα Data Stores ενός σεναρίου, καθώς και τα συστατικά τους. Επίσης, απεικονίζει τη ροή των δεδοµένων µέσα σε ένα ETL περιβάλλον. Τέλος, καλύπτει τον καθορισµό τύπου για όλες τις εµπλεκόµενες οντότητες, καθώς και τη ρύθµιση του σεναρίου από συγκεκριµένες παραµέτρους Εισαγωγή στον Γράφο Αρχιτεκτονικής Υποθέτουµε τα απείρως µετρήσιµα, αµοιβαία ορθογώνια σύνολα ονοµάτων (δηλαδή τις τιµές που ικανοποιούν την υπόθεση µοναδικού ονόµατος που έχει ήδη διατυπωθεί) της στήλης Model-specific στον πίνακα Όσον αφορά στο συγκεκριµένο σενάριο, υποθέτουµε τα αντίστοιχα πεπερασµένα υποσύνολα τα οποία φαίνονται στη στήλη Scenario-Specific του ίδιου πίνακα. Οι τύποι δεδοµένων, οι τύποι συναρτήσεων και οι σταθερές θεωρούνται ενσωµατωµένοι στο σύστηµα, σε αντίθεση µε τις άλλες οντότητες οι οποίες και παρέχονται από το χρήστη. Built-in Scenariospecific Userprovided Οντότητα Modelspecific Τύποι εδοµένων D I D Τύποι Συναρτήσεων F I F Σταθερές C I C Attributes Ω I Ω Συναρτήσεις Φ I Φ Σχήµατα S I S RecordSets RS I RS Activities A I A Provider σχέσεις Pr I Pr Part-Of σχέσεις Po I Po Instance-Of σχέσεις Io I Io Regulator σχέσεις Rr I Rr Derived Provider σχέσεις Dr I Dr Πίνακας

35 Όντας γράφος, ο Γράφος Αρχιτεκτονικής ενός ETL σεναρίου περιλαµβάνει κόµβους και ακµές. Οι εµπλεκόµενοι τύποι δεδοµένων, τύποι συναρτήσεων, σταθερές, attributes, activities, recordsets και συναρτήσεις αποτελούν τους κόµβους του γράφου. Για την πλήρη κάλυψη των χαρακτηριστικών και των αλληλεπιδράσεων των οντοτήτων όπως αυτά αναφέρθηκαν στην παράγραφο 2, µοντελοποιούµε τα διάφορα είδη των σχέσεων ως ακµές του γράφου. Παρακάτω παρατίθενται αυτοί οι τύποι σχέσεων µαζί µε την ορολογία που θα χρησιµοποιηθεί στη συνέχεια. Part-of σχέσεις (µέρους): Αυτές οι σχέσεις εµπλέκουν attributes και παραµέτρους και τα συνδέουν µε την αντίστοιχή τους Activity, συνάρτηση ή το RecordSet στο οποίο ανήκουν. Instance-Of σχέσεις (στιγµιότυπου): Τέτοιες σχέσεις ορίζονται µεταξύ ενός τύπου δεδοµένου / συνάρτησης και του στιγµιότυπού του. Provider σχέσεις (παροχής): Αυτού του τύπου οι σχέσεις συνδέουν attributes µε µία σχέση πηγής-καταναλωτή, όπως αυτή περιγράφεται στην παράγραφο 2.2 Regulator σχέσεις (ρύθµισης): Ορίζονται µεταξύ των παραµέτρων των Activities και των όρων που τις γεµίζουν. Derived Provider σχέσεις(απορρέουσας παροχής): Είναι µία ειδική περίπτωση των Provider σχέσεων η οποία µπορεί να παραχθεί από την σύνθεση Regulator σχέσεων. Οι Derived Provider σχέσεις µπορούν να προκύψουν από έναν απλό κανόνα και δεν αποτελούν συστατικό µέρος του σεναρίου. Τυπικά, έστω ότι G(V,E) είναι ο Γράφος Αρχιτεκτονικής ενός ETL σεναρίου. Τότε, - V=D F C Ω Φ S RS A - E=Pr Po Io Rr H γραφική αναπαράσταση του γράφου αρχιτεκτονικής απεικονίζεται στο παρακάτω σχήµα : Τύποι εδοµένων Τύποι Συναρτήσεων Μαύρες Ελλείψεις Μαύρα Τετράγωνα Integer RecordSets Κύλινδροι $2 my$2 Συναρτήσεις Μπλε Τετράγωνα R Σταθερές Μαύροι Κύκλοι 1 Παράµετροι Λευκά τετράγωνα rate Attributes Λευκές Ελλείψεις PKEY Activities Τρίγωνα SK 23

36 Part-Of Σχέσεις Instance-Of Σχέσεις Regulator Σχέσεις Απλές ακµές που ξεκινούν µε διαµάντι Στικτά βέλη (από το στιγµιότυπο προς τον τύπο) Στικτές ακµές Provider Σχέσεις Derived Provider Σχέσεις Έντονα βέλη (από τον παραγωγό στον καταναλωτή) Στικτά βέλη (από τον παραγωγό στον καταναλωτή) Σχήµα : Γραφική αναπαράσταση του Γράφου Αρχιτεκτονικής Κατασκευάζοντας τον Γράφο Αρχιτεκτονικής Στην παράγραφο αυτή δίνεται ένα παράδειγµα πως µπορεί να κατασκευαστεί ο Γράφος Αρχιτεκτονικής ακολουθώντας την προαναφερθείσα θεωρία και το γραφικό σύστηµα που µόλις αναλύθηκε. Κατασκευάζεται ως παράδειγµα ένα µικρό µέρος του παραδείγµατος της παραγράφου και πιο συγκεκριµένα αυτό που περιλαµβάνει τις Activities Add_SPK 1 και SK 1. IN AddSPK1 OUT IN SK1 OUT PKEY PKEY PAR PKEY PKEY PAR PKEY QTY QTY QTY QTY QTY COST COST COST COST COST DATE DATE DATE DATE DATE SUPPKEY SUPPKEY SUPPKEY DS.PS1 Add_ const1 PKEY SKEY PKEY SOURCE SK in out SOURCE LU_PKEY LOOKUP_ PS LU_SOURCE LU_SKEY Σχήµα : Part-of σχέσεις του Γράφου Αρχιτεκτονικής Attributes και Part-Of σχέσεις. Το πρώτο πράγµα που πρέπει να ενσωµατωθεί στον Γράφο Αρχιτεκτονικής είναι οι δοµηµένες οντότητες (Activities και RecordSets) καθώς και τα attributes των σχηµάτων τους. Επιλέγουµε να µην υπερφορτώσουµε το γράφο ενσωµατώνοντας όλα τα σχήµατα αυτά καθαυτά. Αντί αυτού χρησιµοποιούµε µία κατευθείαν Part-of σχέση από την Activity ή το RecordSet προς το attribute.αν η ακµή ξεκινά από το 24

37 αριστερό τµήµα της Activity τότε το attribute ανήκει στο σχήµα εισόδου ενώ, αντίστοιχα, αν ξεκινά από το δεξί τµήµα στο σχήµα εξόδου. Στη συνέχεια, ενσωµατώνουµε στο γράφο τις συναρτήσεις και τις παραµέτρους αυτών, καθώς και τις Part-Of σχέσεις των πρώτων µε τις δεύτερες. Στο σχήµα φαίνεται η αποσύνθεση (α) των RecordSets DS.PS 1, LOOKUP_PS (β) των Activities Add_SPK 1 και SK 1 στα attributes των σχηµάτων εισόδου και εξόδου. Να σηµειωθεί ότι τα σχήµατα απόρριψης έχουν επιλεχθεί να µην φαίνονται στο γράφο και να θεωρούνται αυτόµατα ως η άρνηση του αντίστοιχου σχήµατος εξόδου. Στο ίδιο σχήµα αποσυντίθεται στις παραµέτρους της η συνάρτηση Add_const 1.Αυτή η συνάρτηση ανήκει στον τύπο ADD_CONST και περιλαµβάνει δύο παραµέτρους: τις in και out. Η πρώτη δέχεται ως είσοδο έναν ακέραιο ενώ η δεύτερη τον επιστρέφει. Όπως αναφέρθηκε και νωρίτερα, αλλά θα φανεί και στη συνέχεια η τιµή αυτή προωθείται στο attribute SUPPKEY, έτσι ώστε να είναι δυνατή η ανίχνευση του γεγονότος ότι οι εν λόγω σειρές προέρχονται από την πηγή S 1. Επίσης, στον Γράφο Αρχιτεκτονικής ενσωµατώνονται οι παράµετροι των δύο Activities.Για την Activity Add_SPK 1 πρόκειται για τις παραµέτρους της χρησιµοποιούµενης συνάρτησης. Στη περίπτωση της Activity SK 1 έχουµε πέντε παραµέτρους : (α) PKEY, η οποία αντιπροσωπεύει το κλειδί παραγωγής που πρόκειται να αντικατασταθεί (β) SOURCE, η οποία χαρακτηρίζει την πηγή των δεδοµένων που επεξεργαζόµαστε (γ) LU_KEY, η οποία αντιπροσωπεύει το attribute του πίνακα αναζήτησης που περιέχει τα κλειδιά παραγωγής (δ) LU_SOURCE, η οποία αντιπροσωπεύει το attribute του πίνακα αναζήτησης που περιέχει την τιµή της πηγής (αντιστοιχεί στην προαναφερθείσα SOURCE παράµετρο) (ε) LU_SKEY, η οποία αντιπροσωπεύει το attribute του πίνακα αναζήτησης που περιέχει τα surrogate κλειδιά. IN AddSPK1 OUT IN SK1 OUT PAR PKEY PKEY PKEY PKEY Integer QTY QTY QTY QTY COST COST COST COST US Date DATE DATE DATE DATE SUPPKEY SUPPKEY SUPPKEY Add_ const1 ADD_ CONST SKEY Σχήµα : Instance-of σχέσεις του Γράφου Αρχιτεκτονικής 25

38 Τύποι εδοµένων και Instance-Of σχέσεις. Όπως προαναφέρθηκε, oι σχέσεις Instance-Of απεικονίζονται ως στικτές γραµµές από τα στιγµιότυπα προς τους τύπους τους. Βλέπουµε λοιπόν στο Σχήµα τα attributes των δύο Activities του παραδείγµατος και τους τύπους στους οποίους αντιστοιχούν, και συγκεκριµένα τους Integer και US_DATE 6. Στο κάτω µέρος του σχήµατος φαίνεται επίσης ότι η συνάρτηση add_const 1 είναι στιγµιότυπο του τύπου συνάρτησης ADD_CONST. Παράµετροι και Regulator σχέσεις. Αφού δηµιουργηθούν στο γράφο οι Part-Of και οι Instance-Of σχέσεις, σχεδιάζουµε τις Regulator σχέσεις του σεναρίου. Σε αυτή την περίπτωση συνδέουµε τις παραµέτρους των Activities µε τους όρους (attributes ή σταθερές ) που τις παράγουν. Υπενθυµίζεται ότι οι Regulator σχέσεις σχεδιάζονται µε απλές στικτές ακµές. IN AddSPK1 OUT IN SK1 OUT PKEY PAR PKEY PKEY PAR PKEY QTY QTY QTY QTY COST COST COST COST DATE DATE DATE DATE Add_ const1 SUPPKEY SUPPKEY SUPPKEY SKEY in out PKEY SOURCE 1 PKEY LU_PKEY LOOKUP_ PS SOURCE SK LU_SOURCE LU_SKEY Σχήµα : Regulator σχέσεις του Γράφου Αρχιτεκτονικής Στο παράδειγµα του σχήµατος µπορούµε να παρατηρήσουµε τον τρόπο µε τον οποίο γεµίζουν οι παράµετροι των δύο Activities. Πρώτον, στην Activity AddSPK 1, βλέπουµε ότι η συνάρτηση Add_const 1 δέχεται ως είσοδο, από µία σταθερά και µέσω της παραµέτρου in, έναν ακέραιο (1). Ο αριθµός αυτός είναι και η έξοδος της συνάρτησης, παράµετρος out, και 6 Για να παραµένει ο γράφος ευανάγνωστος πολλές ακµές που ανήκουν στον ίδιο τύπο συγχωνεύονται σε µία που καταλήγει στον κόµβο που αντιστοιχεί στον επιθυµητό τύπο. 26

39 χρησιµοποιείται για να γεµίσει το attribute SUPPKEY. Όπως φαίνεται η αντιστοίχηση των παραµέτρων µε τους σωστούς όρους γίνεται µέσω των ανάλογων Regulator σχέσεων. Παρόµοια ισχύουν και στην περίπτωση της Activity SK 1.Όλες οι παράµετροί της αντιστοιχίζονται µε τους όρους που γεµίζουν ή από τους οποίους γεµίζονται µέσω Regulator σχέσεων. Πιο συγκεκριµένα οι PKEY και SOURCE από τα κατάλληλα attributes του σχήµατος εισόδου, ενώ οι LU_PKEY, LU_SOURCE, LU_SKEY από τα attributes του πίνακα LOOKUP_PS. Αξίζει να προσεχθεί η περίπτωση της παραµέτρου LU_SKEY, η οποία γεµίζει και το attribute SKEY του σχήµατος εξόδου της SK 1. Συνεπώς, υπάρχει µία ακόµα Regulator σχέση µε προαναφερθέν attribute, εκτός αυτής µε το attribute SK του RecordSet LOOKUP_PS 7. Provider σχέσεις. Το τελευταίο που µένει να προστεθεί στον Γράφο Αρχιτεκτονικής είναι οι Provider σχέσεις, οι οποίες απεικονίζουν την ροή των δεδοµένων από τις πηγές προς τα RecordSets στόχους στην Αποθήκη εδοµένων. Οι Provider σχέσεις σχεδιάζονται στον Γράφο Αρχιτεκτονικής ως απλές προσανατολισµένες ακµές που ξεκινούν από τα attributes πηγές και σταµατούν στα attributes καταναλωτές. IN AddSPK1 OUT IN SK1 OUT PAR PAR PKEY PKEY PKEY PKEY PKEY QTY QTY QTY QTY QTY COST COST COST COST COST DATE DATE DATE DATE DATE Add_ const1 SUPPKEY SUPPKEY SUPPKEY DS.PS1 SKEY in out PKEY SOURCE 1 PKEY LU_PKEY LOOKUP_ PS SOURCE SK LU_SOURCE LU_SKEY Σχήµα : Provider σχέσεις του Γράφου Αρχιτεκτονικής 7 Στην ουσία, συνήθως η ύπαρξη µίας Regulator σχέσης µεταξύ µίας παραµέτρου και ενός attribute του σχήµατος εξόδου µίας Activity σηµαίνει ότι εξωτερικά της Activity δεδοµένα χρησιµοποιούνται για να προκύψει ένα νέο attribute µέσω της συγκεκριµένης Activity. 27

40 Παρατηρώντας το σχήµα βλέπουµε ότι η ροή των δεδοµένων ξεκινά από των πίνακα DS.PS 1 της DSA(data staging area). Κάθε attribute του πίνακα αυτού αντιστοιχίζεται µε µια Provider σχέση σε ένα από τα attributes του σχήµατος εισόδου της Activity AddSPK 1. Αυτά µε τη σειρά τους αντιστοιχίζονται στα attributes του αντίστοιχου σχήµατος εξόδου. Η ροή προχωρά προς την Activity SK 1 µε παρόµοιο τρόπο. Αξίζει να προσεχθεί ότι κατά την ροή των δεδοµένων νέα attributes δηµιουργούνται, οδηγώντας σε νέα ρεύµατα δεδοµένων, ενώ η ροή φαίνεται να σταµατά για κάποια άλλα δεδοµένα που δεν µας είναι πλέον χρήσιµα. Αυτό απεικονίζεται καθαρά στο πάνω δεξί µέρος του σχήµατος όπου οι τιµές του attribute PKEY δεν προωθούνται πια (υπενθυµίζεται ότι ο λόγος για την εφαρµογή ενός µετασχηµατισµού surrogate κλειδιού είναι να αντικατασταθεί το υπάρχον πρωτεύον κλειδί παραγωγής µε ένα οµοιογενές surrogate κλειδί για τις εγγραφές της Αποθήκης εδοµένων). Το ρόλο του µοναδικού αναγνωριστικού κάθε εγγραφής παίζει πια το attribute SKEY, από το οποίο και ξεκινά µία νέα ροή δεδοµένων για τη συνέχεια του σεναρίου. Derived Provider σχέσεις. Όπως αναφέρθηκε και νωρίτερα, υπάρχουν ορισµένα attributes που υπολογίζονται από το συνδυασµό attribute εισόδου και παραµέτρων. Οι Derived Provider σχέσεις είναι µία µορφή σχέσης Provider που δηµιουργείται από την σύνθεση Provider και Regulator σχέσεων. IN AddSPK1 OUT IN SK1 OUT PAR PKEY PKEY PKEY PKEY Legend IN SK1 OUT SUPPKEY SUPPKEY SUPPKEY PKEY PKEY SKEY SUPPKEY SOURCE PKEY LU_PKEY LOOKUP_ PS PKEY SOURCE SKEY LOOKUP_ PS SOURCE SK LU_SOURCE LU_SKEY SK Σχήµα : Derived Provider σχέσεις του Γράφου Αρχιτεκτονικής Θεωρούµε ότι πηγή είναι ένας όρος του γράφου Αρχιτεκτονικής, στόχος ένα attribute του σχήµατος εξόδου της Activity A και Χ µία παράµετρος στην λίστα παραµέτρων της Α. Μία 28

41 Derived Provider σχέση υπάρχει ανν υπάρχουν οι ακόλουθες Regulator σχέσεις (ακµές) : rr 1 (πηγή,χ) και rr 2 (Χ,στόχος). Στην ουσία, η περίπτωση των Derived Provider σχέσεων µοντελοποιεί την κατάσταση στην οποία µία Activity παράγει ένα νέο attribute στην έξοδό της. Στην περίπτωση αυτή το εν λόγω attribute δέχεται δεδοµένα από όλα τα attributes που παρέχουν δεδοµένα στις παραµέτρους που ρυθµίζουν την τιµή του. Στο σχήµα απεικονίζεται ένα τµήµα του παραδείγµατος που έχει χρησιµοποιηθεί και στις προηγούµενες περιπτώσεις. Στο υπόµνηµα στην αριστερή πλευρά του σχήµατος απεικονίζεται ο τρόπος µε τον οποίο µία Derived Provider σχέση συνδέει τα attributes - πηγές δεδοµένων των παραµέτρων που ρυθµίζουν το attribute εξόδου SKEY, µε το attribute αυτό. Το νόηµα αυτών των σχέσεων είναι ότι το SK 1.OUT.SKEY προκύπτει από τον συνυπολογισµό όλων των προαναφερθέντων attributes Εκµετάλλευση του Γράφου Αρχιτεκτονικής Μετρήσεις Σπουδαιότητας (Importance Metrics) Ένα από τα σηµαντικότερα πλεονεκτήµατα της µοντελοποίησης ενός ETL σεναρίου µέσω του Γράφου Αρχιτεκτονικής είναι η δυνατότητα να αντιµετωπιστεί το σενάριο ως η ραχοκοκαλιά του συνολικού περιβάλλοντος. Αν αντιµετωπιστεί το πρόβληµα από την προοπτική της σχεδίασης λογισµικού, το ενδιαφέρον θέµα είναι ο σχεδιασµός του σεναρίου ώστε να επιτυγχάνεται αποτελεσµατικότητα, αποδοτικότητα, αλλά και αντοχή στις επιδράσεις της εξέλιξης. Σε αυτήν την ενότητα παρουσιάζονται συγκεκριµένες µέθοδοι για την µέτρηση της σπουδαιότητας και της ευπάθειας των κόµβων ενός Γράφου Αρχιτεκτονικής, και πιο συγκεκριµένα η εξάρτηση και η υπευθυνότητα. Η εξάρτηση αντιπροσωπεύει το βαθµό στον οποίο µία οντότητα είναι δεσµευµένη από άλλες οντότητες που τις παρέχουν δεδοµένα και η υπευθυνότητα το βαθµό στον οποίο άλλες οντότητες του γράφου εξαρτώνται από τον υπό θεώρηση κόµβο. Τόσο η εξάρτηση όσο και η υπευθυνότητα είναι ζωτικής σηµασίας µετρήσεις για την κατασκευή και την εξέλιξη του ETL περιβάλλοντος. Ας θεωρήσουµε τον υπογράφο G (V,Ε ), ο οποίος περιλαµβάνει µόνο τις Provider και Derived Provider σχέσεις ανάµεσα στα attributes. Στη συνέχεια δε θα διακρίνουµε τις Derived από τις απλές Provider σχέσεις και θα χρησιµοποιούµε και για τα δύο είδη τον όρο Provider σχέσεις. Για κάθε attribute κόµβο Α, ορίζονται οι εξής µετρήσεις: Τοπική εξάρτηση: ο βαθµός εισόδου του κόµβου όσον αφορά τις Provider σχέσεις. Τοπική υπευθυνότητα: ο βαθµός εξόδου του κόµβου όσον αφορά τις Provider σχέσεις. 29

42 Τοπικός βαθµός: Ο βαθµός του κόµβου όσον αφορά τις Provider σχέσεις. ( δηλαδή το άθροισµα των δύο προηγουµένων) IN A2EDate OUT IN1 U OUT PKEY PKEY PKEY IN2 PKEY PKEY SUPPKEY SUPPKEY SUPPKEY SUPPKEY SUPPKEY QTY QTY QTY QTY QTY COST COST COST COST COST DATE DATE DATE DATE DATE IN Check Qty OUT PKEY PKEY PKEY DW.PART SUPP SUPPKEY SUPPKEY SUPPKEY QTY QTY QTY COST COST COST DATE DATE DATE Σχήµα : Εξαρτήσεις στον Γράφο Αρχιτεκτονικής. ιαισθητικά, η τοπική εξάρτηση αντιπροσωπεύει τον αριθµό των κόµβων που πρέπει να δραστηριοποιηθούν ώστε να γεµίσει ο συγκεκριµένος κόµβος. Αντίστροφα η τοπική υπευθυνότητα αντιπροσωπεύει τον αριθµό των κόµβων που περιµένουν να δραστηριοποιηθεί ο συγκεκριµένος κόµβος ώστε να δεχθούν δεδοµένα. Το άθροισµα των δύο αυτών ποσοτήτων, δηλαδή ο τοπικός βαθµός, αντιπροσωπεύει τον βαθµό εµπλοκής του κόµβου στο σενάριο. Θεωρούµε το παράδειγµα του σχήµατος 2.2.9, όπου απεικονίζονται τρεις από τις Activities του παραδείγµατος της παραγράφου Συγκεκριµένα, θεωρούµε την Activity A2Edate που µετατρέπει τις ηµεροµηνίες των δεδοµένων της πηγής S 1 σε ευρωπαϊκή µορφή, την Activity CheckQTY η οποία αποβάλλει τις σειρές µε µη-θετική ποσότητα και την Activity Union που συγχωνεύει τις δύο ροές προς τον πίνακα της Αποθήκης εδοµένων DW.PARTSUPP. Παρατηρώντας τον κόµβο UNION.OUT.PKEY παρατηρούµε ότι η τοπική εξάρτησή του είναι 2, η τοπική υπευθυνότητά του 1 και ο τοπικός του βαθµός 3. 30

43 Εκτός από τις τοπικές αλληλοσυσχετίσεις θεωρούµε επίσης και αυτές που περιλαµβάνουν και το µεταβατικό κλείσιµο των Provider σχέσεων. Έστω το σύνολο (Pr Dr)* που περιλαµβάνει το µεταβατικό κλείσιµο των Provider ακµών. Ορίζουµε τις επόµενες µετρήσεις: Μεταβατική εξάρτηση: ο βαθµός εισόδου του κόµβου όσον αφορά τις Provider σχέσεις. Μεταβατική υπευθυνότητα: ο βαθµός εξόδου του κόµβου όσον αφορά τις Provider σχέσεις. Μεταβατικός βαθµός: ο βαθµός του κόµβου όσον αφορά τις Provider σχέσεις. Ολική εξάρτηση: Το άθροισµα της τοπικής και της µεταβατικής εξάρτησης. Ολική υπευθυνότητα: Το άθροισµα της τοπικής και της µεταβατικής υπευθυνότητα. Ολικός βαθµός : Το άθροισµα του τοπικού και του µεταβατικού βαθµού. Στο σχήµα έχει συνυπολογιστεί και το µεταβατικό κλείσιµο των Provider ακµών, οι οποίες απεικονίζονται µε στικτά βέλη. Στον πίνακα έχουν υπολογιστεί οι προαναφερθείσες µετρήσεις για τα attributes του σχήµατος Συγκρίνοντας κάθε τιµή ξεχωριστά µε τον µέσο όρο διαπιστώνουµε καθαρά ότι το πιο ευπαθές attribute είναι το SK 1.OUT.SKEY. IN AddSPK1 OUT IN SK1 OUT PKEY PKEY PKEY PKEY SUPPKEY SUPPKEY SUPPKEY PKEY SKEY SOURCE SK LOOKUP_ PS Σχήµα : Μεταβατικό κλείσιµο για τις οντότητες του σχήµατος

44 LOCAL TRANSITIVE TOTAL IN OUT DEGREE IN OUT DEGREE IN OUT DEGREE AddSPK1 IN.PKEY OUT.PKEY OUT.SUPPKEY SK1 IN.PKEY IN.SUPPKEY OUT.PKEY OUT.SUPPKEY OUT.SKEY LOOKUP_PS PKEY SOURCE SK SUM AVG Πίνακας : Μετρήσεις σπουδαιότητας για τα attributes του σχήµατος Άλλες ενδιαφέρουσες χρήσεις των παραπάνω µετρήσεων είναι: Ανίχνευση ασυνεπειών στο γέµισµα των attributes. Για παράδειγµα, αν ένα attribute εξόδου µίας Activity ένωσης δε δέχεται δεδοµένα από δύο attributes εισόδου, ή, κυρίως, αν υπάρχει παραβίαση κάποιου περιορισµού ακεραιότητας όσον αφορά το γέµισµα ενός attribute ενός Data Store (π.χ. αν έχει βαθµό εισόδου ίσο µε µηδέν). Ανίχνευση σηµαντικών Data Stores. Προφανώς, Data Stores των οποίων τα attributes έχουν θετικό βαθµό εξόδου χρησιµοποιούνται ως πηγές δεδοµένων, ενώ αν έχουν και θετικό βαθµό εισόδου είναι µεταβατικά RecordSets. Ανίχνευση άχρηστων attributes. Κάθε attribute µε συνολική υπευθυνότητα ίση µε µηδέν είναι άχρηστο για το σκοπό της προώθησης των δεδοµένων προς την Αποθήκη. Οι µετρήσεις που περιγράφηκαν δεν εφαρµόζονται µόνο στα attributes, αλλά και στις Activities και τα RecordSets Το ίδιο θα µπορεί να γίνει για τους τύπους δεδοµένων και συναρτήσεων, έτσι ώστε να καθορίσουµε πόσο σηµαντικός είναι ένας τύπος για την εκτέλεση του σεναρίου. Στην περίπτωση αυτή, όµως, οι Provider σχέσεις αντικαθίστανται από τις Instance-Of σχέσεις. Στον πίνακα φαίνονται οι µετρήσεις Σπουδαιότητας για τις δοµηµένες οντότητες του παραδείγµατος της παραγράφου

45 LOCAL TRANSITIVE TOTAL IN OUT DEGREE IN OUT DEGREE IN OUT DEGREE AddSPK1 SUM AVG/attribute SK1 SUM AVG/attribute LOOKUP_PS SUM AVG/attribute SUM AVG/entity Πίνακας : Μετρήσεις σπουδαιότητας για τις δοµηµένες οντότητες του σχήµατος

46 34

47 3 Ανάλυση και σχεδίαση Στο παρόν κεφάλαιο θα παρουσιαστεί η ανάλυση και ο σχεδιασµός του εργαλείου που κατασκευάστηκε. Στην παράγραφο 3.1 γίνεται η αρχιτεκτονική περιγραφή του συστήµατος, όπου θα προσδιοριστούν και θα περιγραφούν τα λογικά επιµέρους τµήµατα που το αποτελούν. Στη συνέχεια, στην παράγραφο 3.2, στην περιγραφή των λειτουργιών του συστήµατος, θα αναλυθούν και θα περιγραφούν µε λεπτοµέρεια οι δυνατότητες τις οποίες παρέχει στους χρήστες του. 3.1 Περιγραφή Αρχιτεκτονικής Όπως ήδη αναφέρθηκε το εργαλείο που δηµιουργήθηκε είναι ένα εργαλείο σχεδίασης ETL σεναρίων. Ο χρήστης του εργαλείου το εγκαθιστά στον υπολογιστή στον οποίο εργάζεται. Από τον υπολογιστή αυτόν το εργαλείο χρειάζεται να έχει πρόσβαση στα εξής : α) Στις Σχεσιακές Βάσεις εδοµένων πηγές από τις οποίες επιθυµεί να εξάγει δεδοµένα. β) Στην Αποθήκη εδοµένων στην οποία επιθυµεί να φορτωθούν τα αποτελέσµατα των ETL διαδικασιών. γ) Στο repository των σεναρίων ώστε να φορτώσει κάποιο υπάρχον σενάριο, να χρησιµοποιήσει τα απαραίτητα templates και να αποθηκεύσει ένα νέο σενάριο ή τις αλλαγές που θα κάνει. 35

48 Όλες οι παραπάνω απαιτήσεις περιγράφονται στο παρακάτω σχέδιο. Να σηµειωθεί ότι οι πηγές δεδοµένων, η Αποθήκη εδοµένων και το repository δεν είναι απαραίτητο να βρίσκονται σε αποµακρυσµένους υπολογιστές. Κάποια από τα παραπάνω ή όλα µπορεί να είναι εγκατεστηµένα στον ίδιο υπολογιστή, σχεδιάζονται όµως αποµακρυσµένα για λόγους γενικότητας. Η εφαρµογή χωρίζεται σε εφτά τµήµατα (packages) κάποια από τα οποία είναι ορατά προς το χρήστη ενώ άλλα όχι: 1. Main package. Πρόκειται για το κεντρικό τµήµα της εφαρµογής µέσω του οποίου διασυνδέονται τα υπόλοιπα στα οποία προσφέρει και ένα σύνολο χρήσιµων συναρτήσεων. Επίσης περιλαµβάνει και το βασικό µέρος της διαπροσωπείας µε το χρήστη. 2. Design package. Είναι το τµήµα της εφαρµογής που ασχολείται µε την σχεδίαση των κόµβων και των ακµών που συνιστούν τον Γράφο Αρχιτεκτονικής καθώς και µε τις σχετικές βοηθητικές λειτουργίες που διευκολύνουν τον χρήστη (π.χ. µετακίνηση και αλλαγή των διαστάσεων ενός κόµβου). Το τµήµα Σχεδίασης µπορεί να χωριστεί σε δύο επιµέρους τµήµατα. Εδώ πρέπει να σηµειωθεί το εξής ο Γράφος Αρχιτεκτονικής ενός εκτενούς ETL σεναρίου µπορεί να είναι αρκετά µεγάλος σε διαστάσεις. Κρίθηκε 36

49 λοιπόν ότι η παρουσίαση των βασικών οντοτήτων ενός σεναρίου (Activities και RecordSets), µαζί µε τα συστατικά τους στοιχεία (attributes και παραµέτρους) καθώς και τις συναρτήσεις που χρησιµοποιούνται από τις Activities περισσότερο θα δυσχέραινε παρά θα διευκόλυνε την κατανόηση του Γράφου Αρχιτεκτονικής. Αυτό είναι εκ διαµέτρου αντίθετο µε το πνεύµα του µοντέλου, τη δηµιουργία µίας ευνόητης και εύχρηστης αναπαράστασης των ETL σεναρίων. Καταλήξαµε λοιπόν στο διαχωρισµό του τµήµατος σχεδίασης σε δύο τµήµατα. Στο πρώτο τµήµα, το τµήµα βασικής σχεδίασης του σεναρίου, ο χρήστης σχεδιάζει τις Activities και τα RecordSets του σεναρίου καθώς και τη ροή των δεδοµένων από τον ένα στον άλλο κόµβο, στην ουσία τη διάταξη των οντοτήτων στην εκτέλεση του σεναρίου. Το δεύτερο τµήµα, το τµήµα Zoom, αναλαµβάνει την αποσύνθεση µίας Activity στα συστατικά στοιχεία της και την επίδειξή τους, σε ένα καινούργιο χώρο σχεδίασης αυτή τη φορά. Στο χώρο αυτό εµφανίζονται επίσης οι Activities και τα RecordSets που παρέχουν σε αυτήν ή δέχονται από αυτήν δεδοµένα ώστε να σχεδιαστούν πιο αναλυτικά οι µεταξύ τους σχέσεις. Τα δύο τµήµατα που αναφέρθηκαν παρέχουν τις ίδιες λειτουργίες όσον αφορά στη σχεδίαση κόµβων και ακµών και διαφέρουν µεταξύ τους στην ουσία µόνο στους περιορισµούς που επιβάλλουν στο είδος των αντικειµένων που µπορούν να σχεδιαστούν. 3. Type package. Ασχολείται µε την επίδειξη, την αλλαγή και την αποθήκευση των τύπων των δεδοµένων, των συναρτήσεων και των Activities. 4. Date Services package. Στο τµήµα αυτό περιέχονται όσες λειτουργίες έχουν να κάνουν µε την σύνδεση µε τις πηγές ή την Αποθήκη εδοµένων καθώς και µε την φόρτωση και την αποθήκευση σεναρίων στο repository. 5. Metrics package. Είναι το τµήµα που πραγµατοποιεί τις µετρήσεις σπουδαιότητας που αναφέρονται στην παράγραφο Properties package. Πρόκειται για ένα σύνολο κλάσεων που αντιπροσωπεύουν τις ιδιότητες των κόµβων ενός σεναρίου. 7. Synchronize UnSynchronize package. Πρόκειται για ένα µικρό αλλά πολύ σηµαντικό τµήµα του εργαλείου, το οποίο είναι αδιαφανές προς το χρήστη. Αναλαµβάνει την ενηµέρωση των attributes και των παραµέτρων ενός σεναρίου για τις µεταξύ τους σχέσεις. Είναι στην ουσία το τµήµα που φροντίζει για την διατήρηση της εννοιολογικής συνοχής του γράφου όταν γίνονται αλλαγές σε κάποιο σηµείο του. Στη σχήµα απεικονίζεται η δοµή της εφαρµογής µε βάση τα τµήµατα που προαναφέρθηκαν καθώς και οι συσχετίσεις των τµηµάτων µεταξύ τους. 37

50 Σχήµα : Τα packages και οι µεταξύ τους συσχετίσεις. 3.2 Περιγραφή Λειτουργιών Στην ενότητα αυτή θα παρουσιαστούν αναλυτικά οι βασικές λειτουργίες της εφαρµογής που κατασκευάσθηκε Επιλογή του repository. ίνεται η δυνατότητα να επιλεχθεί µία Βάση εδοµένων στην οποία θα δηµιουργηθεί το repository των σεναρίων. Μετά την επιλογή γίνεται έλεγχος αν υπάρχουν οι απαραίτητοι πίνακες και αν δε βρεθούν δηµιουργούνται. Να σηµειωθεί ότι το repository είναι απαραίτητο για τη λειτουργία του εργαλείου καθώς από αυτό διαβάζονται οι τύποι δεδοµένων συναρτήσεων και Activities που χρησιµοποιούνται συνέχεια κατά τη σχεδίαση των σεναρίων. Αν δεν οριστεί ένα repository δεν είναι δυνατόν να χρησιµοποιηθεί η εφαρµογή Ορισµός χρήστη. Ο χρήστης πρέπει να δώσει ένα αναγνωριστικό όνοµα. Τα σενάρια που θα δηµιουργηθούν όσο ο χρήστης είναι συνδεδεµένος στο εργαλείο µε αυτό το αναγνωριστικό σώζονται στη βάση συνδυασµένα µε αυτό και σε επόµενες χρήσεις του προγράµµατος θα µπορεί να τα δει µόνο όποιος χρήστης δώσει το σωστό αναγνωριστικό. 38

51 3.2.3 Ορισµός Τύπων. Ο χρήστης µπορεί να δει τους τύπους δεδοµένων, συναρτήσεων και Activities που υπάρχουν στο repository. Ένας τύπος δεδοµένων χαρακτηρίζεται από το όνοµα του. Ένας τύπος συνάρτησης χαρακτηρίζεται από το όνοµά του, τις εισόδους του και την έξοδό του. Ένας τύπος Activity, τέλος, χαρακτηρίζεται από το όνοµά του, τις εξόδους του, τις παραµέτρους του και τις συναρτήσεις που χρησιµοποιεί. Οι δυνατότητες που του προσφέρονται είναι φυσικά η δηµιουργία νέων τύπων και η επεξεργασία ή διαγραφή των ήδη υπαρχόντων. Εδώ πρέπει να σηµειωθεί ότι οι τύποι Activities δεν αποτελούν συστατικά στοιχεία του Αρχιτεκτονικού γράφου, αλλά στην ουσία πρόκειται για καθορισµό µίας οµάδας από Activities και των στοιχείων που τις διακρίνει. Λέγοντας λοιπόν έξοδοι, παράµετροι και συναρτήσεις εννοούµε κάποια πρότυπα στοιχεία που σχεδιάζονται αυτόµατα από το εργαλείο για δική µας διευκόλυνση όταν δηλώσουµε ότι µία Activity ανήκει στον συγκεκριµένο τύπο. Στο πνεύµα αυτό σχηµατίζεται και η SQL πρόταση ενός τύπου. Ορίζουµε λοιπόν τις παρακάτω λέξεις κλειδιά που µπορούν να γραφτούν σε µία SQL πρόταση ενός τύπου και οι οποίες µεταφράζονται αυτόµατα από την εφαρµογή για την προπαρασκευή της SQL πρότασης µίας Activity αυτού του τύπου. α)[inputs] : Μεταφράζονται στις εισόδους τις Activity µε τη µορφή A.a 1 AS A 1,,A.a N AS A N, B.b 1 AS B 1,,B.b N AS B N, β)[sources] : Οι πηγές της Activity. γ)[parametert_name] : Όπου Parameter_Name το όνοµα µίας παραµέτρου του τύπου. Στην SQL πρόταση της Activity αντικαθιστάται από τον όρο που του παρέχει δεδοµένα. δ)[function_name] : Όπου Function_Name το όνοµα µίας συνάρτησης που χρησιµοποιείται. Στην SQL πρόταση της Activity αντικαθίσταται ως εξής : Function_Name(όρος που δίνει δεδοµένα στην πρώτη παράµετρο της συνάρτησης, όρος που δίνει δεδοµένα στη δεύτερη παράµετρο,...) δ)[inputs1] : Οι είσοδοι της Activity από την πρώτη από τις δύο πηγές της. ε)[inputs2] : Οι είσοδοι της Activity από την δεύτερη από τις δύο πηγές της. στ)[sources1] : Η πρώτη πηγή της Activity. ζ)[sources2] : Η δεύτερη πηγή της Activity. Οι τέσσερις τελευταίες λέξεις κλειδιά έχουν νόηµα µόνο στη περίπτωση των Activities που δέχονται δεδοµένα από δύο πηγές και συµπεριφέρονται σε όλα µε τον ίδιο τρόπο, καθώς δεν ξεχωρίζουν ποια είναι η πρώτη και ποια η δεύτερη πηγή της Activity. Τονίζουµε ότι η λειτουργία αυτή δεν έχει σκοπό να δηµιουργήσει τη σωστή SQL πρόταση για κάθε Activity. Στόχος της είναι να προσφέρει µία πρόταση-βάση, η οποία να µπορεί µε 39

52 µικρές αλλαγές ανάλογα µε την κάθε περίπτωση να µετατραπεί πρόταση της Activity. στην κατάλληλη SQL Σχεδίαση Σχεδίαση κόµβων Ο χρήστης επιλέγει από µία γραµµή εργαλείων τον κόµβο που θέλει να σχεδιάσει και στη συνέχεια πατώντας το αριστερό πλήκτρο του ποντικιού µέσα στην περιοχή σχεδίασης τον δηµιουργεί. Στη συνέχεια µπορεί να διαγράψει τον κόµβο ή, επιλέγοντας το κατάλληλο εργαλείο από την γραµµή εργαλείων, να τον µετακινήσει ή να του αλλάξει τις διαστάσεις. Αν βρισκόµαστε στον βασικό χώρο σχεδίασης ενός σεναρίου ο χρήστης έχει τη δυνατότητα να σχεδιάσει µόνο Activities, RecordSets, σχόλια και αρχεία παρακολούθησης εργασιών (Log). Τα δύο τελευταία δεν αποτελούν συστατικά στοιχεία του γράφου Αρχιτεκτονικής για αυτό και δεν αναφέρθηκαν καθόλου κατά την περιγραφή του µοντέλου που έγινε στην παράγραφο 2.2. Είναι εργαλεία που προσφέρει η εφαρµογή για να είναι ο Γράφος Αρχιτεκτονικής πιο κατανοητός. Συγκεκριµένα τα σχόλια είναι κόµβοι στους οποίους ο χρήστης µπορεί να γράψει κάποιες σηµειώσεις σχετικές µε τον κόµβο του γράφου µε τον οποίο συνδέονται. Οι κόµβοι αρχείων παρακολούθησης εργασιών έχουν ως στόχο να γίνεται εµφανές ποιες Activities χρησιµοποιούν τέτοια αρχεία 8. Στο Zoom τµήµα της σχεδίασης επιτρέπεται ο σχεδιασµός και η διαγραφή µόνο συναρτήσεων, παραµέτρων και attributes Σχεδίαση ακµών Ο χρήστης επιλέγει από την κατάλληλη γραµµή εργαλείων την ακµή που επιθυµεί να σχεδιάσει και τη δηµιουργεί στον γράφο συνδέοντας τους επιθυµητούς κόµβους. Συνοψίζοντας όσα έχουν αναφερθεί στην παράγραφο 2.2 όπου περιγράφεται το µοντέλο αναπαράστασης ETL διαδικασιών αναφέρονται στη συνέχεια οι σχέσεις που επιτρέπεται να δηµιουργηθούν. A) Σε κατάσταση βασικής σχεδίασης του Γράφου Αρχιτεκτονικής. i) Provider σχέσεις. Από RecordSet σε Activity. Από Activity σε RecordSet. ii) Σχέσεις Περιγραφής. 8 Υπενθυµίζεται ότι το µοντέλο που χρησιµοποιείται δε λαµβάνει υπόψη του το θέµα των αρχείων παρακολούθησης καθώς αυτά ανήκουν στο φυσικό επίπεδο ενός ETL σεναρίου και ξεφεύγει από το πνεύµα του λογικού µοντέλου. Θεωρήθηκε όµως ότι έπρεπε να προστεθεί στο εργαλείο µία οπτική παρουσίαση της ύπαρξης τέτοιων αρχείων καθώς αποτελούν ένα πολύ σηµαντικό τµήµα της υλοποίησης ενός ETL σεναρίου. 40

53 Από σχόλιο σε Activity. Από Activity σε αρχείο παρακολούθησης εργασιών. B) Σε κατάσταση Zoom. i) Provider σχέσεις. Από attribute ενός RecordSet σε attribute εισόδου µίας Activity. Από attribute εισόδου µίας Activity σε attribute εξόδου της ίδιας Activity. Από attribute εξόδου µίας Activity σε attribute εισόδου άλλης Activity. Από attribute εξόδου µίας Activity σε attribute ενός RecordSet. ii) Regulator σχέσεις. Από attribute ενός RecordSet σε παράµετρο µίας Activity. Από σταθερά σε παράµετρο µίας Activity. Από attribute εισόδου µίας Activity σε παράµετρο της ίδιας Activity. Από attribute ενός RecordSet σε είσοδο συνάρτησης. Από σταθερά σε είσοδο συνάρτησης. Από attribute εισόδου µίας Activity σε είσοδο συνάρτησης. Από παράµετρο µίας Activity σε attribute εξόδου της ίδιας Activity. Από έξοδο συνάρτησης σε attribute εξόδου της Activity από την οποία χρησιµοποιείται η συνάρτηση. iii)part-of σχέσεις. Από RecordSet σε attribute που δε συνδέεται µε κανένα άλλο κόµβο. Από Activity σε attribute που δε συνδέεται µε κανένα άλλο κόµβο. Από Activity σε συνάρτηση που δε συνδέεται µε κανένα άλλο κόµβο Σµίκρυνση Μεγέθυνση του Γράφου. Το µέγεθος όλων των αντικειµένων του γράφου µικραίνει ή µεγαλώνει αντίστοιχα κατά ένα δοσµένο από το χρήστη λόγο Ορισµός Ιδιοτήτων των κόµβων. Με τη χρήση κατάλληλης διαπροσωπείας ο χρήστης ορίζει τις ιδιότητες των κόµβων του γράφου. Με τον όρο ιδιότητες εννοούµε τα συστατικά στοιχεία των κόµβων του Γράφου Αρχιτεκτονικής όπως αυτά ορίζονται από το µοντέλο της παραγράφου 2.2 µαζί µε τις σχέσεις του µε άλλους κόµβους. 41

54 3.2.7 Παρουσίαση Τύπων. Η εφαρµογή αναγνωρίζει αυτόµατα τους τύπους δεδοµένων και συναρτήσεων των στοιχείων του γράφου και εµφανίζει τους αντίστοιχους κόµβους συνδέοντας τους µε τα στιγµιότυπά τους Μετρήσεις Σπουδαιότητας. Ο χρήστης επιλέγει την οντότητα του σεναρίου της οποίας θέλει να δει τις µετρήσεις σπουδαιότητας και η εφαρµογή πραγµατοποιεί τις συγκεκριµένες µετρήσεις και τις παρουσιάζει Φόρτωση, Αποθήκευση, ιαγραφή σεναρίων. Ο χρήστης µπορεί να φορτώσει και να δει ένα σενάριο από το repository, να κάνει αλλαγές και να το αποθηκεύσει ξανά ή να διαγράψει κάποιο υπάρχον σενάριο. Κάθε χρήστης έχει πρόσβαση µόνο στα σενάρια που έχουν δηµιουργηθεί υπό το αναγνωριστικό όνοµα που έχει δώσει Ρύθµιση Επιλογών ίνεται η δυνατότητα ρύθµισης κάποιων βασικών σχεδιαστικών επιλογών ώστε να µπορεί η εφαρµογή να προσαρµόζεται στις απαιτήσεις κάθε χρήστη. 42

55 4 Υλοποίηση 4.1 Πλατφόρµες και προγραµµατιστικά εργαλεία Επιλογή γλώσσας προγραµµατισµού Η ανάπτυξη του εργαλείου γραφικής αναπαράστασης ETL σεναρίων έγινε σε Visual Basic. Πιο συγκεκριµένα χρησιµοποιήσαµε το περιβάλλον ανάπτυξης Visual Basic 6.0 της Microsoft. Η επιλογή της γλώσσας και του περιβάλλοντος ανάπτυξης στηρίχθηκε στα εξής : Ο κυριότερος λόγος ήταν το API (Application Interface ιασύνδεση Εφαρµογών) που προσφέρεται για την διασύνδεση καθώς και ανάπτυξη του GUI (Graphical User Interface Γραφική ιασύνδεση µε τον Χρήστη) της εφαρµογής. Καθώς πρόκειται για ένα εργαλείο γραφικής σχεδίασης η ύπαρξη ενός ισχυρού περιβάλλοντος δηµιουργίας GUI έπαιξε πολύ σηµαντικό ρόλο στην επιλογή µας. Το περιβάλλον ανάπτυξης Visual Basic 6.0 είναι ένα πολύ δυνατό εργαλείο που διευκολύνει σηµαντικά τη διαδικασία ανάπτυξης µίας εφαρµογής Επιλογή Συστήµατος ιαχείρισης Βάσεων εδοµένων Για Σύστηµα ιαχείρισης Βάσεων εδοµένων επιλέχθηκε η Oracle 8i Edition 8.1.7, η οποία αποτελεί κατά γενική οµολογία ένα από τα πιο πλήρη συστήµατα που κυκλοφορούν στην αγορά. Έχει, επιπλέον τα εξής επιθυµητά χαρακτηριστικά 43

56 Υποστηρίζει τις εφαρµογές που έχουν αναπτυχθεί στη Visual Basic, αφού παρέχεται µε τους κατάλληλους οδηγούς για αυτό τον σκοπό (ODBC drivers). Συνοδεύεται από πλήρη και κατατοπιστική τεκµηρίωση (documentation), η οποία παρέχεται δωρεάν µέσω του World Wide Web. Είναι ένα ευρέως διαδεδοµένο Σύστηµα ιαχείρισης Βάσεων εδοµένων. 4.2 Λεπτοµέρειες υλοποίησης Αποσύνθεση κώδικα Όπως αναφέρθηκε και νωρίτερα η εφαρµογή µας µπορεί να χωριστεί σε εφτά packages. Εδώ πρέπει να σηµειωθεί ότι η Visual Basic 6.0 δεν υποστηρίζει την οργάνωση του κώδικα σε packages. Ο διαχωρισµός που κάνουµε είναι λοιπόν διαισθητικός και δεν εµφανίζεται µέσα στον κώδικα. Τα τµήµατα στα οποία χωρίζουµε τον κώδικα είναι τα εξής : 1. Main 2. Design 3. Types 4. Data Services 5. Metrics 6. Properties 7. Synchronize UnSynchronize. Σε αυτά πρέπει να προστεθεί και ένα όγδοο τµήµα, το ShapesLabels, το οποίο είναι ένα ActiveX ελεγκτήριο που δηµιουργήσαµε για να σχεδιάσουµε τους κόµβους στις φόρµες. H περιγραφή τους έγινε στην παράγραφο 3.1. Σε αυτή την παράγραφο θα δώσουµε περισσότερες λεπτοµέρειες σχετικά µε την υλοποίησή τους. Κάθε τµήµα µπορεί να διαχωριστεί µε τη σειρά του στις σχετικές φόρµες, τις κλάσεις και τις λειτουργικές µονάδες (Modules) που περιλαµβάνει. Στη συνέχεια υπάρχουν σχήµατα που απεικονίζουν τον τρόπο διασύνδεσης των κλάσεων και των φορµών της εφαρµογής. Στο σχήµα απεικονίζονται όλες οι φόρµες της εφαρµογής καθώς και ο τρόπος µε τον οποίο συνδέονται µεταξύ τους και η µία καλεί την άλλη. Στο σχήµα απεικονίζονται οι κλάσεις του Design package και οι µεταξύ τους σχέσεις. Στο σχήµα απεικονίζονται οι κλάσεις του Types package και οι µεταξύ τους σχέσεις. Στο σχήµα απεικονίζονται οι κλάσεις του Properties package και οι µεταξύ τους σχέσεις. Στο σχήµα τέλος, απεικονίζεται η διασύνδεση µεταξύ των βασικότερων φορµών και 44

57 κλάσεων µέσω της οποίας επιτυγχάνεται ο σχεδιασµός των κόµβων καθώς και ο συσχετισµός του καθενός µε τις ιδιότητές του. <<Form>> InOutProp (from TypesForms) <<Form>> EdgeForm (from MainForms) <<Form>> DBFunctionType (from TypesForms) <<Form>> DBDataTypes (from TypesForms) <<Form>> DBActTypes (from TypesForms) <<Form>> NodeForm (from MainForms) <<Form>> UserLogin (from Data Services) <<MDI Form>> MDIForm1 (from MainForms) <<Form>> MetricsForm (from Metrics) <<Form>> ReposForm (from Data Services) <<Form>> ViewScenarios (from Data Services) <<Form>> ZoomForm (from DesignForms) <<Form>> DrawForm (from DesignForms) <<Form>> AttributeProp (from PropertiesForms) <<Form>> ParameterProp (from PropertiesForms) <<Form>> SetActProp (from PropertiesForms) <<Form>> RecordSetProp (from PropertiesForms) <<Form>> ConstantProp (from PropertiesForms) <<Form>> FunctionProp (from PropertiesForms) <<Form>> frmdblogin (from Data Services) Σχήµα : Φόρµες της εφαρµογής. 45

58 Σχήµα : Κλάσεις του Design Package <<Class Module>> FunctionTypeProperties <<Class Module>> ActivityTypeProperties -mvaracttype_functions -mvarfunctiontype_inputs -mvaracttype_outputs -mvarfunctiontype_outputs -mvaracttype_parameters <<Class Module>> FunctionType_Inputs <<Class Module>> FunctionType_Outputs <<Class Module>> ActType_OutPuts <<Class Module>> ActType_Parameters <<Class Module>> ActType_Functions <<Collection Of>> <<Collection Of>> <<Collection Of>> <<Collection Of>> <<Collection Of>> -mcol -mcol -mcol -mcol -mcol <<Class Module>> InputProperties <<Class Module>> OutputProperties <<Class Module>> ParamProperties <<Class Module>> UsedFunctionProperties Σχήµα : Κλάσεις του Types Package 46

59 Σχήµα : Κλάσεις του Properties Package 47

60 Σχήµα : ιασύνδεση φορµών και βασικών κλάσεων. Στον δεύτερο κεφάλαιο του τόµου ΙΙ αναφέρονται αναλυτικά οι φόρµες, οι κλάσεις και τα modules που περιλαµβάνει κάθε package και δίνεται µία απλή περιγραφή τους. 48

61 4.2.2 ΠΕΡΙΓΡΑΦΗ ΚΩ ΙΚΑ Main Forms MDIForm1 Πρόκειται για την κεντρικό παράθυρο του εργαλείου,είναι η ΜDI φόρµα στην οποία ανοίγουν οι φόρµες σχεδιασµού και Zoom των σεναρίων και πάνω στην οποία υπάρχουν όλες οι γραµµές εργαλείων. Public Properties: DrawMode(String): Περιέχει το κλειδί του κουµπιού των γραµµών εργαλείων που είναι πατηµένο. MoveBand(Variant) : Η µπάρα του MainBar που αποκολλείται και γίνεται επιπλέουσα. ToolChange(Boolean) : Ορίζει αν κάποια µπάρα αποκολλείται. EdgeFormActive (Boolean):Ορίζει αν η γραµµή εργαλείων των ακµών είναι επιπλέουσα. NodeFormActive(Boolean):Ορίζει αν η γραµµή εργαλείων των κόµβων είναι επιπλέουσα. Private Functions-Subs: Private Sub ArrowBar_ButtonClick(ByVal Button As MSComctlLib.Button) Private Sub EdgeBar_ButtonClick(ByVal Button As MSComctlLib.Button) Private Sub MenuBar_ButtonClick(ByVal Button As MSComctlLib.Button) Private Sub NodeBar_ButtonClick(ByVal Button As MSComctlLib.Button) Button (MSComctlLib.Button) : Το κουµπί που πατήθηκε. Θέτουν το MDIForm1.DrawMode ίσο µε το κλειδί του κόµβου και κάνουν όλα τα υπόλοιπα κουµπιά των γραµµών εργαλείων µη πατηµένα. Private Sub MainBar_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Αν το mouse κινηθεί κάτω από τη MainBar τίθεται το ToolChange=True. Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Αν το ToolChange είναι True η γραµµή εργαλείων που ορίζεται από το MoveBand γίνεται επιπλέουσα Private Sub MDIForm_Initialize() Από αυτό το σηµείο ξεκινά το πρόγραµµα. Καλείται η ReposForm.ConnectionSucess 49

62 για να ελεγχθεί αν υπάρχει το Repository,ανοίγει η φόρµα UserLogin και γίνονται οι απαραίτητες αρχικοποιήσεις. Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer) Κλείνει όποιες φόρµες είναι φορτωµένες στη µνήµη. Private Sub Zoom(ZoomIN As Boolean, By As Double) ZoomIN (Boolean) : Ορίζει αν γίνεται µεγέθυνση ή σµίκρυνση του γράφου By (Double) : Ο λόγος µεγέθυνσης/σµίκρυνσης Αν το ZoomIn είναι True µεγεθύνει το γράφο κατά το δοσµένο λόγο By, αλλιώς τον σµικρύνει κατά το By. Public Function GetRatio(InOut As String) As Double InOut (String) : IN αν γίνεται µεγέθυνση, OUT αν γίνεται σµίκρυνση. Αναδροµική συνάρτηση που ζητά από το χρήστη έναν λόγο µεγέθυνσης/σµίκρυνσης και τον µετατρέπει σε αριθµό. Αν η είσοδος που δίνει ο χρήστης δεν είναι σωστή ξανακαλεί τον εαυτό της. Private Function CStr2Num(Str As String) As Double Str (String) : Το αλφαριθµητικό που ελέγχεται. Ελέγχεται αν το Str είναι αριθµός και αν ναι µετατρέπεται στην αντίστοιχη αριθµητική τιµή EdgeForm - (EdgeForm.frm) & NodeForm - (NodeForm.frm) Οι φόρµες αυτές παίζουν το ρόλο των επιπλεούσων γραµµών εργαλείων των ακµών και των κόµβων αντίστοιχα.έχουν όµοιες συναρτήσεις και περιγράφονται µαζί. Public Properties: Docked(DockKind) : είχνει τη θέση «αγκίστρωσης» της φόρµας. Παίρνει τιµές από το enumeration DockKind. Private Subs: Private Sub EdgeBar_ButtonClick(ByVal Button As MSComctlLib.Button) Button (MSComctlLib.Button) : Το κουµπί που πατήθηκε. Θέτει το MDIForm1.DrawMode ίσο µε το κλειδί του κόµβου και κάνει όλα τα υπόλοιπα κουµπιά των γραµµών εργαλείων µη πατηµένα. Private Sub Form_Load() Κάνει την φόρµα «Always On Top». Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As 50

63 Integer) Θέτει MDIForm1.EdgeFormActive=False και εµφανίζει την αντίστοιχη γραµµή εργαλείων στην MDIForm1. Public Subs: Public Sub DockD_Click() Αγκιστρώνει τη φόρµα στο κάτω µέρος της MDIForm1. Public Sub DockL_Click() Αγκιστρώνει τη φόρµα στο αριστερό µέρος της MDIForm1. Public Sub DockNo_Click() Αφήνει τη φόρµα ελεύθερη. Public Sub DockR_Click() Αγκιστρώνει τη φόρµα στο δεξί µέρος της MDIForm1. Public Sub DockU_Click() Αγκιστρώνει τη φόρµα στο πάνω µέρος της MDIForm Modules MainFunctions - (MainFunctions.bas) Εδώ βρίσκονται οι Global µεταβλητές του προγράµµατος καθώς και οι δηλώσεις των περισσοτέρων συναρτήσεων των Windows που χρησιµοποιούνται. Global MyDBConnString As String Μεταβλητή στην οποία γράφεται το ConnectionString για τη σύνδεση στη Βάση. Global MyDBLogin As String Μεταβλητή στην οποία γράφεται το UserName για τη σύνδεση στη Βάση. Global MyDBPasw As String Μεταβλητή στην οποία γράφεται το Password για τη σύνδεση στη Βάση. Global User As String Μεταβλητή στην οποία γράφεται το όνοµα του τρέχοντος χρήστη του εργαλείου. Global DrawForms(10) As New DrawForm Πίνακας από Φόρµες που περιέχει τις φόρµες-παιδιά της κεντρικής MDI Φόρµας στις οποίες σχεδιάζεται το εκάστοτε σενάριο. Global LoadedDrawForms(10) As Boolean Πίνακας που δείχνει ποιες από τις Φόρµες του πίνακα DrawForms είναι φορτωµένες. Global ZoomFormLoaded As Boolean 51

64 Μεταβλητή που ορίζει αν η ZoomForm είναι ανοιχτή. Global DrawFormToolbarEnabled As Boolean Μεταβλητή που ορίζει σε ποια κατάσταση βρίσκονται οι γραµµές εργαλείων. Αν είναι True τότε είναι ενεργοποιηµένο το τµήµα τους που χρησιµοποιείται στη σχεδίαση σεναρίων. Global ZoomFormToolBalEnabled As Boolean Μεταβλητή που ορίζει σε ποια κατάσταση βρίσκονται οι γραµµές εργαλείων. Αν είναι True τότε είναι ενεργοποιηµένο το τµήµα τους που χρησιµοποιείται στη σχεδίαση κατά το Zoom µίας Activity. Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hwndinsertafter As Long, ByVal x As Long, y, ByVal cx As Long, ByVal cy As Long, ByVal wflags As Long) As Long Καλούµενη ως SetWindowPos (hwnd, -1, 0, 0, 0, 0, &H1 Or &H2) κάνει το παράθυρο µε handler hwnd να φαίνεται πάντα πάνω από τα άλλα παράθυρα.(always On Top) Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Θέτει τον κέρσορα του mouse στις συντεταγµένες X,Y εκφρασµένες σε pixel. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nindex As Long, ByVal dwnewlong As Long) As Long Αλλάζει µία ιδιότητα του παραθύρου µε handle hwnd.καλούµενη µε nindex=-4 αλλάζει την προκαθορισµένη διαδικασία παραθύρου (window procedure) Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpprevwndfunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wparam As Long, ByVal lparam As Long) As LongPublic Declare Περνάει µηνύµατα στην καθορισµένη διαδικασία παραθύρου(window procedure). Declare Function LockWindowUpdate Lib "user32" (ByVal hwndlock As Long) As Long Κλειδώνει το αντικείµενο (φόρµα, ελεγκτήριο) µε handler hwndlock, ώστε να µην ανανεώνεται κάθε φορά που γίνεται µία αλλαγή σε αυτό. Public Function HookToolbars() Αλλάζει την προκαθορισµένη window procedure της ΜDIForm1 στην WindowProc. Public Function WindowProc(ByVal hw As Long, ByVal umsg As Long, ByVal wparam As Long, ByVal lparam As Long) As Long Καλεί την προκαθορισµένη window procedure της MDIForm1 και αν αυτή επιστρέψει µήνυµα ότι έχει αλλάξει η θέση της MDIForm1 τότε καλεί την MDIForm1_Resize(). 52

65 Public Function LockControl(objX As Object, clock As Boolean) objx (Object) : To αντικείµενο που θέλουµε να κλειδωθεί/ξεκλειδωθεί. clock (Boolean) : Ορίζει αν το αντικείµενο κλειδώνεται ή ξεκλειδώνεται. Αν το clock είναι True µε κλήση της LockWindowUpdate το αντικείµενο κλειδώνεται ενώ αν είναι False ξεκλειδώνεται. MenuHandlers - (MenuHandlers.bas) Περιέχει τις συναρτήσεις που καλούν τα µενού όλου του προγράµµατος. Public Function New_Scenario(Optional ScenarioName As String) As Integer ScenarioName (String) : To Όνοµα του σεναρίου. Βρίσκει στον πίνακα DrawFormsLoaded την πρώτη φόρµα του πίνακα DrawForms που δεν είναι φορτωµένη, την ανοίγει και θέτει την αντίστοιχη θέση του πίνακα DrawFormsloaded True. Επιστρέφει: Την θέση της φόρµας στον πίνακα DrawForms αν επιτύχει το άνοιγµα καινούργιας φόρµας, -1 αν όλες οι φόρµες είναι φορτωµένες ή το όνοµα του σεναρίου είναι κενό String. Public Sub Close_Scenario() Κλείνει την ενεργή φόρµα-παιδί της MDIForm1 και θέτει την αντίστοιχη θέση της στον πίνακα DrawFormsLoaded False Public Sub Save_New_Scenario() Ανοίγει τη φόρµα ViewScenarios σε µορφή Save As καλώντας την ViewScenarios.ShowSaveASDialog() Public Sub Save_Scenario() Αν η ενεργή φόρµα-παιδί της MDIForm1 είναι η ZoomForm καλεί την ReturnToDrawForm και την ScenarioSave, αλλιώς καλείται η ScenarioSave. Public Sub Load_Scenario() Ανοίγει τη φόρµα ViewScenarios σε µορφή Load καλώντας την ViewScenarios.ShowLoadDialog() Public Sub Delete_Scenario() Ανοίγει τη φόρµα ViewScenarios σε µορφή Delete καλώντας την ViewScenarios.ShowDeleteDialog() Public Sub Print_Scenario() Ανοίγει ένα παράθυρο διαλόγου εκτύπωσης και εκτυπώνει την ενεργή φόρµα. Public Sub Function_Properties() 53

66 είχνει την φόρµα FunctionProp Public Sub Constant_Properties() είχνει την φόρµα ConstantProp Public Sub Attribute_Properties() είχνει την φόρµα AttributeProp Public Sub Parameter_Properties() είχνει την φόρµα ParameterProp Public Sub RecordSet_Properties() είχνει την φόρµα RecordSetProp Public Sub Activity_Properties() είχνει την φόρµα SetActProp Public Sub Activity_Expand(ByVal ActiveNodeNo As Integer) Public Sub RecordSet_Expand(ByVal ActiveNodeNo As Integer) Public Sub Function_Expand(ByVal ActiveNodeNo As Integer) ActiveNodeNo (Integer) : Ο επιλεγµένος κόµβος. Σχεδιάζουν στη φόρµα-zoom τα συστατικά στοιχεία µίας Activity, ενός RecordSet ή µίας συνάρτησης αντίστοιχα. Public Sub Activity_Collapse(ByVal ActiveNodeNo As Integer) Public Sub RecordSet_Collapse(ByVal ActiveNodeNo As Integer) Public Sub Function_Collapse(ByVal ActiveNodeNo As Integer) ActiveNodeNo (Integer) : Ο επιλεγµένος κόµβος. Σβήνουν από τη φόρµα-zoom τα συστατικά στοιχεία µίας Activity, ενός RecordSet ή µίας συνάρτησης αντίστοιχα. Public Sub DeleteNodes(ActiveForm As Form) ActiveForm (Form) :Η ενεργή φόρµα-παιδί της MDIForm1. Για κάθε κόµβο στην συλλογή ActiveForm.SelectedLabels καλεί την κατάλληλη UnSynchronize συνάρτηση, τον προσθέτει στη συλλογή ActiveForm.DeletedNodes και τον εξαφανίζει από την ActiveForm.Καλεί την FinshedCropping, ώστε να αδειάσει η ActiveForm.SelectedLabels και να εξαφανιστεί το Cropping ορθογώνιο αν υπάρχει. Public Sub DeleteEdges(ActiveForm As Form) ActiveForm (Form) :Η ενεργή φόρµα-παιδί της MDIForm1. ιαγράφει κάθε ακµή στη συλλογή ActiveForm.SelectedLines και αν η ΑctiveForm είναι η ZoomForm καλεί την HandleRemovedLine(). 54

67 HelpingFunctions - (HelpingFunctions.bas) Περιέχει βοηθητικές συναρτήσεις κυρίως για την επεξεργασία των Strings. Public nk2str(7) As String Πίνακας που µετατρέπει το NodeΚind του κάθε κόµβου στο αντίστοιχο πρόθεµα που χρησιµοποιείται στο κλειδί του, π.χ. nk2srt(nkactin)=.in., nk2srt(nkactout)=.out. Public Sub InitializeNk2Str() Γεµίζει τον πίνακα nk2str µε τις κατάλληλες τιµές. Public Function DotExists(Name As String) As Boolean Name (String) :Το υπό εξέταση String. Ελέγχει αν στο Name υπάρχει τελεία. Επιστρέφει: True αν βρεθεί τελεία, False αν όχι. Public Function FindFieldName(Name As String) As String Name (String) :Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µετά την τελευταία τελεία. Public Function FindTableName(Name As String) As String Name (String) : Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µεταξύ της πρώτης και της τελευταίας τελείας. Public Function FindDBName(Name As String) As String Name (String) :Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µέχρι την πρώτη τελεία. Αν δεν υπάρχει τελεία στο Name επιστρέφει κενό String. Public Function FindSourceName(Name As String) As String Name (String) : Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µεταξύ της πρώτης και της τελευταίας τελείας. Public Function CutDBName(Name As String) As String Name (String) :Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µετά την πρώτη τελεία. Public Function CutDB_RSName(Name As String) As String Name (String) :Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µετά τη δεύτερη τελεία. Public Function FindPropName(Name As String) As String Name (String) :Το υπό εξέταση String. 55

68 Επιστρέφει: Το τµήµα του String µέχρι την πρώτη παρένθεση. Public Function FindImageKind(Name As String) As String Name (String) :Το υπό εξέταση String. Επιστρέφει: Το τµήµα του String µέχρι την πρώτη παύλα(-). Public Function LoadFtype2Function(FtypeIndex As Integer, FunProps As FunctionProperties) As FunctionProperties FtypeIndex (Integer):Η θέση του τύπου συνάρτησης στον πίνακα FunctionTypesBuf FunProps (FunctionProperties) : Οι ιδιότητες της συνάρτησης. Προσθέτει στις ιδιότητες µίας συνάρτησης τις εισόδους και την έξοδό της ανάλογα µε τον τύπο στον οποίο ανήκει. Enums - (Enums.bas) Περιέχει τα enumerations που χρησιµοποιούνται στον υπόλοιπο κώδικα. Enum DockKind Οι µορφές Docking ενός floating Tollbar. Enum ResizingPoints Τα σηµεία από τα οποία αλλάζει το µέγεθος ενός κόµβου (π.χ. πάνω,πάνωαριστερά). Enum RectangularGrabbingPoints Τα σηµεία στα οποία µπορεί να συνδέεται µία ακµή µε ένα κόµβο, εκτός από την περίπτωση της Activity. Enum ActivityGrabbingPoints Τα σηµεία στα οποία µπορεί να συνδέεται µία ακµή µε ένα κόµβο-activity. Enum LineAngles Οι δυνατές γωνίες µίας ακµής. Enum NodeTypes Οι κατηγορίες σχήµατος των κόµβων. Enum EdgeTypes Οι κατηγορίες ακµών Enum AttListNo Ο αριθµός-index της κάθε λίστας Attlist Εισόδων, Εξόδων και Παραµέτρων της Φόρµας SetActProp. Enum SubItemNo Ο αριθµός-index των SubItems του κάθε ListItem των λιστών Attlist Εισόδων, Εξόδων και Παραµέτρων της Φόρµας SetActProp 56

69 Enum NodeTags Οι τιµές του Tag του κάθε κόµβου των Treeview στις Φόρµες SetActProp και RecordSetprop. Enum NodeKinds Οι κατηγορίες κόµβων. Enum NodeSource Οι πιθανές συνδέσεις κόµβων.(όχι σχέσεις) Enum ZoomPositions Η θέση ενός κόµβου-activity στην Φόρµα-Zoom σε µία Activity. Enum RelationshipsKinds Οι τύποι σχέσεων που υπάρχουν στη βάση. ToolBarEnableFunctions (ToolBarEnableFunctions.bas) Περιέχει συναρτήσεις που ενεργοποιούν ή απενεργοποιούν τα κατάλληλα κουµπιά στις γραµµές εργαλείων ανάλογα µε το τι είδους φόρµα είναι ενεργή Design Class Modules LabelsCollection - (LabelsCollection.cls) Συλλογή από αντικείµενα LabelsD. Αντιπροσωπεύει τους κόµβους που είναι σχεδιασµένοι σε µία φόρµα. Public Property: ParForm(Form) : H φόρµα στην οποία ανήκει η συλλογή. Public Functions: Public Function addlabel(label As LabelsD) As LabelsD Label (LabelsD) : Οι ιδιότητες του κόµβου που προστίθεται. Προσθέτει ένα νέο αντίτυπο ενός υπάρχοντος κόµβου στη συλλογή. Public Function Add(Left As Single, Width As Single, Top As Single, Height As Single, Caption As String, NodeType As NodeTypes, Optional KeyName As String) As LabelsD Left (Single) : H X συντεταγµένη του πάνω αριστερού σηµείου του κόµβου. Width (Single) : Το πλάτος του κόµβου. Top (Single) : H Υ συντεταγµένη του πάνω αριστερού σηµείου του κόµβου. Height (Single) : Το ύψος του κόµβου. 57

70 Caption (String) : Η επικεφαλίδα του κόµβου. NodeType (NodeTypes) : Ο τύπος του κόµβου. KeyName (String) : Το κλειδί του κόµβου. Αν δεν δίνεται θεωρείται το Caption ως κλειδί. Προσθέτει έναν κόµβο στη συλλογή και αρχικοποιεί το Properties του. Επίσης ανάλογα µε τον τύπο του κόµβου θέτει τις σωστές τιµές στα ReadyColor και NotReadyColor του. Public Sub Remove(vntIndexKey As Variant) vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index της συνάρτησης. Για κάθε ακµή που ξεκινά ή τελειώνει στον κόµβο, αφαιρεί την ακµή από, αντίστοιχα, τη συλλογή EndingLines του κόµβου στον οποίο τελειώνει ή τη συλλογή StartingLines του κόµβου από τον οποίο ξεκινά η ακµή. Στη συνέχεια διαγράφει όλες τις ακµές αυτές και τον ίδιο τον κόµβο από τον γράφο και τη συλλογή. LabelsD - (LabelsD.cls) Αντιπροσωπεύει τις ιδιότητες ενός κόµβου. Public Properties: Left(Single) : H X συντεταγµένη του πάνω αριστερού σηµείου του κόµβου. Top(Single) : H Υ συντεταγµένη του πάνω αριστερού σηµείου του κόµβου. Width(Single) : Το πλάτος του κόµβου. Height(Single) : Το ύψος του κόµβου. Caption(String) : Η επικεφαλίδα του κόµβου. MousePointer (Integer):Ο δείκτης του mouse όταν αυτό βρίσκεται πάνω από τον κόµβο. Index(Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. NodeType(NodeTypes) : Ο τύπος του κόµβου. Visible(Boolean) : Ορίζει αν ο κόµβος φαίνεται στο γράφο ή όχι. Color(OLE_COLOR) : Το χρώµα του κόµβου. ToolTipText(String) : Το tooltiptext του κόµβου. Properties(Variant) : Tο αντικείµενο που περιέχει τις ιδιότητες του κόµβου. Είναι στιγµιότυπο µίας κλάσης *Properties όπου * είναι ο τύπος του κόµβου εκτός από τις περιπτώσεις των κόµβων DataType και Log όπου είναι ακέραιος. Ready(Boolean) : είχνει αν έχουν τεθεί όλες οι ιδιότητες του κόµβου. ParForm(Form) : H φόρµα στην οποία ανήκει ο κόµβος. ReadyColor(OLE_COLOR) : Το χρώµα του κόµβου όταν είναι έτοιµος. 58

71 NotReadyColor(OLE_COLOR) : Το χρώµα του κόµβου όταν δεν είναι έτοιµος. Expanded(Boolean) : είχνει αν ο κόµβος είναι Expanded. KeyName(String) : Το κλειδί του κόµβου στη συλλογή NamesColl της ParForm..Όταν τίθεται ένα όνοµα σε αυτό το όνοµα προστίθεται στη συλλογή NamesColl. Αν αυτό δεν είναι δυνατό παίρνει τιµή Error_myCode StartingLines(Collection) : Συλλογή µε τα κλειδιά των ακµών που ξεκινούν από τον κόµβο. EndingLines (Collection) : Συλλογή µε τα κλειδιά των ακµών που τερµατίζουν στον κόµβο. Public Functions: Public Function LineArrowDirection(GrabbingPoint As Integer) As String GrabbingPoint (Integer) : Το σηµείο στο οποίο θα «ακουµπήσει» στον κόµβο µία ακµή ως µία από τις τιµές των enumerations RectangularGrabbingPoints ή ActivityGrabbingPoints. Ανάλογα µε το GrabbingPoint και το είδος του κόµβου επιστρέφει το κλειδί µίας εικόνας του ImageList EdgeImages που θα µπει ως βέλος της ακµής. Public Function DrawRect(x As Single, y As Single) As Point x (Single) : Η Χ συντεταγµένη του δείκτη του mouse. y (Single) : Η Y συντεταγµένη του δείκτη του mouse. Ανάλογα µε τον τύπο του κόµβου και τα Χ,Υ εµφανίζει το ελεγκτήριο ParForm.Grabber στη σωστή θέση και θέτει τη µεταβλητή ParForm.GrabbingPoint στη τιµή του ενεργού GrabbingPoint. Public Function GrabPoint(Index As Integer) As Point Index (Integer) : Ένα από τα δυνατά σηµεία εκκίνησης ή τερµατισµού µίας ακµής πάνω στον κόµβο ως µία από τις τιµές των enumerations RectangularGrabbingPoints ή ActivityGrabbingPoints.dfv Eπιστρέφει τις Χ και Υ συντεταγµένες του δοσµένου σηµείου. Private Function: Private Sub MoveLines() Προκαλεί τη µετακίνηση όλων των ακµών που ξεκινούν ή τερµατίζουν στον κόµβο ώστε να ακολουθούν τη θέση του κόµβου. LinesCollection - (LinesCollection.cls) 59

72 Συλλογή από αντικείµενα LinesD. Αντιπροσωπεύει τις ακµές που είναι σχεδιασµένες σε µία φόρµα. Public Property: ParForm(Form) : H φόρµα στην οποία ανήκει η συλλογή. Public Functions: Public Function FindConnectingLine(FromLabel As Integer, ToLabel As Integer, LineType As EdgeTypes, Optional andremove As Boolean = False) As LinesD FromLabel (Integer) : Ο κόµβος από τον οποίο ξεκινά η ζητούµενη ακµή ToLabel (Integer) : Ο κόµβος από τον οποίο τερµατίζει η ζητούµενη ακµή LineType (EdgeTypes) : Ο τύπος της ακµής. andremove (Boolean) : Ορίζει αν η γραµµή που θα βρεθεί θα διαγραφεί. Αναζητεί αν υπάρχει ακµή τύπου LineType που να ξεκινά από τον κόµβο FromLabel και να καταλήγει στον κόµβο ToLabel.Αν δεν βρει τέτοια ακµή επιστρέφει Nothing. Αν υπάρχει,αν το andremove είναι True την διαγράφει και επιστρέφει Nothing αλλιώς επιστρέφει τις ιδιότητες της. Public Function Add(X1 As Single, Y1 As Single, Xm As Single, Ym As Single, X2 As Single, Y2 As Single, FromLabel As Integer, EdgeType As EdgeTypes, Optional Color As Long = vbblack) As LinesD X1 (Single) : Η Χ συντεταγµένη της αρχής της ακµής. Y1 (Single) : Η Υ συντεταγµένη της αρχής της ακµής. Xm (Single) : Η Χ συντεταγµένη του µέσου της ακµής. Ym (Single) : Η Υ συντεταγµένη του µέσου της ακµής. X2 (Single) : Η Χ συντεταγµένη του τέλους της ακµής. Y2 (Single) : Η Υ συντεταγµένη του τέλους της ακµής. FromLabel (Integer) : Το κλειδί του κόµβου EdgeType (EdgeTypes) : Ο τύπος της ακµής. Color (Long) : Το χρώµα της ακµής. ηµιουργεί το αντικείµενο των ιδιοτήτων της ακµής και το προσθέτει στη συλλογή. Επίσης δηµιουργεί και τις δύο γραµµές στο γράφο(formlines) και τα τρία ελεγκτήρια Image (LineEnds) που συνιστούν όλα µαζί µία ακµή.αν Index είναι ο αριθµός κλειδί της γραµµής τότε τα ελεγκτήρια που την αποτελούν είναι : FormLines(2*Index) : Η πρώτη γραµµή. FormLines(2*Index-1) : Η δεύτερη γραµµή 60

73 LineEnds(3*Index-2) : Η αρχή LineEnds(3*Index-1) : Η µέση LineEnds(3*Index) : Το τέλος Public Sub Remove(vntIndexKey As Variant) vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index της συνάρτησης. Αφαιρεί από τη συλλογή την ακµή µε κλειδί ή θέση vntindexkey και τα συστατικά της ελεγκτήρια από τη φόρµα. Public Sub RemoveFull(vntIndexKey As Variant) vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index της συνάρτησης. Αφαιρεί από τη συλλογή την ακµή µε κλειδί ή θέση vntindexkey, τα συστατικά της ελεγκτήρια από τη φόρµα καθώς και το κλειδί της από τη συλλογή StartingLines του κόµβου από τον οποίο ξεκινά και τη συλλογή EndingLines του κόµβου στον οποίο τερµατίζει. LinesD - (LinesD.cls) Αντιπροσωπεύει τις ιδιότητες µίας ακµής. Public Properties: Index(Integer) : Το κλειδί της ακµής. X1(Single) : Η Χ συντεταγµένη της αρχής της ακµής. Y1(Single) : Η Υ συντεταγµένη της αρχής της ακµής. Xm(Single) : Η Χ συντεταγµένη του µέσου της ακµής. Ym(Single) : Η Υ συντεταγµένη του µέσου της ακµής. X2(Single) : Η Χ συντεταγµένη του τέλους της ακµής. Y2(Single) : Η Υ συντεταγµένη του τέλους της ακµής. FromLabel(Integer) : Το κλειδί του κόµβου από τον οποίο ξεκινά η ακµή. ToLabel(Integer) : Το κλειδί του κόµβου στον οποίο τερµατίζει η ακµή. StartBox(Integer) :Το Index του ελεγκτηρίου Image-αρχικού σηµείου,3*index-2. MidBox(Integer) :Το Index του ελεγκτηρίου Image-µεσαίου σηµείου,3*index-1. EndBox(Integer) :Το Index του ελεγκτηρίου Image-τελικού σηµείου,3*index. EdgeType(EdgeTypes) : Ο τύπος της ακµής. BorderStyle(Integer) : Το στυλ της ακµής : διακεκοµµένη,συνεχής κ.τ.λ.. BorderWidth(Integer) : Το πάχος της ακµής. ParForm(Form) : H φόρµα στην οποία βρίσκεται η ακµή. 61

74 FromGrabbingPoint(Integer) :Το σηµείο του κόµβου από το οποίο ξεκινά η ακµή, ως τιµή του enumeration RectangularGrabbingPoints και ActivityGrabbingPoints. ToGrabbingPoint(Integer) :Το σηµείο του κόµβου στο οποίο τερµατίζει η ακµή, ως τιµή του enumeration RectangularGrabbingPoints και ActivityGrabbingPoints. Visible(Boolean) : Ορίζει αν η γραµµή είναι ορατή ή όχι. Angle(LineAngles):Η γωνία της ακµής.παίρνει τιµές από το enumeration LineAngles HighLighted(Boolean) : Αλλάζει το στυλ των συστατικών της ακµής ώστε να φαίνονται η αρχή, η µέση και το τέλος της. Selected(Boolean) : Αλλάζει το στυλ των συστατικών της ακµής ώστε να φαίνεται επιλεγµένη. Color(Long) : Το χρώµα της ακµής. Names2IndexColl - (Names2IndexColl.cls) Συλλογή που κρατά τα ονόµατα των κόµβων και τα αντίστοιχα κλειδιά τους στη συλλογή Labels. Public Functions: Public Function Remove(LabelName As String) As Boolean LabelName (String) : To όνοµα του κόµβου που αφαιρείται από τη συλλογή. Επιστρέφει True αν γίνει η αφαίρεση, False αν δεν υπάρχει τέτοιο όνοµα στη συλλογή. Public Function Add(LabelNo As Integer, LabelName As String) As Integer LabelNo (Integer) : Το κλειδί του κόµβου LabelName (String) : Το όνοµα του κόµβου Προσθέτει το κλειδί και το όνοµα του κόµβου στη συλλογή και επιστρέφει το κλειδί του κόµβου αν επιτύχει η πρόσθεση ή -1 αν υπάρχει ήδη αυτό το όνοµα στη συλλογή. Public Function Item(vntIndexKey As Variant) As Integer vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Αν βρεθεί το ζητούµενο στοιχείο επιστρέφει το κλειδί του κόµβου, αλλιώς -1. New2OldIndexCollection - (New2OldIndexCollection.cls) Συλλογή από αντικείµενα NewANDoldIndex.Κρατά την αντιστοιχία µεταξύ των κλειδιών των κόµβων στη φόρµα σχεδιασµού του σεναρίου και στη φόρµα-zoom. NewANDoldIndex - (NewANDoldIndex.cls) Κρατά τα κλειδιά ενός κόµβου Activity ή RecordSet στη φόρµα σχεδιασµού του σεναρίου και στη φόρµα-zoom 62

75 Public Properties: OldIndex(Integer) : Το κλειδί του κόµβου στη φόρµα σχεδιασµού του σεναρίου. NewIndex(Integer) : Το κλειδί του κόµβου στη φόρµα-zoom. DeletedNode - (DeletedNode.cls) Κρατά πληροφορίες για κόµβους που έχουν διαγραφεί από το σενάριο. Public Properties: NodeID(Integer) : Το ID του κόµβου στη Βάση. NodeKind(Integer) : Το είδος του κόµβου. Παίρνει τιµές από το enumeration NodeKind. DeletedNodesCollection - (DeletedNodesCollection.cls) Συλλογή αντικειµένων DeletedNode. Αντιπροσωπεύει τους διαγραµµένους από το σενάριο κόµβους. SelectedLabelsCollection - (SelectedLabelsCollection.cls) Συλλογή στην οποία κρατούνται τα κλειδιά των κόµβων που είναι επιλεγµένοι. SelectedLinesCollection - (SelectedLinesCollection.cls) Συλλογή στην οποία κρατούνται τα κλειδιά των ακµών που είναι επιλεγµένες. Point (Point.cls) Forms DrawForm - (DrawForm.frm)- ZoomForm - (ZoomForm.frm) Η πρώτη είναι η φόρµα στην οποία σχεδιάζεται ένα σενάριο.σε αυτήν µπορούµε να σχεδιάσουµε RecordSets, Activities, Σχόλια και Log αρχεία. Η δεύτερη είναι η φόρµα αναλυτικής επίδειξης των Activities. Σε αυτήν µπορούµε να σχεδιάσουµε Attributes, Παραµέτρους, Σταθερές και Συναρτήσεις. Έχουν κοινή συµπεριφορά που διαφοροποιείται στην ουσία µόνο στους ελέγχους που κάνουν. Βασικά ελεγκτήρια: CroppingRect(Shape) : Το ορθογώνιο που δείχνει την περιοχή που έχει γίνει Cropped. FocusDummy(PictureBox) : Χρησιµοποιείται για να παίρνει το focus όταν δε θέλουµε να το έχει κανένας κόµβος ή ακµή. FormLabels(SLabel) : Οι κόµβοι. FormLines(Line) : Τα τµήµατα των ακµών. Grabber(Shape) : Το µπλε τετράγωνο που δείχνει το σηµείο από το οποίο θα «πιαστεί» µία ακµή. lblscroll(picturebox) : Βρίσκεται στην κάτω δεξιά γωνία της φόρµας και είναι αυτό 63

76 στο οποίο κάνουµε κλικ για να µεγαλώσουµε το µέγεθος του PicForm. LineEnds(Image) : Η αρχή, το µέσο και το τέλος µίας γραµµής. PicForm(PictureBox) : Πάνω σε αυτό σχεδιάζεται όλο το σενάριο και χρησιµοποιείται για να επιτυγχάνεται το scroll του σεναρίου. ResizeLabel(Label) : Το ορθογώνιο που εµφανίζεται όταν αλλάζουν οι διαστάσεις ενός κοµβου. Public Properties: ScenarioID(Integer) : Το ID του σεναρίου στη Βάση. NamesColl(Names2IndexColl) : Η συλλογή που αντιστοιχεί τα ονόµατα των κόµβων στα κλειδιά τους. SelectedLabels(SelectedLabelsCollection) : Η συλλογή των επιλεγµένων κόµβων. SelectedLines(SelectedLinesCollection) : Η συλλογή των επιλεγµένων ακµών. DeletedNodes(DeletedNodesCollection) : Η συλλογή των διεγραµµένων κόµβων. Labels(LabelsCollection) : Η συλλογή των κόµβων. Lines(LinesCollection) : Η συλλογή των ακµών. LabelsNo(Integer):Ο αύξων αριθµός των κόµβων, από τον οποίο προκύπτει το κλειδί τους. LinesNo(Integer):Ο αύξων αριθµός των ακµών, από τον οποίο προκύπτει το κλειδί τους. CurrentNode(Integer) : είχνει τον τελευταίο κόµβο στον οποίο έγινε κλικ. CurrentEdge(Integer) : είχνει την τελευταία ακµή στην οποία έγινε κλικ. ActiveLabel(Integer) : είχνει τον τελευταίο κόµβο από τον οποίο πέρασε το mouse. ActiveEdge(Integer) : είχνει την τελευταία ακµή από την οποία πέρασε το mouse. GrabbingPoint(Integer) : είχνει το σηµείο από το οποίο πρέπει να πιαστεί µία γραµµή από ένα κόµβο. Είναι public γιατί παίρνει τιµή µέσω συνάρτησης της κλάσης LabelsD. (ZoomForm)CentralActivityNo (Integer) : Το κλειδί της Activity στην οποία γίνεται το Zoom. Private Properties: (DrawForm) ActivityNo(Integer), RecordSetNo(Integer) :Ο αύξων αριθµός των Activities και των RecordSets, αντίστοιχα, από τον οποίο προκύπτει το πρότυπο όνοµά τους. (ZoomForm) ConstantNo(Integer), AttributeNo(Integer), FunctionNo(Integer), 64

77 ParameterNo(Integer) :Ο αύξων αριθµός των σταθερών, των attributes, των συναρτήσεων και των παραµέτρων, αντίστοιχα, από τον οποίο προκύπτει το πρότυπο όνοµά τους. Private Subs: Private Sub lblsroll_mousemove(button As Integer, Shift As Integer, x As Single, y As Single) Αλλάζει τις διαστάσεις του PicForm ανάλογα µε την κίνηση του mouse. Private Sub PicForm_DragOver(Source As Control, x As Single, y As Single, State As Integer) Αλλάζει τη θέση (scroll) ή το µέγεθος του PicForm όταν ένας κόµβος κινείται στα άκρα της ορατής περιοχής ώστε να φανεί η χρήσιµη περιοχή. Private Sub PicForm_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Θέτει τη φόρµα σε κατάσταση κανενός επιλεγµένου αντικειµένου, δηλαδή αδειάζει τις συλλογές SelectedLabels και SelectedLines, δίνει το Focus στο FocusDummy και θέτει CurrentNode=-1.Ανάλογα µε το επιλεγµένο κουµπί των γραµµών εργαλείων, κάνει και την ανάλογη εργασία. Private Sub FormLabels_DragDrop(Index As Integer, Source As Control, x As Single, y As Single) Χειρίζεται τη µετακίνηση ενός τµήµατος µίας ακµής και αλλάζει στις ιδιότητες των εµπλεκόµενων κόµβων και της ακµής την πληροφορία σχετικά µε το που ξεκινά και που τελειώνει η ακµή. Private Sub FormLabels_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) Aν δεν είναι πατηµένο το πλήκτρο Ctrl αδειάζει τη συλλογή SelectedLabels.Στη συνέχεια προσθέτει τον κόµβο στη συλλογή.aν έχει πατηθεί το αριστερό πλήκτρο του mouse ανάλογα µε το επιλεγµένο κουµπί των γραµµών εργαλείων, κάνει και την ανάλογη εργασία ενώ αν πατηθεί το δεξί πλήκτρο αναδύεται το κατάλληλο menu. (DrawForm)Private Sub HandleDrawDrawnLine(LineNo As Integer) LineNo (Integer) : Το κλειδί της υπό επεξεργασία ακµής. Ελέγχει αν µία γραµµή που µόλις σχεδιάστηκε ικανοποιεί τους απαιτούµενους περιορισµούς και αν όχι τη διαγράφει και εµφανίζει το κατάλληλο µήνυµα Modules LabelsResize - (LabelsResize.bas) 65

78 Περιέχει συναρτήσεις υπεύθυνες για την αλλαγή διαστάσεων ενός κοµβου.. Public Sub StartLabelResizing(ParForm As Form, NodeNo As Integer, x As Single, y As Single) ParForm (Form) : Η φόρµα στην οποία βρίσκεται το εν λόγω κόµβος. NodeNo (Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. x (Single) : Η Χ συντεταγµένη της θέσης του Mouse. y (Single) : Η Υ συντεταγµένη της θέσης του Mouse. Εµφανίζει το ορθογώνιο του Resize (ResizeLabel) Public Sub LabelResizing(ParForm As Form, NodeNo As Integer, x As Single, y As Single) ParForm (Form) : Η φόρµα στην οποία βρίσκεται το εν λόγω κόµβος. NodeNo (Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. x (Single) : Η Χ συντεταγµένη της θέσης του Mouse. y (Single) : Η Υ συντεταγµένη της θέσης του Mouse. Αλλάζει τις διαστάσεις του Resizing ορθογωνίου. Public Sub EndLabelResizing(ParForm As Form, NodeNo As Integer, x As Single, y As Single) ParForm (Form) : Η φόρµα στην οποία βρίσκεται το εν λόγω κόµβος. NodeNo (Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. x (Single) : Η Χ συντεταγµένη της θέσης του Mouse. y (Single) : Η Υ συντεταγµένη της θέσης του Mouse. Εξαφανίζει το Resizing ορθογώνιο και αλλάζει τις διαστάσεις του κόµβου. Public Sub SetResizingDirection(ParForm As Form, NodeNo As Integer, x As Single, y As Single) ParForm (Form) : Η φόρµα στην οποία βρίσκεται το εν λόγω κόµβος. NodeNo (Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. x (Single) : Η Χ συντεταγµένη της θέσης του Mouse. y (Single) : Η Υ συντεταγµένη της θέσης του Mouse. Γράφει στο ParForm.ResizeLabel.Tag την κατεύθυνση προς την οποία γίνεται η αλλαγή των διαστάσεων του κόµβου ως µία τιµή του enumeration ResizingPoints. Cropping - (Cropping.bas) Περιέχει βοηθητικές συναρτήσεις για την διαδικασία του Crop. Public CropStartX As Single 66

79 H X συντεταγµένη από την οποία ξεκινά το cropping Public CropStartY As Single H Υ συντεταγµένη από την οποία ξεκινά το cropping Public Sub StartCropping(ParForm As Form, x As Single, y As Single) ParForm (Form) : Η υπό επεξεργασία Φόρµα x (Single) : Η Χ συντεταγµένη της θέσης του Mouse y (Single) : Η Υ συντεταγµένη της θέσης του Mouse Εµφανίζει το ορθογώνιο του cropping και θέτει τις CropStartX και CropStartY Public Sub DoCropping(ParForm As Form, x As Single, y As Single) ParForm (Form) : Η υπό επεξεργασία Φόρµα x (Single) : Η Χ συντεταγµένη της θέσης του Mouse y (Single) : Η Υ συντεταγµένη της θέσης του Mouse Ρυθµίζει τις διαστάσεις του cropping ορθογωνίου και προσθέτει όσους κόµβους περιέχονται σε αυτό στη συλλογή SelectedLabels της ParForm. Public Sub FinishedCropping(ParForm As Form) ParForm (Form) : Η υπό επεξεργασία Φόρµα. Εξαφανίζει το cropping ορθογώνιο και αδειάζει τη συλλογή SelectedLabels της ParForm. ZoomFormFunctions - (ZoomFormFunctions.bas) Περιέχει συναρτήσεις που χρησιµοποιούνται από τη φόρµα-zoom. Public Sub ReturnToDrawForm(Optional NoCollapse As Boolean = False) NoCollapse (Boolean ) : Ορίζει αν οι κόµβοι θα καταρρεύσουν ή όχι Αντιγράφει τις ιδιότητες των κόµβων που υπάρχουν στη φόρµα-zoom στους αντίστοιχους τους κόµβους στη βασική φόρµα σχεδιασµού του σεναρίου. Αν η µεταβλητή NoCollapse είναι True τότε οι µετά το τέλος της συνάρτησης οι κόµβοι εµφανίζονται χωρίς να φαίνονται τα µέλη τους (Collapsed), αλλιώς µε τα µέλη τους ζωγραφισµένα στο γράφο(expanded). Public Sub LoadZoomForm(ActiveFormNo As Integer, NodeNo As Integer) ActiveFormNo (Integer) : H ενεργή φόρµα-παιδί της MDIForm1 NodeNo (Integer) : O επιλεγµένος κόµβος-activity. Ανοίγει και γεµίζει την φόρµα-zoom, ZoomForm.Στο κέντρο σχεδιάζεται ο επιλεγµένος κόµβος, αριστερά του όσοι κόµβοι-οντότητες (RecordSets & Activities) συνδέονται µαζί του µε Provider ακµή που τερµατίζει στον εν λόγω κόµβο και δεξιά του όσοι κόµβοι συνδέονται µαζί του µε Provider ακµή που ξεκινά από τον εν λόγω κόµβο. Επίσης καλεί τις 67

80 Activity_Expand και RecordSet_Expand για να εµφανίσει τα µέλη όλων των κόµβων που σχεδιάζονται. Public Sub ShowLines(LineType As EdgeTypes) LineType (EdgeTypes) : Ο τύπος της ακµής που επιθυµούµε να εµφανιστεί. Εµφανίζει τις ακµές τύπου LineType στο γράφο. Aν πρόκειται για τύπο Instance-Of δηµιουργεί και τους απαραίτητους κόµβους τύπων δεδοµένων και συναρτήσεων. Public Sub HideLines(LineType As EdgeTypes) LineType (EdgeTypes) : Ο τύπος της ακµής που επιθυµούµε να µην εµφανίζεται. Κρύβει τις ακµές τύπου LineType. Aν πρόκειται για τύπο Instance-Of διαγράφει από το γράφο και τους σχετικούς κόµβους τύπων δεδοµένων και συναρτήσεων. Public Sub HandleRemovedLine(LineNo As Integer) LineNo (Integer) : Ο αριθµός-κλειδί της γραµµής στη συλλογή Lines. Χειρίζεται µία γραµµή της φόρµας-zoom που διαγράφτηκε και ενηµερώνει τους συνδεόµενους µε αυτή τη γραµµή κόµβους για τη διαγραφή της σχέσης τους. Public Sub HandleZoomDrawnLine(LineNo As Integer) LineNo (Integer) : Ο αριθµός-κλειδί της γραµµής στη συλλογή Lines. Χειρίζεται µία γραµµή της φόρµας-zoom που µόλις σχεδιάστηκε. Ελέγχει αν επιτρέπεται η σχέση που ορίζεται µε αυτή τη γραµµή και αν ναι ενηµερώνει τους συνδεόµενους µε αυτή τη γραµµή κόµβους για τη δηµιουργία της σχέσης τους. Public Sub ConnectFunction(FunctionLabel As LabelsD, ActivityLabel As LabelsD) FunctionLabel (LabelsD) : Ο κόµβος-συνάρτηση. ActivityLabel (LabelsD) : Ο κόµβος-activity. ηµιουργεί µία Part-Of ακµή µεταξύ των κόµβων, ενηµερώνει τις ιδιότητες της συνάρτησης για την Activity στην οποία ανήκει και προσθέτει τις ιδιότητες της συνάρτησης στη συλλογή Act_Functions της Activity. Public Sub DisConnectFunction(FunctionLabel As LabelsD, ActivityLabel As LabelsD) FunctionLabel (LabelsD) : Ο κόµβος-συνάρτηση. ActivityLabel (LabelsD) : Ο κόµβος-activity. ιαγράφει από τις ιδιότητες της συνάρτησης την Activity στην οποία ανήκει και από τη συλλογή Act_Functions της Activity τις ιδιότητες της συνάρτησης. Public Sub ReverseLine(LineNo As Integer) LineNo (Integer) : Ο αριθµός-κλειδί της γραµµής στη συλλογή Lines. 68

81 Αντιστρέφει τη φορά µίας ακµής. Public Function LineAllreadyDrawn(LineNo As Integer, ParForm As Form) As Boolean LineNo (Integer) : Ο αριθµός-κλειδί της γραµµής στη συλλογή Lines. ParForm (Form) : Η φόρµα στην οποία βρίσκεται η ερευνούµενη γραµµή. Ελέγχει αν υπάρχει άλλη ακµή στο γράφο ιδίου τύπου µε τη LineNo που να αρχίζει από τον ίδιο κόµβο και να τερµατίζει στον ίδιο κόµβο µε αυτή. ExpandCollapseActivities - (ExpandCollapseActivities.bas) ExpandCollapseFunctions - (ExpandCollapseFunctions.bas) ExpandCollapseRecordSet - (ExpandCollapseRecordSet.bas) Περιέχει συναρτήσεις που σχεδιάζουν στη ή διαγράφουν από τη φόρµα-zoom τα συστατικά των Activities, των συναρτήσεων και των RecordSet, αντίστοιχα. NodeNo (Integer) : Ο αριθµός-κλειδί του εν λόγω κόµβου στη συλλογή Labels. Οι συναρτήσεις Expand* που περιέχονται σε αυτά τα Modules δηµιουργούν τους κατάλληλους κόµβους παραµέτρων, συναρτήσεων και attributes στο γράφο και αντιγράφουν τις ιδιότητές τους από την οντότητα στην οποία ανήκουν στους αντίστοιχους κόµβους Types Class Modules InputProperties - (InputProperties.cls) Αντιπροσωπεύει τα βασικά χαρακτηριστικά µίας εισόδου. Χρησιµοποιείται στις εισόδους ενός τύπου συνάρτησης. Public Properties: Input_Name(String) : Το όνοµα της εισόδου. Input_Type(Integer):Η θέση του τύπου δεδοµένων της στον πίνακα DataTypesbuf() OutputProperties - (OutputProperties.cls) Αντιπροσωπεύει τα βασικά χαρακτηριστικά µίας εξόδου. Χρησιµοποιείται στις εξόδους ενός τύπου συνάρτησης ή ενός τύπου Activity. Public Properties: Output_Name(String) : Το όνοµα της εξόδου. Output_Type(Integer):Η θέση του τύπου δεδοµένων της στον πίνακα DataTypesbuf() ParamProperties - (ParamProperties.cls) 69

82 Αντιπροσωπεύει τα βασικά χαρακτηριστικά µίας παραµέτρου. Χρησιµοποιείται στις παραµέτρους ενός τύπου Activity. Public Properties: Parameter_Name(String) : Το όνοµα της παραµέτρου. Parameter_Type(Integer):Η θέση του τύπου δεδοµένων της στον πίνακα DataTypesbuf() UsedFunctionProperties - (UsedFunctionProperties.cls) Αντιπροσωπεύει τα βασικά χαρακτηριστικά µίας συνάρτησης. Χρησιµοποιείται στις συναρτήσεις ενός Activity τύπου. Public Properties: Function_Name(String) : Το όνοµα της συνάρτησης. Function_Type(Integer) : Ο τύπος της συνάρτησης. FunctionTypeProperties - (FunctionTypeProperties.cls) Αντιπροσωπεύει τις ιδιότητες ενός τύπου συναρτήσεως. Public Properties: FunctionType_Name(String) : Το όνοµα του τύπου. FunctionType_Description(String) : Η περιγραφή του. FunctionType_Inputs(FunctionType_Inputs) : Οι είσοδοι του τύπου. FunctionType_Outputs(FunctionType_Outputs) : Η έξοδος του τύπου. FunctionType_NameIndex(Integer) : Η θέση του στον πίνακα FunctionTypesbuf(). FunctionType_Inputs - (FunctionType_Inputs.cls) Συλλογή από αντικείµενα InputProperties. Ανήκει στις ιδιότητες ενός τύπου συναρτήσεως και αντιπροσωπεύει τις εισόδους που έχει µία συνάρτηση τέτοιου τύπου. FunctionType_Outputs - (FunctionType_Outputs.cls) Συλλογή από αντικείµενα OutputProperties. Ανήκει στις ιδιότητες ενός τύπου συναρτήσεως και αντιπροσωπεύει την έξοδο που έχει µία συνάρτηση τέτοιου τύπου. ActivityTypeProperties - (ActivityTypeProperties.cls) Αντιπροσωπεύει τις ιδιότητες ενός Activity τύπου. Public Properties: ActType_Name(String) : Το όνοµα του τύπου. ActType_SQL (String) : Η πρότυπη SQL πρότασή του. ActType_RecordSetNo(Integer) : Ο αριθµός των εισόδων ενός Activities τέτοιου τύπου. ActType_OutPuts(ActType_OutPuts) : Η συλλογή των εξόδων του. ActType_Parameters(ActType_Parameters) : Η συλλογή των παραµέτρων του. 70

83 ActType_Description(String) : Η περιγραφή του. ActType_NameIndex(Integer) : Η θέση του στον πίνακα ActivityTypesbuf(). ActType_Functions(ActType_Functions) : Η συλλογή των συναρτήσεων του. ActType_Functions - (ActType_Functions.cls) Συλλογή από αντικείµενα UsedFunctionProperties.Ανήκει στις ιδιότητες ενός Activity τύπου και αντιπροσωπεύει τις συναρτήσεις που χρησιµοποιεί µία Activity τέτοιου τύπου. ActType_OutPuts - (ActType_OutPuts.cls) Συλλογή από αντικείµενα OutputProperties. Ανήκει στις ιδιότητες ενός Activity τύπου και αντιπροσωπεύει τις προκαθορισµένες επιπλέον εξόδους που έχει µία Activity τέτοιου τύπου. ActType_Parameters - (ActType_Parameters.cls) Συλλογή από αντικείµενα ParamProperties. Ανήκει στις ιδιότητες ενός Activity τύπου και αντιπροσωπεύει τις προκαθορισµένες επιπλέον παραµέτρους που έχει µία Activity τέτοιου τύπου Forms InOutProp - (InOutProp.frm) Φόρµα για την πρόσθεση εξόδων, παραµέτρων και συναρτήσεων σε έναν τύπο Activity ή παραµέτρων εισόδου και εξόδου σε ένα τύπο συνάρτησης. Private Properties: SourceList(ListBox): Η λίστα στην οποία πρέπει να προστεθεί το στοιχείο δηµιουργείται.. SourceColl(Collection) : Η συλλογή στην οποία πρέπει να προστεθεί το στοιχείο δηµιουργείται.. ParForm(Form): Η φόρµα από την οποία ζητήθηκε αυτή η φόρµα, δηλαδή η DBActTypes ή η DBFunctionTypes. Private Sub: Private Sub OK_Click() Ελέγχει αν έχει επιλεχθεί τύπος, αν έχει δοθεί όνοµα και αν το όνοµα αυτό περιέχει τελεία και αν κανένα από τα παραπάνω δεν ισχύει προσθέτει το όνοµα και τον τύπο που επιλέχθηκαν στη λίστα SourceList και στη συλλογή SourceColl. Public Sub: Public Sub SetFormParameters(Tag As String, SList As ListBox, SColl 71

84 As Collection, ParF As Form) Tag (String) : Ορίζει τι στοιχείο πρέπει να δηµιουργηθεί από τη φόρµα. Μπορεί να είναι Function, Output, Input ή Parameter. SList (ListBox) : Το ListBox SourceList. SColl (Collection) : H συλλογή SourceColl. ParF (Form) : Η φόρµα ParForm. Φέρνει τη φόρµα σε κατάσταση εισαγωγής του κατάλληλου στοιχείου, αν πρόκειται για εισαγωγή συνάρτησης φορτώνει σε µία λίστα τους υπαρκτούς τύπους συναρτήσεων αλλιώς φορτώνει στη λίστα τους υπαρκτούς τύπους δεδοµένων DBActTypes - (DBActTypes.frm) Φόρµα για την επίδειξη, επεξεργασία και εισαγωγή νέων Activity τύπων. Private Subs: Private Sub ActTypes_Click() είχνει τις ιδιότητες του κάθε τύπου. Private Sub But_Cancel_Click() Αν βρισκόµαστε σε κατάσταση εισαγωγής ή αλλαγής τύπου επιστρέφει σε κατάσταση επίδειξης χωρίς να σωθούν οι όποιες αλλαγές, αλλιώς κλείνει την φόρµα. Private Sub But_SAVE_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχει δοθεί περιγραφή και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω σώζει στη βάση τις ιδιότητες του νέου τύπο ή τις αλλαγές που έγιναν στον υπάρχοντα τύπο. Private Sub AddParam_Click() Private Sub AddOutput_Click() Private Sub AddFunction_Click() Οι τρεις παραπάνω συναρτήσεις καλούν την InOutProp.SetFormParameters µε τις κατάλληλες παραµέτρους ώστε να ανοίξει η InOutProp σε κατάλληλη κατάσταση ώστε να οριστούν νέες παράµετροι, έξοδοι και συναρτήσεις, αντίστοιχα µε τη σειρά των συναρτήσεων, του τύπου Private Sub RemParam_Click() Private Sub RemOutput_Click() Private Sub RemFunction_Click() Οι τρεις παραπάνω συναρτήσεις αφαιρούν από τον τύπο την επιλεγµένη παράµετρο, έξοδο και συνάρτηση, αντίστοιχα µε τη σειρά των συναρτήσεων. 72

85 Public Subs: Public Sub ShowActivityTypes(Index As Integer) Index (Integer) : Η θέση του επιθυµητού τύπου στη λίστα ActTypes. Φέρνει τη φόρµα σε κατάσταση επίδειξης τύπων και θέτει ως επιλεγµένο τύπο αυτόν που καθορίζεται από το Index, προκαλώντας έτσι την κλήση της ActivityTypes_Click(). Public Sub NewActivityType() Φέρνει τη φόρµα σε κατάσταση εισαγωγής νέου τύπου. Public Sub EditActivityType(Index As Integer) Index (Integer) : Η θέση του τύπου που αλλάζει στη λίστα ActTypes. Φέρνει τη φόρµα σε κατάσταση αλλαγής των στοιχείων του τύπου που καθορίζεται από το Index. DBDataTypes - (DBDataTypes.frm) Φόρµα για την επίδειξη, επεξεργασία και εισαγωγή νέων τύπων εδοµένων. Private Subs: Private Sub But_Cancel_Click() Αν βρισκόµαστε σε κατάσταση εισαγωγής ή αλλαγής τύπου επιστρέφει σε κατάσταση επίδειξης χωρίς να σωθούν οι όποιες αλλαγές, αλλιώς κλείνει την φόρµα. Private Sub But_SAVE_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχει δοθεί περιγραφή και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω σώζει στη βάση τις ιδιότητες του νέου τύπο ή τις αλλαγές που έγιναν στον υπάρχοντα τύπο. Public Subs: Public Sub ShowDataTypes(Index As Integer) Index (Integer) : Η θέση του επιθυµητού τύπου στη λίστα DataTypes. Φέρνει τη φόρµα σε κατάσταση επίδειξης τύπων και θέτει ως επιλεγµένο τύπο αυτόν που καθορίζεται από το Index. Public Sub NewDataType() Φέρνει τη φόρµα σε κατάσταση εισαγωγής νέου τύπου. Public Sub EditDataType(Index As Integer) Index (Integer) : Η θέση του τύπου που αλλάζει στη λίστα DataTypes. Φέρνει τη φόρµα σε κατάσταση αλλαγής των στοιχείων του τύπου που καθορίζεται από το Index. 73

86 DBFunctionType - (DBFunctionType.frm) Φόρµα για την επίδειξη, επεξεργασία και εισαγωγή νέων τύπων Συναρτήσεων. Private Subs: Private Sub FunctionTypes_Click() είχνει τις ιδιότητες του κάθε τύπου. Private Sub But_Cancel_Click() Αν βρισκόµαστε σε κατάσταση εισαγωγής ή αλλαγής τύπου επιστρέφει σε κατάσταση επίδειξης χωρίς να σωθούν οι όποιες αλλαγές, αλλιώς κλείνει την φόρµα. Private Sub But_SAVE_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχει δοθεί περιγραφή και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω σώζει στη βάση τις ιδιότητες του νέου τύπο ή τις αλλαγές που έγιναν στον υπάρχοντα τύπο. Private Sub AddInput_Click() Private Sub AddOutput_Click() Οι δύο παραπάνω συναρτήσεις καλούν την InOutProp.SetFormParameters µε τις κατάλληλες παραµέτρους ώστε να ανοίξει η InOutProp σε κατάλληλη κατάσταση ώστε να οριστούν νέες είσοδοι ή έξοδοι του τύπου, αντίστοιχα µε τη σειρά των συναρτήσεων. Private Sub RemInput_Click() Private Sub RemOutput_Click() Οι τρεις παραπάνω συναρτήσεις αφαιρούν από τον τύπο την επιλεγµένη είσοδο ή έξοδο, αντίστοιχα µε τη σειρά των συναρτήσεων. Public Subs: Public Sub ShowFunctionTypes(Index As Integer) Index (Integer) : Η θέση του επιθυµητού τύπου στη λίστα FunctionTypes. Φέρνει τη φόρµα σε κατάσταση επίδειξης τύπων και θέτει ως επιλεγµένο τύπο αυτόν που καθορίζεται από το Index, προκαλώντας έτσι την κλήση της FunctionTypes_Click(). Public Sub NewFunctionType() Φέρνει τη φόρµα σε κατάσταση εισαγωγής νέου τύπου. Public Sub EditFunctionType(Index As Integer) Index (Integer) : Η θέση του τύπου που αλλάζει στη λίστα FunctionTypes. Φέρνει τη φόρµα σε κατάσταση αλλαγής των στοιχείων του τύπου που καθορίζεται από το Index. 74

87 Modules TypesLoadFunctions - (TypesLoadFunctions.bas) Περιέχει συναρτήσεις που φορτώνουν από τη βάση τους τύπους εδοµένων, Activities και Συναρτήσεων. Global DataTypesBuf() As String Πίνακας από String δυναµικού µήκους στον οποίο φορτώνονται τα ονόµατα των Τύπων εδοµένων που υπάρχουν στη βάση. Global FunctionTypesbuf() As String Πίνακας από String δυναµικού µήκους στον οποίο φορτώνονται τα ονόµατα των Τύπων Συναρτήσεων που υπάρχουν στη βάση. Global ActivityTypesbuf() As String Πίνακας από String δυναµικού µήκους στον οποίο φορτώνονται τα ονόµατα των Τύπων Activities που υπάρχουν στη βάση. Global DataTypesLoaded As Boolean Ορίζει αν έχουν ήδη διαβαστεί και φορτωθεί στον αντίστοιχο πίνακα τα ονόµατα των Τύπων εδοµένων. Global FunctionTypesLoaded As Boolean Ορίζει αν έχουν ήδη διαβαστεί και φορτωθεί στον αντίστοιχο πίνακα τα ονόµατα των Τύπων Συναρτήσεων. Public Sub LoadDataTypes2Buf() ιαβάζει τα ονόµατα των Τύπων εδοµένων από τη βάση και τα φορτώνει στον πίνακα DataTypesbuf(). Public Sub LoadActivityTypes2Buf() ιαβάζει τα ονόµατα των Τύπων Activities από τη βάση και τα φορτώνει στον πίνακα Activitypesbuf(). Public Function LoadActivityTypeinfo(Index As Integer) As ActivityTypeProperties Index (Integer) :Η θέση του Activity τύπου στον πίνακα ActivityTypesbuf(). Επιστρέφει: Ένα στιγµιότυπο του τύπου ActivityTypeProperties τις φορτωµένες από τη βάση ιδιότητες της. Public Sub LoadFunctionTypes2Buf() ιαβάζει τα ονόµατα των Τύπων Συναρτήσεων από τη βάση και τα φορτώνει στον πίνακα FunctionΤypesbuf(). 75

88 Public Function LoadFunctionTypeinfo(Index As Integer) As FunctionTypeProperties Index (Integer) :Η θέση του τύπου Συνάρτησης στον πίνακα FunctionTypesbuf(). Επιστρέφει: Ένα στιγµιότυπο του τύπου FunctionTypeProperties τις φορτωµένες από τη βάση ιδιότητες της. Public Function FindDataTypeIndex(DataTypeName As String) As Integer DataTypeName (String) : Το όνοµα του Τύπου Επιστρέφει : Τη θέση του τύπου στον πίνακα Datatypesbuf(). Αν το συγκεκριµένο όνοµα δεν βρεθεί στον πίνακα, τότε ο ζητείται από το χρήστη να δηλώσει αν επιθυµεί να προστεθεί στους ήδη υπάρχοντες ή όχι. Αν ο χρήστης αρνηθεί τότε επιστρέφεται 0, δηλαδή η θέση του πρώτου τύπου στον πίνακα. Public Function FindFunctionTypeIndex(FunctionTypeName As String) As Integer FunctionTypeName (String) : Το όνοµα του Τύπου Επιστρέφει : Τη θέση του τύπου στον πίνακα FunctionTypesbuf(). Public Function FindActivityTypeIndex(ActivityTypeName As String) As Integer ActivityTypeName (String) : Το όνοµα του Τύπου Επιστρέφει : Τη θέση του τύπου στον πίνακα ActivityTypesbuf(). TypesSaveFunctions - (TypesSaveFunctions.bas) Περιέχει συναρτήσεις που αποθηκεύουν στη βάση τους τύπους εδοµένων, Activities και Συναρτήσεων. Public Sub SaveNewFunctionType(Ftype As FunctionTypeProperties) Ftype (FunctionTypeProperties) : Οι ιδιότητες του τύπου Συνάρτησης που πρέπει να σωθεί. Σώζει ένα νέο τύπο συνάρτησης στη βάση µε τη βοήθεια της SaveFunctionTypeParams(). Public Function UpdateFunctionType(Ftype As FunctionTypeProperties) As Boolean Ftype (FunctionTypeProperties) : Οι ιδιότητες του τύπου Συνάρτησης που πρέπει να ανανεωθεί. Ανανεώνει έναν τύπο συνάρτησης στη βάση µε τη βοήθεια της SaveFunctionTypeParams(). Public Sub DeleteFunctionType(Index As Integer) Index (Integer) : Η θέση του τύπου στον πίνακα FunctionTypesbuf. ιαγράφει έναν τύπο συνάρτησης από τη βάση. 76

89 Private Sub SaveFunctionTypeParams(Ftype As FunctionTypeProperties) Ftype (FunctionTypeProperties) : Οι ιδιότητες του τύπου Συνάρτησης που πρέπει να σωθεί Σώζει τις εισόδους και την έξοδο του τύπου στη βάση. Public Sub SaveNewActivityType(ActType As ActivityTypeProperties) ActType (ActivityTypeProperties) : Οι ιδιότητες του Activity τύπου που πρέπει να σωθεί. Σώζει ένα νέο Activity τύπο στη βάση µε τη βοήθεια της SaveActivityTypeParams(). Public Function UpdateActivityType(ActType As ActivityTypeProperties) As Boolean ActType (ActivityTypeProperties) : Οι ιδιότητες του Activity τύπου που πρέπει να ανανεωθεί. Ανανεώνει έναν τύπο Activity στη βάση µε τη βοήθεια της SaveActivityTypeParams(). Public Sub DeleteActivityType(Index As Integer) Index (Integer) : Η θέση του τύπου στον πίνακα ActivityTypesbuf. ιαγράφει έναν τύπο Activity από τη βάση. Public Sub SaveActivityTypeParams(ActType As ActivityTypeProperties) ActType (ActivityTypeProperties) : Οι ιδιότητες του τύπου Activity που πρέπει να σωθεί Σώζει τις εξόδους, τις παραµέτρους και τις συναρτήσεις του τύπου στη βάση. Public Function SaveNewDataType(DataTypeName As String) As Integer DataTypeName (String) : Το όνοµα του τύπου που θα σωθεί. Σώζει έναν τύπο εδοµένων στη βάση. Public Sub UpdateDataType(NewDataTypeName As String, Index As Integer) NewDataTypeName (String) : Το νέο όνοµα του τύπου. Index (Integer) : Η θέση του τύπου στον πίνακα DataTypesbuf(). Ανανεώνει έναν τύπο εδοµένων στη βάση. Public Sub DeleteDataType(Index As Integer) Index (Integer) : Η θέση του τύπου στον πίνακα DataTypesbuf(). ιαγράφει έναν τύπο εδοµένων από τη βάση. 77

90 Data Services Forms frmdblogin - (frmdblogin.frm) Η φόρµα στην οποία δίνονται τα στοιχεία για τη σύνδεση σε µία βάση. Private Functions-Subs: Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fdirection%, ByVal szdsn$, ByVal cbdsnmax%, pcbdsn%, ByVal szdescription$, ByVal cbdescriptionmax%, pcbdescription%) As Integer Επιστρέφει πληροφορίες σχετικά µε πηγή δεδοµένων ορισµένη στο λειτουργικό σύστηµα. Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&) Εντοπίζει τη µνήµη που αντιστοιχεί σε µία «λαβή» περιβάλλοντος. Private Sub cmdok_click() Καλεί την DoLogin και αν αυτή επιστρέψει True κλείνει τη φόρµα. ReposForm - (ReposForm.frm) Φόρµα επιλογής του Repository στο οποίο σώζονται τα σενάρια. Private Properties: ConnectionChecked(Boolean) : Ορίζει αν το εµφανιζόµενο Repository έχει ελεγχθεί ότι υπάρχει. TablesColl(Collection) : Συλλογή µε τα ονόµατα των πινάκων του Repository. Private Functions-Subs: Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fdirection%, ByVal szdsn$, ByVal cbdsnmax%, pcbdsn%, ByVal szdescription$, ByVal cbdescriptionmax%, pcbdescription%) As Integer Επιστρέφει πληροφορίες σχετικά µε πηγή δεδοµένων ορισµένη στο λειτουργικό σύστηµα. Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&) Εντοπίζει τη µνήµη που αντιστοιχεί σε µία «λαβή» περιβάλλοντος. Private Sub cmdok_click() Aν οι παράµετροι που έχουν δοθεί έχουν ελεγχθεί, γράφει στις Global µεταβλητές ConnectionString, UserName και Password τα αντίστοιχα Strings.Aν δεν έχει γίνει έλεγχος τον πραγµατοποιεί και αν επιτύχει προχωρά στο σώσιµο των δοσµένων στοιχείων. Private Sub TestConn_Click() 78

91 Καλεί την ConnectionSucess και θέτει την τιµή που επιστρέφει στην ConnectionChecked. Private Sub Form_Load() Κάνει τη φόρµα Always On Top, διαβάζει τα DSN του συστήµατος και τα φορτώνει στη λίστα, δηµιουργεί τη συλλογή TablesColl και εµφανίζει τις παραµέτρους του υπάρχοντος Repository. Private Sub TablesCollFill() Προσθέτει στη συλλογή TablesColl τα ονόµατα των πινάκων του Repository. Private Function TablesCollClone() As Collection Επιστρέφει µία συλλογή αντίγραφο της TablesColl. Private Function CheckTables(ADOConn As ADODB.Connection) As Boolean ADOConn (ADODB.Connection) : H σύνδεση µε το υπό εξέταση Repository. ιαβάζει τους πίνακες που αντιστοιχούν στο χρήστη που δόθηκε ελέγχει αν υπάρχουν όλοι οι πίνακες του Repository. Αν όχι ρωτάει το χρήστη αν επιθυµεί τη δηµιουργία τους και αν ο χρήστης απαντήσει θετικά τους δηµιουργεί καλώντας την CreateTables. Public Function: Public Function ConnectionSucess(Optional FirstTime As Boolean = False) As Boolean FirstTime (Boolean) : Ορίζει αν ο χρήστης θα δει µήνυµα λάθους αν η σύνδεση δεν πετύχει.true όταν καλείται από την MDIForm1.Initialize. ηµιουργεί µία σύνδεση προς τη βάση που ορίζεται από το δοσµένο DSN ως χρήστης UserName µε συνθηµατικό Password.Aν δεν πετύχει επιστρέφει False, αλλιώς καλεί την CheckTables() για να διαπιστώσει αν υπάρχουν οι απαραίτητοι πίνακες. Αν η τελευταία επιστρέψει True τότε και αυτή η συνάρτηση επιστρέφει True, αλλιώς επιστρέφει False. UserLogin - (UserLogin.frm) Φόρµα που ορίζει τον τρέχοντα χρήστη του εργαλείου. Private Subs: Private Sub Form_Load() Κάνει τη φόρµα Always On Top και διαβάζει και δείχνει τον τρέχοντα χρήστη και το τρέχον Repository. Private Sub Form_QueryUnload(Cancel As Integer) Αν η φόρµα κλείσει από το χρήστη τότε κλείνει όλο το πρόγραµµα. Private Sub Login_Click() Ελέγχει αν έχουν οριστεί χρήστης και Repository και βγάζει ανάλογο µήνυµα λάθους. 79

92 ViewScenarios - (ViewScenarios.frm) Φόρµα για τη διαχείριση σεναρίων. Ανάλογα µε την Show*Dialog() συνάρτηση που καλείται αποθηκεύει,φορτώνει και διαγράφει σενάρια από το repository. Private Subs: Private Sub LoadScenarios2List() ιαβάζει από τη βάση τα ονόµατα των σεναρίων που αντιστοιχούν στο χρήστη και τα δείχνει στο ScenarioView. Public Sub ShowSaveASDialog() Public Sub ShowLoadDialog() Public Sub ShowDeleteDialog() Εµφανίζουν τη φόρµα σε µορφή αποθήκευσης, φόρτωσης και διαγραφής, αντίστοιχα, σεναρίου Modules ScenarioLoadSave - (ScenarioLoadSave.bas) Περιέχει τις συναρτήσεις που φορτώνουν από τη Βάση ή αποθηκεύουν σε αυτή ένα σενάριο. Public Sub ScenarioLoad(ScenarioID As Integer) ScenarioID (Integer) : Ο αναγνωριστικός αριθµός του σεναρίου. Φορτώνει από τη Βάση τους κόµβους ενός σεναρίου και γεµίζει τις ιδιότητες τους χρησιµοποιώντας τις συναρτήσεις LoadActivity και LoadRecordSet. Public Sub LoadActivity(ActProps As ActivityProperties, ActiveFormNo As Integer) ActProps (ActivityProperties) : Το στιγµιότυπο της κλάσης στο οποίο θα φορτωθούν οι ιδιότητες. ActiveFormNo (Integer) : Η θέση της φόρµας σχεδιασµού του σεναρίου στον πίνακα DrawForms. ιαβάζει από τη Βάση τις ιδιότητες της Activity µε ID= ΑctProps.NodeID τις οποίες αντιγράφει στο ActProps. Public Sub LoadRecordSet(RecProps As RecordSetProperties, ActiveFormNo As Integer) RecProps (RecordSetProperties) : Το στιγµιότυπο της κλάσης στο οποίο θα φορτωθούν οι ιδιότητες. ActiveFormNo (Integer) : Η θέση της φόρµας σχεδιασµού του σεναρίου στον πίνακα DrawForms. 80

93 ιαβάζει από τη Βάση τις ιδιότητες του RecordSet µε ID= RecProps.NodeID τις οποίες αντιγράφει στο RecProps. Public Sub ScenarioDelete(ScenarioID As Integer, Optional DeleteName As Boolean = True) ScenarioID (Integer) : Ο αναγνωριστικός αριθµός του σεναρίου. Optional (As Boolean = True) : Ορίζει αν θα διαγραφεί και το όνοµα του σεναρίου. ιαγράφει από τη Βάση ένα σενάριο. Αν η µεταβλητή DeleteName είναι True διαγράφεται και το όνοµα και το ID του σεναρίου, αλλιώς αυτά παραµένουν Public Sub ScenarioDeleteRemoved(FormNo As Integer, ScenarioID As Integer, SQlCom As ADODB.Command) FormNo (Integer) : Η θέση της φόρµας σχεδιασµού του σεναρίου στον πίνακα DrawForms. ScenarioID (Integer) : Ο αναγνωριστικός αριθµός του σεναρίου. SQlCom (ADODB.Command) : Στιγµιότυπο της ADODB.Command µε τη σωστή σύνδεση στη Βάση. ιαγράφει όλους του κόµβους που περιέχονται στη συλλογή DeletedNodes της φόρµας του σεναρίου,δηλαδή όλους τους κοµβους του σεναρίου που έχουν σχεδιαστικά διαγραφεί. Public Sub ScenarioSave(FormNo As Integer, IgnoreSaved As Boolean) FormNo (Integer) : Η θέση της φόρµας σχεδιασµού του σεναρίου στον πίνακα DrawForms. IgnoreSaved (Boolean) : Ορίζει αν θα ληφθεί υπόψη αν έχουν ήδη σωθεί οι κόµβοι. Σώζει το σενάριο στη Βάση µε χρήση των INSERT_* συναρτήσεων. Αν η µεταβλητή IgnoreSaved είναι True οι κόµβοι σώζονται ως νέοι κόµβοι άσχετα µε το αν έχουν ήδη σωθεί (περίπτωση Save As) Metrics Forms MetricsForm - (MetricsForm.frm) Η φόρµα που εµφανίζει τις µετρήσεις σπουδαιότητας για ένα σενάριο. Private Properties: RecShown(Boolean) : Ορίζει αν εµφανίζονται οι µετρήσεις ενός RecordSet (µία λίστα παραµέτρων) ή µίας Activity (δύο λίστες παραµέτρων). ActiveFormNo(Integer) : Η ενεργή φόρµα παιδί της MDIForm1. 81

94 Private Subs: Private Sub Entities_Click() Καθαρίζει τις λίστες από τα προηγούµενα δεδοµένα τους και καλεί την CreateEntityMetrics για να κάνει τις µετρήσεις Public Sub RecordSetLayOut() Public Sub ActivityLayOut() Φέρνουν τη φόρµα σε µορφή µίας λίστας για επίδειξη των µετρήσεων ενός RecordSet και δύο λιστών για επίδειξη των µετρήσεων µίας Activity. Private Sub Form_Load() ηµιουργεί τη λίστα µε τις οντότητες του σεναρίου Modules MetricsFunctions - (MetricsFunctions.bas) Συναρτήσεις για την πραγµατοποίηση των µετρήσεων σπουδαιότητας. Private DepthLoop As Integer Μεταβλητή στην οποία κρατείται το βάθος αναζήτησης transitive σχέσεων. Public Sub CreateEntityMetrics(FormNo As Integer, LabelNo As Integer) FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος LabelNo (Integer) : Ο αριθµός-κλειδί του κόµβου στη συλλογή Labels. Αν ο κόµβος είναι Activity ή RecordSet καλούνται αντίστοιχα οι CreateRecordSetMetrics και CreateActivityMetrics και στη συνέχεια η CreateSumAvgMetrics. Public Sub CreateRecordSetMetrics(FormNo As Integer, tlabel As LabelsD) FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος tlabel (LabelsD) : Οι ιδιότητες του κόµβου. Για κάθε attribute του RecordSet καλεί την CreateAttributeMetrics Public Sub CreateActivityMetrics(FormNo As Integer, tlabel As LabelsD) FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος tlabel (LabelsD) : Οι ιδιότητες του κόµβου. Για κάθε attribute εισόδου-εξόδου του RecordSet καλεί την CreateAttributeMetrics Public Sub CreateAttributeMetrics(FormNo As Integer, AttrProps As AttributeProperties, NodeKind As NodeKinds) 82

95 FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος AttrProps (AttributeProperties) : Οι ιδιότητες του µετρούµενου attribute. NodeKind (NodeKinds) : H «θέση» του µετρούµενου attribute,συγκεκριµένα είσοδος Activity, έξοδος Activity ή µέλος RecordSet. Υπολογίζει τα metrics του attribute χρησιµοποιώντας τις αναδροµικές CalculateTransIn και CalculateTransOut για τον υπολογισµό των transitive metrics και βάζει τις τιµές τους στα ListView ελεγκτήρια της MetricsForm. Public Function CalculateTransIn(FormNo As Integer, AttrProps As AttributeProperties, NodeKind As NodeKinds) As Collection FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος AttrProps (AttributeProperties) : Οι ιδιότητες του µετρούµενου attribute. NodeKind (NodeKinds) : H «θέση» του µετρούµενου attribute,συγκεκριµένα είσοδος Activity, έξοδος Activity ή µέλος RecordSet. Αναδροµική συνάρτηση που υπολογίζει τις transitive σχέσεις εισόδου και από αυτές το transitive-in ενός attribute. Public Function CalculateTransOut(FormNo As Integer, AttrProps As AttributeProperties, NodeKind As NodeKinds) As Collection FormNo (Integer) : Η φόρµα στην οποία βρίσκεται ο µετρούµενος κόµβος AttrProps (AttributeProperties) : Οι ιδιότητες του µετρούµενου attribute. NodeKind (NodeKinds) : H «θέση» του µετρούµενου attribute,συγκεκριµένα είσοδος Activity, έξοδος Activity ή µέλος RecordSet. Αναδροµική συνάρτηση που υπολογίζει τις transitive σχέσεις εξόδου και από αυτές το transitive-out ενός attribute. Public Sub CreateSumAvgMetrics() Υπολογίζει το άθροισµα και το µέσο όρο των υπολοίπων τιµών που υπάρχουν στην MetricsForm και βάζει τα αποτελέσµατα στις κατάλληλες λίστες Properties Class Modules AttributeProperties - (AttributeProperties.cls) Αντιπροσωπεύει τις ιδιότητες ενός attribute. Public Properties: Attribute_Name(String): Το όνοµα του attribute. Attribute_type(Integer):H θέση του τύπου δεδοµένων του στον πίνακα DataTypesbuf. 83

96 ProviderFor(ProviderFor): H συλλογή των Provider σχέσεων µε τους στόχους του. ProvidedFrom(ProvidedFrom): H συλλογή των Provider σχέσεων µε τις πηγές του. RegulatorFor(RegulatorFor): H συλλογή των Regulator σχέσεων µε τις παραµέτρους που ρυθµίζει. RegulatedFrom(RegulatedFrom):H συλλογή των Regulator σχέσεων µε τις παραµέτρους που ρυθµίζουν. Key(String) : Το κλειδί του. LabelIndex(Integer) : Ο αριθµός-κλειδί του αντίστοιχου κόµβου του attribute ParentKeyName (String) : Το όνοµα της Activity ή του RecordSet στο οποίο ανήκει το attribute. Tag(Integer) : Η Tag property του αντίστοιχου στοιχείου λίστας του attribute. είχνει τον τρόπο µε τον οποίο δηµιουργήθηκε το attribute για attributes µέλη κάποιας Activity.Παίρνει τιµές από το enumeration NodeSource. NodeKind(Integer) : Το είδος του attribute (π.χ. είσοδος της Activity). Παίρνει τιµές από το enumeration NodeKind. SubNode_ID(Integer) : Το ID του attribute στη βάση. Changed(Boolean) : είχνει αν τα στοιχεία του έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. ParameterProperties - (ParameterProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας παραµέτρου. Public Properties: Parameter_Name(As String) : Το όνοµα της παραµέτρου. Parameter_Type(Integer):H θέση του τύπου δεδοµένων του στον πίνακα DataTypesbuf. RegulatorFor(RegulatorFor) : H συλλογή των Regulator σχέσεων µε τα attributes που ρυθµίζει. RegulatedFrom(RegulatedFrom) : H συλλογή των Regulator σχέσεων µε τα attributes που το ρυθµίζουν. Key(String) : Το κλειδί της παραµέτρου. LabelIndex(Integer) : Ο αριθµός-κλειδί του αντίστοιχου κόµβου της παραµέτρου. ParentKeyName(String) : Το όνοµα της Activity στην οποία ανήκει η παράµετρος. Tag(Integer) : Η Tag property του αντίστοιχου στοιχείου λίστας της παραµέτρου. είχνει τον τρόπο µε τον οποίο δηµιουργήθηκε η παράµετρος, για παραµέτρους µέλη κάποιας Activity.Παίρνει τιµές από το enumeration NodeSource. 84

97 NodeKind(Integer) Το είδος της παραµέτρου (π.χ. είσοδος συνάρτησης). Παίρνει τιµές από το enumeration NodeKind. ParentFunctionActivity(String) : Χρησιµοποιείται µόνο για παραµέτρους µέλη συναρτήσεων. Είναι το όνοµα της Activity στην οποία ανήκει η συνάρτηση. SubNode_ID(Integer) : Το ID της παραµέτρου στη βάση. Changed(Boolean) : είχνει αν τα στοιχεία της παραµέτρου έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. RecordSetProperties - (RecordSetProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας Activity Public Properties: RecordSet_Name(String) : Το όνοµα του RecordSet. RecordSet_SQL(String) : H SQL πρόταση του RecordSet RecordSet_Outputs(RecordSet_Outputs) : Τα attributes του RecordSet DB2Key(Collection) : Συλλογή που κρατά την αντιστοιχία των κλειδιών των attributes του RecordSet µε τα πεδία στη Βάση από τα οποία παίρνουν τα δεδοµένα τους. ZoomPosition(Integer) : Η θέση του RecordSet στη φόρµα-zoom.παίρνει τιµές από το enumeration ZoomPositions zpinput αν είναι πηγή και zpoutput αν είναι στόχος της Activity στην οποία γίνεται το Zoom. NodeID(Integer) : Το ID του RecordSet στη Βάση Changed(Boolean) : είχνει αν τα στοιχεία του RecordSet έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. Public Functions: Public Function RenameRecordSetOutPut(OldName As String, NewName As String, ParForm As Form) As Boolean OldName (String) : Το προηγούµενο κλειδί του attribute. NewName (String) : To νέο κλειδί του attribute. ParForm (Form) : Η φόρµα στην οποία βρίσκεται το RecordSet. Αλλάζει το κλειδί του attribute στη συλλογή RecordSet_Outputs και στη συλλογή DB2Key RecordSet_Outputs - (RecordSet_Outputs.cls) Συλλογή από AttributeProperties αντικείµενα. Αντιπροσωπεύει τα attributes ενός RecordSet. ActivityProperties - (ActivityProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας Activity 85

98 Public Properties: Act_Name(String) : Το όνοµα της Activity Act_Type(Integer) :H θέση του τύπου της στον πίνακα ActivityTypesbuf(). Act_Description(String) : Η περιγραφή της. Act_Log(String) : Το όνοµα του Log αρχείου της. Act_SQL (String) : Η ισοδύναµη SQL πρόταση της. Act_Functions(Act_Functions) : Η συλλογή των συναρτήσεων της. Act_Inputs(Act_Inputs) : Η συλλογή των εισόδων της. Act_Outputs(Act_Outputs) : Η συλλογή των εξόδων της. Act_Parameters(Act_Parameters) : Η συλλογή των παραµέτρων της. ZoomPosition(Integer) : Η θέση της στη φόρµα-zoom.παίρνει τιµές από το enumeration ZoomPositions zpcentral αν είναι η Activity στην οποία γίνεται το Zoom, zpinput αν είναι πηγή και zpoutput αν είναι στόχος της Activity στην οποία γίνεται το Zoom. NodeID(Integer) : Το ID της στη Βάση Changed(Boolean) : είχνει αν τα στοιχεία της έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. Act_Functions - (Act_Functions.cls) Συλλογή αντικειµένων FunctionProperties. Ανήκει στις ιδιότητες µίας Activity και αντιπροσωπεύει τις ιδιότητες των συναρτήσεών της. Public Property: Expanded(Boolean) : είχνει αν οι συναρτήσεις της Activity είναι Expanded. Public Functions: Public Function AddFunctionProps(FunProps As FunctionProperties, Optional Function_Key As String, Optional Index As Integer = -1) As FunctionProperties FunProps (FunctionProperties) : Οι ιδιότητες της συνάρτησης που προστίθενται. Function_Key ( String) : To κλειδί της συνάρτησης στη συλλογή. Index (Integer) : Η θέση στην οποία θα προστεθεί το FunProps. Προσθέτει στη συλλογή το αντικείµενο FunProps.Aν δίνεται Function_Key τότε αυτό είναι το κλειδί στη συλλογή αλλιώς χρησιµοποιείται το FunProps.Function_Key.Αν το Index είναι µεγαλύτερο του 0 εισάγεται στη θέση Index, αλλιώς στο τέλος της συλλογής. 86

99 Public Function AddActivityTypeFunction(TypeFunctionProps As UsedFunctionProperties, ParentKeyName As String, Optional skey As String) As FunctionProperties TypeFunctionProps (UsedFunctionProperties) : Ο τύπος της συνάρτησης. ParentKeyName (String) : Το όνοµα της Activity στην οποία ανήκει η συλλογή. skey (String) : To κλειδί της συνάρτησης στη συλλογή. Προσθέτει στη συλλογή της ιδιότητες µίας συνάρτησης όπως αυτές ορίζονται από τον τύπο της. Επιστρέφει τις ιδιότητες που προστέθηκαν. Public Function AddFunction(FunctionContainer As Form, FunctionName As String, Optional ParentKeyName As String, Optional Source As Integer = nsfunctionview) As FunctionProperties FunctionContainer (Form) : Η φόρµα στην οποία βρίσκεται ο κόµβος-συνάρτηση. FunctionName (String) : Το όνοµα της συνάρτησης ParentKeyName (String) : Το όνοµα της Activity στην οποία ανήκει η συλλογή. Source (Integer ) : Η προέλευση της συνάρτησης που προστίθεται. Προστίθενται στη συλλογή οι ιδιότητες του κόµβου-συνάρτηση µε όνοµα FunctionName, υπό το κλειδί FunctionName.Το source δείχνει αν η συνάρτηση έχει σχεδιαστεί από το χρήστη ή είναι µέρος του τύπου της Activity. Επιστρέφει το αντικείµενο που προστέθηκε. Public Sub Remove(vntIndexKey As Variant) vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index της συνάρτησης. Αφαιρεί µία συνάρτηση από τη συλλογή και αν είναι συνάρτηση σχεδιασµένη από το χρήστη διαγράφει την Part-Of ακµή µεταξύ του κόµβου της συνάρτησης και του κόµβου της Activity. Act_Inputs - (Act_Inputs.cls) Συλλογή αντικειµένων AttributeProperties. Ανήκει στις ιδιότητες µίας Activity και αντιπροσωπεύει τις ιδιότητες των εισόδων της. Public Properties: Expanded(Boolean) : είχνει αν οι είσοδοι της Activity είναι Expanded. Changed(Boolean) : είχνει αν τα περιεχόµενά της έχουν αλλάξει από την τελευταία φορά που σώθηκαν στη Βάση. Act_Outputs - (Act_Outputs.cls) Συλλογή αντικειµένων AttributeProperties. Ανήκει στις ιδιότητες µίας Activity και 87

100 88 αντιπροσωπεύει τις ιδιότητες των εξόδων της. Public Property: Expanded(Boolean) : είχνει αν οι έξοδοι της Activity είναι Expanded. Act_Parameters - (Act_Parameters.cls) Συλλογή αντικειµένων ParameterProperties. Ανήκει στις ιδιότητες µίας Activity και αντιπροσωπεύει τις ιδιότητες των παραµέτρων της της. Public Property: Expanded(Boolean) : είχνει αν οι παράµετροι της Activity είναι Expanded. FunctionProperties - (FunctionProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας συνάρτησης. Public Properties: Function_Name (String) : Το όνοµα της συνάρτησης. Function_Type(Integer) :H θέση του τύπου συναρτήσεων της στον πίνακα FuncitonTypesbuf. Function_Source(Integer) : είχνει τον τρόπο µε τον οποίο δηµιουργήθηκε η συνάρτηση, για συναρτήσεις µέλη κάποιας Activity. Παίρνει τιµές από το enumeration NodeSource, και συγκεκριµένα nsfunctionview για συναρτήσεις που δηµιουργήθηκαν από το χρήστη και nstypefunctionderived για συναρτήσεις που προέρχονται από τον τύπο της Activity. ParentKeyName(String) : Το όνοµα της Activity στην οποία ανήκει. Function_Inputs(Function_Inputs) : Οι είσοδοι της συνάρτησης. Function_Outputs(Function_Outputs) : Η έξοδος της συνάρτησης. Function_Key(String) : Το κλειδί της συνάρτησης. NodeKind(Integer) : Χρησιµοποιείται στον κώδικα για να δείξει ότι πρόκειται για ένα κόµβο συνάρτησης. Έχει πάντα τιµή nkfun από το enumeration NodeKind. FunctionID(Integer) : Το ID της συνάρτησης στη Βάση. Changed(Boolean) : είχνει αν τα στοιχεία της συνάρτησης έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. Function_Inputs - (Function_Inputs.cls) Συλλογή αντικειµένων ParameterProperties. Αντιπροσωπεύει τα ορίσµατα µίας συνάρτησης. Function_Outputs - (Function_Outputs.cls) Συλλογή αντικειµένων ParameterProperties. Αντιπροσωπεύει την έξοδο µίας συνάρτησης.

101 CommentProperties - (CommentProperties.cls) Αντιπροσωπεύει τις ιδιότητες ενός σχολίου. Public Properties: NodeID(Integer) : Το ID του σχολίου στη Βάση. Changed(Boolean) : είχνει αν τα στοιχεία του έχουν αλλάξει από το τελευταίο σώσιµο στη Βάση. Comment(String) : Το κείµενο του σχολίου. ProvidedFrom - (ProvidedFrom.cls) Συλλογή Provider αντικειµένων. Αντιπροσωπεύει το σύνολο των Provider σχέσεων ενός attribute µε τις πηγές του. Public Functions: Public Function Add(Provider_Name As String, Provider_Type As Integer, Optional skey As String, Optional LineNo As Integer) As ProviderProperties Provider_Name (String) : Το όνοµα της οντότητας-πηγής (Activity ή RecordSet). Provider_Type (Integer) : Το είδος της σχέσης. skey (String) : Το κλειδί της σχέσης. LineNo (Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. Προσθέτει στη συλλογή τη νέα σχέση και αν επιτύχει η πρόσθεση επιστρέφει τις ιδιότητες της σχέσης αλλιώς επιστρέφει τις ιδιότητες της σχέσης µε το συγκεκριµένο κλειδί που υπάρχει ήδη στη συλλογή. Public Property Get Item(vntIndexKey As Variant) As ProviderProperties vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Επιστρέφει τις ιδιότητες της Provider σχέσης που υπάρχει στη συλλογή µε κλειδί ή θέση vntindexkey ή Nothing αν δεν βρεθεί τέτοια. Public Function Remove(vntIndexKey As Variant) As Boolean vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Αφαιρεί τις ιδιότητες της Provider σχέσης µε κλειδί ή θέση vntindexkey. Αν επιτύχει η αφαίρεση επιστρέφει True αλλιώς επιστρέφει False. ProviderFor - (ProviderFor.cls) Συλλογή Provider αντικειµένων. Αντιπροσωπεύει το σύνολο των Provider σχέσεων ενός attribute µε τους στόχους του. Public Functions: Public Function Add(Provided_Name As String, Provided_Type As 89

102 Integer, Optional skey As String, Optional LineNo As Integer) As ProviderProperties Provided_Name (String) : Το όνοµα της οντότητας-στόχου (Activity ή RecordSet). Provided_Type (Integer) : Το είδος της σχέσης. skey (String) : Το κλειδί της σχέσης. LineNo (Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. Προσθέτει στη συλλογή τη νέα σχέση και αν επιτύχει η πρόσθεση επιστρέφει τις ιδιότητες της σχέσης αλλιώς επιστρέφει τις ιδιότητες της σχέσης µε το συγκεκριµένο κλειδί που υπάρχει ήδη στη συλλογή. Public Property Get Item(vntIndexKey As Variant) As ProviderProperties vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Επιστρέφει τις ιδιότητες της Provider σχέσης που υπάρχει στη συλλογή µε κλειδί ή θέση vntindexkey ή Nothing αν δεν βρεθεί τέτοια. Public Function Remove(vntIndexKey As Variant) As Boolean vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Αφαιρεί τις ιδιότητες της Provider σχέσης µε κλειδί ή θέση vntindexkey. Αν επιτύχει η αφαίρεση επιστρέφει True αλλιώς επιστρέφει False. ProviderProperties - (ProviderProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας Provider σχέσης από την πλευρά του ενός από τα δύο εµπλεκόµενα attributes. Public Properties: Provider_Name(String) : Το όνοµα της οντότητας πηγής-στόχου (Activity ή RecordSet). Provider_Type(Integer) : Το είδος της σχέσης (π.χ. από είσοδο σε έξοδο Activity). Παίρνει τιµές από το enumeration NodeSource. Provider_Key(String) : Ένα κλειδί που δείχνει το attribute παράγει-δέχεται δεδοµένα. LineIndex(Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. RegulatedFrom - (RegulatedFrom.cls) Συλλογή Regulator αντικειµένων. Αντιπροσωπεύει το σύνολο των Regulator σχέσεων µίας παραµέτρου µε τα attributes που της παρέχουν δεδοµένα. ή ενός attribute εξόδου µίας Activity µε τις παραµέτρους που το ρυθµίζουν. Public Functions: Public Function Add(Regulator_name As String, Regulator_type As Integer, Optional skey As String, Optional LineNo As Integer) As 90

103 RegulatorProperties Regulator_name (String) : Το όνοµα της οντότητας-πηγής (Activity ή RecordSet). Regulator_type (Integer) : Το είδος της σχέσης. skey (String) : Το κλειδί της σχέσης. LineNo (Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. Προσθέτει στη συλλογή τη νέα σχέση και αν επιτύχει η πρόσθεση επιστρέφει τις ιδιότητες της σχέσης αλλιώς επιστρέφει τις ιδιότητες της σχέσης µε το συγκεκριµένο κλειδί που υπάρχει ήδη στη συλλογή. Public Property Get Item(vntIndexKey As Variant) As RegulatorProperties vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Επιστρέφει τις ιδιότητες της Regulator σχέσης που υπάρχει στη συλλογή µε κλειδί ή θέση vntindexkey ή Nothing αν δεν βρεθεί τέτοια. Public Function Remove(vntIndexKey As Variant) As Boolean vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Αφαιρεί τις ιδιότητες της Regulator σχέσης µε κλειδί ή θέση vntindexkey. Αν επιτύχει η αφαίρεση επιστρέφει True αλλιώς επιστρέφει False. RegulatorFor - (RegulatorFor.cls) Συλλογή Regulator αντικειµένων. Αντιπροσωπεύει το σύνολο των Regulator σχέσεων µίας παραµέτρου µε τα attributes που ρυθµίζει ή ενός attribute µε τις παραµέτρους στις οποίες παρέχει δεδοµένα.. Public Functions: Public Function Add(Regulator_name As String, Regulator_type As Integer, Optional skey As String, Optional LineNo As Integer) As RegulatorProperties Regulator_name (String) : Το όνοµα της οντότητας-στόχου (Activity ή RecordSet). Regulator_type (Integer) : Το είδος της σχέσης. skey (String) : Το κλειδί της σχέσης. LineNo (Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. Προσθέτει στη συλλογή τη νέα σχέση και αν επιτύχει η πρόσθεση επιστρέφει τις ιδιότητες της σχέσης αλλιώς επιστρέφει τις ιδιότητες της σχέσης µε το συγκεκριµένο κλειδί που υπάρχει ήδη στη συλλογή. Public Property Get Item(vntIndexKey As Variant) As RegulatorProperties 91

104 vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Επιστρέφει τις ιδιότητες της Regulator σχέσης που υπάρχει στη συλλογή µε κλειδί ή θέση vntindexkey ή Nothing αν δεν βρεθεί τέτοια. Public Function Remove(vntIndexKey As Variant) As Boolean vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index στη συλλογή. Αφαιρεί τις ιδιότητες της Regulator σχέσης µε κλειδί ή θέση vntindexkey. Αν επιτύχει η αφαίρεση επιστρέφει True αλλιώς επιστρέφει False. RegulatorProperties - (RegulatorProperties.cls) Αντιπροσωπεύει τις ιδιότητες µίας Regulator σχέσης από την πλευρά του ενός από τα δύο εµπλεκόµενα attributes ή παραµέτρους. Public Properties: Regulator_name (String):Το όνοµα της οντότητας πηγής-στόχου(activity ή RecordSet) Regulator_type(Integer) Το είδος της σχέσης (π.χ. από είσοδο σε παράµετρο Activity). Παίρνει τιµές από το enumeration NodeSource. Regulator_Key(String) : Ένα κλειδί που δείχνει το attribute ή την παράµετρο που παράγει-δέχεται δεδοµένα. LineIndex(Integer) : Το κλειδί της ακµής που απεικονίζει τη σχέση. Παρακάτω περιγράφονται ορισµένες συναρτήσεις που χρησιµοποιούνται σε περισσότερες από µία κλάσεις. Key2Index : Χρησιµοποιείται στις κλάσεις Act_Functions, Act_Inputs, Act_Outputs, Act_Parameters. Public Function Key2Index(Key As String) As Integer Key (String) : To κλειδί ενός αντικειµένου στη συλλογή.. Επιστρέφει τη θέση του αντικειµένου στη συλλογή. Remove : Χρησιµοποιείται στις κλάσεις Act_Inputs, Act_Outputs, Act_Parameters, RecordSet_Outputs. Public Function Remove(vntIndexKey As Variant) As AttributeProperties vntindexkey(variant):aν είναι String το κλειδί,αν είναι Integer το Index του attribute. Αφαιρεί το αντικείµενο που ορίζεται από το vntindexkey και το επιστρέφει. Αν δεν υπάρχει τέτοιο αντικείµενο επιστρέφει Nothing. AddFullAttribute : Χρησιµοποιείται στις κλάσεις Act_Inputs, Act_Outputs. 92

105 Public Function AddFullAttribute(AttrProps As AttributeProperties, Optional Newkey As String, Optional Reversed As Boolean = False, Optional Index As Integer = -1) As AttributeProperties AddFullParameter : Χρησιµοποιείται στις κλάσεις Act_Parameters, Function_Inputs, Function_Outputs. Public Function AddFullParameter(ParamProps As ParameterProperties, Optional Newkey As String, Optional Reversed As Boolean = False, Optional Index As Integer = -1) As ParameterProperties AttrProps/ParamProps (AttributeProperties/ParameterProperties) : Οι ιδιότητες του Attribute/παραµέτρου. NewKey (String) : To νεό κλειδί Reversed (Boolean) : Ορίζει αν το AttrProps/ ParamProps θα προστεθεί στην αρχή της συλλογής. Index (Integer) : Η θέση στην οποία προστίθεται το αντικείµενο. Προστίθεται το AttrProps/ParamProps στη συλλογή. Αν δίνεται NewKey τότε αυτό χρησιµοποιείται σαν κλειδί αλλιώς κλειδί είναι το ΑttrProps.Key/ParamProps.Key. Aν το Reversed είναι True τότε το αντικείµενο προστίθεται στην αρχή της συλλογής και το Index αγνοείται, αλλιώς αν το Index είναι µεγαλύτερο του 0 µπαίνει στη θέση Index,αλλιώς προστίθεται στο τέλος της συλλογής. Clone : Χρησιµοποιείται στις κλάσεις ActivtiyProperties, AttributeProperties, ParameterProperties, RecordSetProperties. Public Function Clone() As ActivityProperties ηµιουργεί ένα νέο αντικείµενο πανοµοιότυπο µε το αυτό στο οποίο ανήκει Forms AttributeProp - (AttributeProp.frm) & ParameterProp - (ParameterProp.frm) Φόρµες για αλλαγή του ονόµατος ενός attribute/µίας παραµέτρου. Private Subs: Private Sub Cancel_Click() Κλείνει την φόρµα χωρίς να κρατηθούν οι αλλαγές. Private Sub Form_Load() Κάνει τη φόρµα Always On Top,απενεργοποιεί την κεντρική φόρµα, διαβάζει τις ιδιότητες το όνοµα και τον τύπο του attribute/της παραµέτρου και τα εµφανίζει στη φόρµα. Private Sub Form_Unload(Cancel As Integer) Ενεργοποιεί την κεντρική φόρµα. 93

106 Private Sub OK_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω αλλάζει το όνοµα στις ιδιότητες του attribute/της παραµέτρου. ConstantProp - (ConstantProp.frm) Φόρµα για αλλαγή του τύπου δεδοµένων και του ονόµατος µίας σταθεράς. Private Subs: Private Sub Cancel_Click() Κλείνει την φόρµα χωρίς να κρατηθούν οι αλλαγές. Private Sub Form_Load() Κάνει τη φόρµα Always On Top και απενεργοποιεί την κεντρική φόρµα. Αν η σταθερά δεν είναι συνδεδεµένη µε κάποια παράµετρο εµφανίζει σε µία λίστα όλους τους τύπους δεδοµένων που υπάρχουν στη βάση αλλιώς εµφανίζει τον τύπο της σταθεράς χωρίς να υπάρχει δυνατότητα αλλαγής του. Επίσης εµφανίζεται το όνοµα της σταθεράς. Private Sub Form_Unload(Cancel As Integer) Ενεργοποιεί την κεντρική φόρµα. Private Sub OK_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχει δοθεί κάποιος τύπος στην περίπτωση που αυτό είναι δυνατό και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω αλλάζει το όνοµα και αν χρειάζεται και τον τύπο στις ιδιότητες της σταθεράς. FunctionProp - (FunctionProp.frm) Φόρµα για αλλαγή του τύπου και του ονόµατος µίας συνάρτησης. Private Subs: Private Sub Cancel_Click() Κλείνει την φόρµα χωρίς να κρατηθούν οι αλλαγές. Private Sub Form_Load() Κάνει τη φόρµα Always On Top και απενεργοποιεί την κεντρική φόρµα. Αν η συνάρτηση δεν είναι συνδεδεµένη µε κάποια παράµετρο εµφανίζει σε µία λίστα όλους τους τύπους συναρτήσεων που υπάρχουν στη βάση αλλιώς εµφανίζει τον τύπο της συνάρτησης χωρίς να υπάρχει δυνατότητα αλλαγής του. Επίσης εµφανίζεται το όνοµα της συνάρτησης. Private Sub Form_Unload(Cancel As Integer) Ενεργοποιεί την κεντρική φόρµα. Private Sub OK_Click() 94

107 Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχει δοθεί κάποιος τύπος στην περίπτωση που αυτό είναι δυνατό και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω αλλάζει το όνοµα και αν χρειάζεται και τον τύπο στις ιδιότητες της συνάρτησης. RecordSetProp - (RecordSetProp.frm) Η φόρµα στην οποία ορίζονται οι ιδιότητες ενός RecordSet. Public Properties: DBLoaded(Boolean): Ορίζει αν υπάρχει ήδη κάποιο σχήµα βάσης φορτωµένο στο DBView. ConnectionString(String) : Το DSN της βάσης το σχήµα της οποίας θα φορτωθεί στο DBView. UserName(String) :Το όνοµα του χρήστη για τη σύνδεση στη βάση. Password(String) :Το συνθηµατικό του χρήστη για τη σύνδεση στη βάση. ParForm(Form) :Η φόρµα στην οποία βρίσκεται ο κόµβος του RecordSet. NodeNo(Integer) :Το κλειδί του κόµβου του RecordSet. tempprop(recordsetproperties) :Σε αυτό αντιγράφονται οι ιδιότητες του RecordSet και εδώ γίνονται οι αλλαγές µέχρι να σωθούν στο Properties του αντίστοιχου κόµβου. RenamedItems(Collection) : Συλλογή στην οποία κρατούνται τα attributes που άλλαξαν όνοµα. Private Subs: Private Sub ListItemCutFullNamesM_Click() Κρατά από τα ονόµατα των attributes µόνο το τµήµα µετά την τελεία, αν αυτή υπάρχει. Private Sub ListItemRestoreFullNamesM_Click() Μετατρέπει τα ονόµατα όλων των attributes στη µορφή Βάση.Πίνακας.Πεδίο µε βάση την προέλευσή τους. Private Sub OK_Click() Ελέγχει αν το δοσµένο όνοµα είναι κενό ή περιέχει τελεία και αν έχουν οριστεί κάποια attributes για το RecordSet και δείχνει το ανάλογο µήνυµα λάθους στο χρήστη. Αν δεν συµβαίνει κανένα από τα παραπάνω αντιγράφει τις ορισµένες ιδιότητες στις ιδιότητες του RecordSet. Private Sub Cancel_Click() Κλείνει τη φόρµα χωρίς να σώσει τις ιδιότητες του RecordSet. Private Sub DBView_NodeClick(ByVal Node As MSComctlLib.Node) Node (MSComctlLib.Node) : O κόµβος στον οποίο έγινε κλικ. 95

108 Καλεί την HandleNodeClick ώστε να προστεθεί ή να αφαιρεθεί ένα attribute από τη λίστα. Private Sub Move2Tree_Click() Καλεί την RemFromList ώστε να αφαιρεθεί το επιλεγµένο attribute από τη λίστα. Private Sub MoveAll2Tree_Click() Καλεί την RemAllFromList ώστε να αφαιρεθούν όλα τα attributes από τη λίστα. SetActProp - (SetActProp.frm) Η φόρµα στην οποία ορίζονται οι ιδιότητες µίας Activity. Public Properties: TempProp(ActivityProperties) : :Σε αυτό αντιγράφονται οι ιδιότητες της Activity και εδώ γίνονται οι αλλαγές µέχρι να σωθούν στο Properties του αντίστοιχου κόµβου. ScenarioName(String) :Το όνοµα του σεναρίου στο οποίο ανήκει η Activity. ParForm(Form) :Η φόρµα στην οποία βρίσκεται ο κόµβος της Activity. NodeNo(Integer) :Το κλειδί του κόµβου της Activity. Private Subs: Private Sub ActView_DragOver(Source As Control, x As Single, y As Single, State As Integer) Θέτει ως επιλεγµένη λίστα αυτή στην οποία επιτρέπεται να προστεθεί το ανάλογο attribute ή η ανάλογη παράµετρος. Private Sub ActView_NodeClick(ByVal Node As MSComctlLib.Node) Private Sub DBView_NodeClick(ByVal Node As MSComctlLib.Node) Θέτει ως επιλεγµένη λίστα αυτή στην οποία επιτρέπεται να προστεθεί το ανάλογο attribute ή η ανάλογη παράµετρος και καλεί την HandleNodeClick να πραγµατοποιηθεί η πρόσθεση. Private Sub AttList_DragDrop(Index As Integer, Source As Control, x As Single, y As Single) Καλεί την HandleNodeClick ώστε να προστεθεί ή να αφαιρεθεί ένα attribute, µία παράµετρος ή µία συνάρτηση από την αντίστοιχη λίστα. Private Sub Form_Load() Κάνει τις απαραίτητες αρχικοποιήσεις τις φόρµας. Private Sub Form_Unload(Cancel As Integer) Εµφανίζει στο χρήστη µήνυµα αν θέλει να σώσει τις αλλαγές και αν ο χρήστης απαντήσει ναι τις σώζει. Καλεί την SynchronizeActivity για να ενηµερώσει τους υπόλοιπους 96

109 κόµβους για τυχόν αλλαγές και αν ο κόµβος της Activity βρίσκεται στη φόρµα-zoom τότε εµφανίζει στη φόρµα τα συστατικά του ανάλογα µε τη θέση του. Private Sub Apply_Click() Ελέγχει αν έχει οριστεί όνοµα και τύπος για την Activity και αν ικανοποιούνται αυτά αντιγράφει τις ιδιότητες στον κόµβο. Private Sub ActTypes_Click() Ελέγχει αν έχει οριστεί το όνοµα της Activity και καλεί την SetAccordingToDataType για να ενηµερώσει τα συστατικά της για την αλλαγή τύπου. Private Sub txtname_lostfocus() Ελέγχει αν το όνοµα που δόθηκε περιέχει τελεία και αν είναι µοναδικό στο σενάριο ενηµερώνει τα συστατικά της Activity για την αλλαγή του ονόµατος µε κλήση της ApplyActivityRename. Private Sub Move2Tree_Click() Καλεί την RemFromList ώστε να αφαιρεθεί το επιλεγµένο στοιχείο από τη λίστα. Private Sub MoveAll2Tree_Click() Καλεί την RemAllFromList ώστε να αφαιρεθούν όλα τα στοιχεία της λίστας Modules SQL_KeywordChecker - (SQL_KeywordChecker.bas) Περιέχει συναρτήσεις για την εύρεση και τον χρωµατισµό των λέξεων-κλειδιών σε µία SQL πρόταση. Dim KeyWords As Collection Συλλογή στην οποία εισάγονται οι λέξεις-κλειδιά. Public Sub CheckChange(KeyCode As Integer, ByVal CurPlace As Long, SQLText As RichTextBox) KeyCode (Integer) : Ο ASCII κωδικός του πλήκτρου που πατήθηκε. CurPlace (As Long) : H θέση του κέρσορα στο RichTextBox SQLText (RichTextBox) : To υπό επεξεργασία RichTextBox Ελέγχει αν το Keycode είναι κωδικός που σηµαίνει ότι τελείωσε µία λέξη στη συνέχεια αν η λέξη αυτή ανήκει στις λέξεις-κλειδιά και αν ναι την µετατρέπει σε κεφαλαία και την χρωµατίζει µπλε. Public Sub HighLightText(SQLText As RichTextBox) SQLText (RichTextBox) : To υπό επεξεργασία RichTextBox Ελέγχει το SQLText για λέξεις-κλειδιά και τις µετατρέπει σε κεφαλαία και µπλε 97

110 χρώµατος. TreeView_Moving - (TreeView_Moving.bas) Περιέχονται συναρτήσεις υπεύθυνες για την προσθήκη ενός κόµβου του δέντρου των φορµών SetActProp και RecordSetprop σε µία από τις λίστες τους και την κίνηση των στοιχείων µέσα στις λίστες.. Public Sub Node2List(Node As MSComctlLib.Node, ParForm As Form) Node (MSComctlLib.Node) : O επιλεγµένος κόµβος ParForm (Form) : Η φόρµα στην οποία βρίσκεται το TreeView (SetActProp ή RecordSetProp) Βρίσκει την θέση στην οποία θα µπει το νέο στοιχείο της λίστας (µετά το επιλεγµένο) και καλεί την κατάλληλή συνάρτηση ανάλογα µε την τρέχουσα φόρµα ParForm. Public Sub MoveTop(ParForm As Form, SelectedList As Integer) Public Sub MoveUP(ParForm As Form, SelectedList As Integer) Public Sub MoveDown(ParForm As Form, SelectedList As Integer) Public Sub MoveBottom(ParForm As Form, SelectedList As Integer) ParForm (Form) : Η Τρέχουσα φόρµα (SetActProp ή RecordSetProp). SelectedList (Integer) : Το Index της λίστας. Οι παραπάνω συναρτήσεις µετακινούν ένα στοιχείο της λίστας σε µία νέα θέση, µετακινώντας επίσης το αντίστοιχο attribute ή την αντίστοιχη παράµετρο στην ίδια νέα θέση µέσα στη συλλογή στην οποία ανήκει(act_inputs, Act_Parameters, Act_Outputs,RecordSet_OutPuts). Public Sub FixFirstTime(ParForm As Form, SelectedList As Integer) ParForm (Form) : Η Τρέχουσα φόρµα (SetActProp ή RecordSetProp). SelectedList (Integer) : Το Index της λίστας. Την πρώτη φορά που καλείται καθαρίζει τη λίστα από ένα στοιχείο που χρησιµοποιείται για να εµφανίζονται σωστά τα στοιχεία κατά την πρώτη εισαγωγή στη λίστα. Επίσης τροποποιεί κατάλληλα τη συλλογή FirstTime ώστε να µην κάνει ξανά την ίδια διαδικασία. TreeViewFunctions - (TreeViewFunctions.bas) Περιέχονται συναρτήσεις υπεύθυνες για την επεξεργασία της επιλογής ή της µη επιλογής ενός κόµβου. Public Sub HandleNodeClick(Node As MSComctlLib.Node, ParForm As Form) Node (MSComctlLib.Node) : Ο επιλεγµένος κόµβος ParForm (Form) : Η φόρµα στην οποία βρίσκεται το TreeView(SetActProp ή 98

111 RecordSetProp) Ρυθµίζει την επιλογή και το σηµάδεµα ενός κόµβου, των παιδιών του και του πατέρα του ανάλογα µε την κατάστασή τους. Public Sub SweepGraph(RootNode As MSComctlLib.Node) RootNode (MSComctlLib.Node) : Ο κόµβος-ρίζα ενός δέντρου. Ξεκινώντας από τον κόµβο ρίζα ελέγχει όλους τους κόµβους του δέντρου και ανάλογα µε το αν όλα, µερικά ή κάνενα από τα παιδιά τους είναι επιλεγµένα ρυθµίζει και την επιλογή του εν λόγω κόµβου. RecordSet_Functions - (RecordSet_Functions.bas) Οι συναρτήσεις αυτού του Module χρησιµοποιούνται από τη φόρµα RecordSetProp για την αλλαγή των ιδιοτήτων ενός RecordSet. Dim KeyCollection As Collection Συλλογή που περιέχει τα κλείδια των attributes του RecordSet και χρησιµοποιείται για τον έλεγχο της µοναδικότητας τους. Public DBsLoaded As New Collection Συλλογή που περιέχει τα ConnectionStrings των βάσεων που φαίνονται στο TreeView της RecordSetProp. Public Sub RemListItemFromRecordSet(ListItem As ListItem) ListItem (ListItem) : Το στοιχείο της λίστας RecordSetProp.AttList(0) που αφαιρείται. Αφαιρεί το αντίστοιχο attribute από τη συλλογή RecordSet_OutPuts, το ListItem από τη λίστα και το σηµάδι ελέγχου ( ) από τον αντίστοιχο κόµβο. Public Sub RemNodeFromRecordSet(Node As MSComctlLib.Node) Node(MSComctlLib.Node) : Ο κόµβος που έγινε UnChecked. Αφαιρεί το αντίστοιχο attribute από τη συλλογή RecordSet_OutPuts και το αντίστοιχο στοιχείο της λίστας. Public Sub AddNode2RecordSet(Node As MSComctlLib.Node, insertat As Integer) Node (MSComctlLib.Node) :Ο κόµβος που επιλέχθηκε. insertat (Integer) : Η θέση στην οποία πρέπει να µπει στη λίστα. Προσθέτει το attribute στη λίστα, αν δεν υπάρχει ήδη, και το κλειδί του στη συλλογή DB2Key. Public Sub RecordSetPropertiesAplly() Αντιγράφει τις νέες ιδιότητες του RecordSet στα Properties του αντίστοιχου κόµβου και καλεί τις συναρτήσεις UnSynchronizeAttribute, CascadeRSKeyAttribute και 99

112 UnSynchronizeAttribute για να αλλάξει το κλειδί του attribute όπου αλλού υπάρχει στο γράφο. Public Function RecordSetPropertiesLoad(ParForm As Form, NodeNo As Integer) As RecordSetProperties ParForm (Form) : Η φόρµα στην οποία βρίσκεται ο κόµβος-recordset. NodeNo (Integer) : O αριθµός-κλειδί του RecordSet στη συλλογή Labels. Αντιγράφει τις ιδιότητες του RecordSet από το Properties του κόµβου στο tempprop και τις εµφανίζει στη RecordSetProp. Public Sub RecordSetInitProperties() Κάνει τις απαραίτητες αρχικοποιήσεις της RecordSetProp. Public Function DoLogin(ConnString As String, User As String, Psw As String) As Boolean ConnString (String) : To Connection String για τη σύνδεση στη Βάση. User (String) : To UserName για τη σύνδεση στη Βάση. Psw (String) : To Password για τη σύνδεση στη Βάση. Ελέγχει αν η Βάση είναι ήδη φορτωµένη και αν όχι καλεί την DBtoTree(). Public Function DBtoTree(ConnectionString As String, Login As String, Psw As String) As Boolean ConnString (String) : To Connection String για τη σύνδεση στη Βάση. User (String) : To UserName για τη σύνδεση στη Βάση. Psw (String) : To Password για τη σύνδεση στη Βάση. Εµφανίζει τους πίνακες της Βάσης και τα πεδία τους στο TreeView DBView της RecordSetProp, καλεί την SweepGraph() και προσθέτει το Connection String στη συλλογή DBsLoaded. Public Sub ExistsInList(Node As MSComctlLib.Node) Node(MSComctlLib.Node) :Ο υπό έλεγχο κόµβος Ελέγχει αν ο κόµβος υπάρχει ήδη στη λίστα RecordSetProp.AttList(0) και αν υπάρχει σηµειώνεται µε. Public Function CreateRsSQl(List As ListItems) As String List (ListItems) : Η λίστα των attributes RecordSetProp.AttList(0) ηµιουργεί την SQL πρόταση που αντιστοιχεί στη δηµιουργία του RecordSet SetActProp_Functions - (SetActProp_Functions.bas) Οι συναρτήσεις αυτού του Module χρησιµοποιούνται από τη φόρµα SetActProp για την αλλαγή των ιδιοτήτων µίας Activity. 100

113 Public Tabs2Colors(2) As Long Πίνακας που αντιστοιχεί το Index κάθε λίστας AttList στο διακριτικό της χρώµα. Public Colors2Tabs As Collection Συλλογή που αντιστοιχεί κάθε διακριτικό χρώµα στη λίστα του. Public ns2str(15) As String Πίνακας που αντιστοιχεί κάθε µέλος του enumeration NodeSource σε ένα String. Public Sub CreateAttributeSource_TargetHeaders(CurAttr As AttributeProperties, CurListItem As ListItem) CurAttr (AttributeProperties) : Το υπό επεξεργασία attribute. CurListItem (ListItem) : Το αντίστοιχο στοιχείο της λίστας.. Γεµίζει τα SubItems του ListItem µε τις πηγές και τους στόχους του attribute. Public Sub CreateParameterSource_TargetHeaders(CurParam As ParameterProperties, CurListItem As ListItem) CurParam (ParameterProperties) : Η υπό επεξεργασία παράµετρος. CurListItem (ListItem) : Το αντίστοιχο στοιχείο της λίστας.. Γεµίζει τα SubItems του ListItem µε τις πηγές και τους στόχους της παραµέτρου. Public Sub ApplyActivityRename(OldName As String) OldName (String) : Το προηγούµενο όνοµα της Activity. Αλλάζει τα απαραίτητα στοιχεία (π.χ. κλειδί, όνοµα πηγής attribute) ώστε να συµφωνούν µε το νέο όνοµα της Activity. Public Sub RemListItemFromAttLists(ListItem As ListItem) ListItem (ListItem) : Το στοιχείο της λίστας που διαγράφεται. Αφαιρεί από τις ιδιότητες της Activity το αντίστοιχο attribute,παράµετρο ή συνάρτηση και το τελευταίο,µέσω των UnSyncrhonize* συναρτήσεων, από τις πηγές του ή τους στόχους του που είναι µέλη της Activity. Public Sub RemNodeFromAttLists(Node As MSComctlLib.Node) Node(MSComctlLib.Node) : O επιλεγµένος κόµβος. Βρίσκει το αντίστοιχο attribute ή παράµετρο και αν είναι αυτός ο κόµβος η µόνη πηγή ή στόχος το διαγράφει καθώς το αντίστοιχο στοιχείο της λίστας. Αν όχι διαγράφεται από τις πηγές του ή τους στόχους του. Public Sub Set_Input_As_Output(InputItem As ListItem) InputItem (ListItem) : Το επιλεγµένο στοιχείο της λίστας εισόδων. ηµιουργεί ένα καινούργιο attribute εξόδου µε το ίδιο κλειδί, αν δεν υπάρχει ήδη, το οποίο έχει πηγή το αντίστοιχο attribute εισόδου. 101

114 Public Sub Set_Input_As_Param(InputItem As ListItem) InputItem (ListItem) : Το επιλεγµένο στοιχείο της λίστας εισόδων. ηµιουργεί µία καινούργια παράµετρο µε το ίδιο κλειδί, αν δεν υπάρχει ήδη, η οποία ρυθµίζεται από το αντίστοιχο attribute εισόδου. Public Sub AddNode2AttLists(Node As MSComctlLib.Node, insertat As Integer) Node (MSComctlLib.Node) : Ο επιλεγµένος κόµβος insertat (Integer) : Η θέση στην οποία θα προστεθεί στη λίστα Προσθέτει ένα νέο attribute ή µια νέα παράµετρο ή µία νέα συνάρτηση στις ιδιότητες της Αctivity, ανάλογα µε το συνδυασµό του είδους του κόµβου και της λίστας στην οποία προστίθεται, καθώς και το αντίστοιχο στοιχείο στη λίστα. Αν προστίθεται attribute εισόδου, προστίθεται αυτόµατα και ένα ίδιο attribute εξόδου. Public Sub SetAccordingToActivityType(Index As Integer) Index (Integer) : Η θέση του τύπου Activity στον πίνακα ActivityTypesbuf() ιαγράφει τις υπάρχουσες παραµέτρους και συναρτήσεις που προέρχονται από τον προηγούµενο τύπο και προσθέτει αυτές του νέου τύπου. Public Sub ActivityPropertiesLoad(ParForm As Form, NodeNo As Integer) ParForm (Form) : Η φόρµα στην οποία βρίσκεται ο κόµβος της Activity. NodeNo (Integer) : O αριθµός-κλειδί του κόµβου στη συλλογή Labels. Αντιγράφει τις ιδιότητες της Activity από το Properties του κόµβου στη µεταβλητή tempprop και δείχνει τις ιδιότητες αυτές στην SetActProp φόρµα. Public Sub ActivityPropertiesApply(ParForm As Form, NodeNo As Integer) ParForm (Form) : Η φόρµα στην οποία βρίσκεται ο κόµβος της Activity. NodeNo (Integer) : O αριθµός-κλειδί του κόµβου στη συλλογή Labels. Αν το όνοµα της Activity δεν συµπίπτει µε κάποιου άλλου κόµβου αντιγράφει τις ιδιότητες της Activity από τη µεταβλητή tempprop στην Properties του κόµβου. Public Sub Graph2Tree() Φορτώνει τους κόµβους του γράφου του σεναρίου στα TreeView DBView και ActView,στο πρώτο τα RecordSets και στο δεύτερο τους υπόλοιπους, Public Sub ListItem2Nodes(remListitem As ListItem, CurList As Integer, Remove As Boolean) remlistitem (ListItem) : Το υπό εξέταση στοιχείο λίστας. CurList (Integer) : Η τρέχουσα λίστα. 102

115 Remove (Boolean) : Ορίζει αν το remlistitem διαγράφεται. Για τις πηγές ή ProcessListItemNode. τους στόχους του αντίστοιχου του remlistitem attribute καλεί την Public Sub ProcessListItemNode(NodeName As String, NodeSource As Integer, AttListNum As Integer, Remove As Boolean) NodeName (String) : Το όνοµα του υπό αναζήτηση κόµβου. NodeSource (Integer) : Ο τρόπος σύνδεσης του µε το σχετικό attribute. AttListNum (Integer) : Η τρέχουσα λίστα. Remove (Boolean) : Ορίζει αν το σχετικό attribute διαγράφεται. Βρίσκει τον σωστό κόµβο, αν υπάρχει, και αν η µεταβλητή Remove είναι True βγάζει το σηµάδι ελέγχου,αλλιώς τον τσεκάρει. Public Sub PropertiesLoad() Κάνει τις απαραίτητες αρχικοποιήσεις της SetActProp φόρµας. SetActProp_Positions - (SetActProp_Positions.bas) Οι συναρτήσεις αυτού του Module χρησιµοποιούνται από τη φόρµα SetActProp κατά την αλλαγή των διαστάσεων της. Public Declare Sub mouse_event Lib "user32" (ByVal dwflags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwextrainfo As Long) ηµιουργεί κίνηση του mouse και πάτηµα των πλήκτρων του. Καλούµενη ως mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 προκαλεί το σήκωµα του αριστερού πλήκτρου του mouse και χρησιµοποιείται για να σταµατήσει η αλλαγή διαστάσεων της SetActProp φόρµας σε µικρότερο µέγεθος από µία ορισµένη τιµή Synchronize UnSynchronize Modules SynchronizeFunctions - (SynchronizeFunctions.bas) Οι συναρτήσεις αυτού του Module είναι υπεύθυνες για την δηµιουργία των σχέσεων ενός όρου µε τους υπόλοιπους όρους του σεναρίου. Public Sub SynchronizeProvider Public Sub SynchronizeProvided Public Sub SynchronizeRegulator Public Sub SynchronizeRegulated Οι τέσσερις παραπάνω συναρτήσεις παίρνουν όµοια ορίσµατα και επιτελούν παρόµοια 103

116 εργασία. Το πρώτο όρισµα (ParForm) είναι η φόρµα στην οποία βρίσκεται η υπό εξέταση οντότητα. Το δεύτερο (AtrrProps ή ParamProps) τις ιδιότητες του attribute ή της παραµέτρου που συγχρονίζεται. Το τρίτο (ProviderProps, ProvidedProps, RegulatorProps RegulatedProps) την σχέση που θέλουµε να συγχρονίσουµε. Τέλος το τέταρτο (FromPropForm) ορίζει αν η υπό επεξεργασία οντότητα υπάρχει στο γράφο ή στις ιδιότητες κάποιου άλλου κόµβου. Οι συναρτήσεις αυτές κάνουν το εξής: Βρίσκουν το attribute ή την παράµετρο πηγή,στόχο,ρυθµιστή ή ρυθµιζόµενο (αντίστοιχα µε το τρίτο όρισµα όπως αναφέρθηξε πιο πάνω) και την ενηµερώνουν για την σχέση αυτή. Public Sub CascadeRSKeyAttribute(ParForm As Form, AttrProps As AttributeProperties, OldKey As String) ParForm (Form) : Η φόρµα στην οποία βρίσκεται το RecordSet. AttrProps (AttributeProperties) : Οι ιδιότητες του attribute. OldKey (String) : Το προηγούµενο κλειδί του attribute Είναι µία αναδροµική συνάρτηση η οποία ανανεώνει το κλειδί των attributes και των παραµέτρων που έχουν το ίδιο κλειδί µε το εν λόγω attribute του RecordSet. UnSynchronizeFunctions - (UnSynchronizeFunctions.bas) Οι συναρτήσεις αυτού του Module είναι υπεύθυνες για τη διαγραφή των σχέσεων ενός όρου µε τους υπόλοιπους όρους του σεναρίου.. Public Sub UnSynchronizeProvider Public Sub UnSynchronizeProvided Public Sub UnSynchronizeRegulator Public Sub UnSynchronizeRegulated Οι συναρτήσεις αυτές λειτουργούν ακριβώς όπως και οι αντίστοιχες Syncrhonize συναρτήσεις µε τη διαφορά ότι αυτές διαγράφουν τη σχέση από την οντότητα πηγή, στόχο, ρυθµιστή ή ρυθµιζόµενο Περιγραφή σχήµατος repository Στο σχήµα περιγράφεται διαγραµµατικά το σχήµα του repository που χρησιµοποιούµε και στη συνέχεια λεπτοµερέστερα όλοι οι πίνακές του. 104

117 Σχήµα : Σχήµα Repository 105

118 Περιέχει τα βασικά χαρακτηριστικά ενός Τύπου Activity. ACTIVITYTYPE_NAME (VARCHAR2(50)) : Το όνοµα του τύπου ACTIVITYTYPE_DESCR (VARCHAR2(200)) : Η περιγραφή του τύπου ACTIVITYTYPE_SQL (VARCHAR2(400)) : Η πρότυπη SQL πρόταση. ACTIVITYTYPE_SCHEMANO (NUMBER) : Ο αριθµός των σχηµάτων εισόδου. Παίρνει τιµή 1 αν περιµένουµε µόνο ένα σχήµα εισόδου,2 αν περιµένουµε παραπάνω. ACTIVITYTYPE_PROVIDERSEM (NUMBER) : Η Σηµασιολογία Πηγής εδοµένων µίας Activity αυτού του τύπου, µε τιµή 1 για SELECT 2 για DELETE ACTIVITYTYPE_CONSUMERSEM (CHAR(18)) : Η Σηµασιολογία Καταναλωτή εδοµένων µίας Activity αυτού του τύπου, µε τιµή 1 για APPEND 2 για OVERWRITE ActivityTypesParams Περιέχει πληροφορίες για τις εξ ορισµού εξόδους και παραµέτρους µίας Activity του τύπου που καθορίζεται από το πεδίο ActivityType_Name. ACTIVITYTYPE_NAME (VARCHAR2(50)) : Το όνοµα του τύπου στον οποίο ανήκει η έξοδος ή παράµετρος. PARAM_NAME (VARCHAR2(50)) : Το όνοµα της εξόδου ή της παραµέτρου. PARAM_KIND (VARCHAR2(50)) : Καθορίζει αν πρόκειται για έξοδο ή για παράµετρο. Παίρνει τιµή OUT για έξοδο και PARAM για παράµετρο. PARAM_TYPE (VARCHAR2(50)) : Το όνοµα του τύπου δεδοµένων της εξόδου ή της παραµέτρου ActivityTypesFunctions Περιέχει πληροφορίες για τις συναρτήσεις που χρησιµοποιεί εξ ορισµού µία Activity του τύπου που καθορίζεται από το πεδίο ActivityType_Name. ACTIVITYTYPE_NAME (VARCHAR2(50)) : Το όνοµα του τύπου στον οποίο ανήκει η συνάρτηση. FUNCTION_NAME (VARCHAR2(50)) : Το όνοµα της συνάρτησης. FUNCTION_TYPE (VARCHAR2(50)) : Το όνοµα του τύπου της συνάρτησης FunctionTypes Περιέχει πληροφορίες για τους τύπους συναρτήσεων. 106

119 FUNCTIONTYPE_NAME (VARCHAR2(50)) : Το όνοµα του τύπου FUNCTIONTYPE_DESCR (VARCHAR2(200)) : Η περιγραφή του FunctionTypesParams Έχει τις πληροφορίες για τις εισόδους και τις εξόδους των συναρτήσεων του τύπου που καθορίζεται από το πεδίο FunctionType_Name. FUNCTIONTYPE_NAME (VARCHAR2(50)) : Το όνοµα του τύπου στον οποίο ανήκει η έξοδος ή η είσοδος. PARAM_NAME (VARCHAR2(50)) : Το όνοµα της εισόδου ή εξόδου. PARAM_KIND (VARCHAR2(50)) : Καθορίζει αν πρόκειται για είσοδο ή έξοδο. Παίρνει τιµή IN για είσοδο και ΟUT για έξοδο. PARAM_TYPE (VARCHAR2(50)) : Ο τύπος της εισόδου ή εξόδου Datatypes DATATYPE_NAME (VARCHAR2(50)) : Το όνοµα ενός τύπου εδοµένων Scenarios Περιέχει τα βασικά στοιχεία ενός σεναρίου. SCENARIO_ID (NUMBER) : Ένας µοναδικός αριθµός αναγνωριστικό κάθε σεναρίου. SCENARIO_NAME (VARCHAR2(50)) : Το όνοµα του σεναρίου. USER_NAME (VARCHAR2(30)) : Το όνοµα του χρήστη στον οποίο ανήκει το σενάριο ScenarioNodes Συνδέει τους κόµβους µε το σενάριο στο οποίο ανήκουν και περιέχει τις πληροφορίες που είναι κοινές για όλα τα είδη κόµβων. NODE_ID (NUMBER) : Το αναγνωριστικό ενός κόµβου SCENARIO_ID (NUMBER) : Το αναγνωριστικό του σεναρίου στο οποίο ανήκει ο κόµβος. NODE_NAME (VARCHAR2(50)) : Το όνοµα του κόµβου. NODE_TYPE (NUMBER) : Το είδος του κόµβου. LEFT (NUMBER) : Η χ συντεταγµένη του πάνω αριστερού άκρου του. TOP (NUMBER) : Η y συντεταγµένη του πάνω αριστερού άκρου του WIDTH (NUMBER) : Το πλάτος του κόµβου. HEIGHT (NUMBER) : Το ύψος του κόµβου. 107

120 Comments Στον πίνακα αυτόν γράφονται τα χαρακτηριστικά των κόµβων-σχολίων. COMMENT_ID (NUMBER) : Το αναγνωριστικό του σχολίου. COMMENT_TEXT (VARCHAR2(200)) : Το κείµενο του σχολίου RecordSets Περιέχει τις πληροφορίες για τα RecordSets. RECORDSET_ID (NUMBER) : Το αναγνωριστικό του RecordSet. RECORDSET_SQL (VARCHAR2(200)) : Η SQL πρόταση που παρέχει δεδοµένα στο RecordSet RecordSetOutputs Περιέχει τις πληροφορίες για τα attributes των RecordSets. OUTPUT_ID (NUMBER) : Το αναγνωριστικό του attribute. RECORDSET_ID (NUMBER) : Το αναγνωριστικό του RecordSet στο οποίο ανληκει το attribute. OUTPUT_KEY (VARCHAR2(50)) : Το όνοµα του attribute. DB_KEY (VARCHAR2(100)) : Το πεδίο της Βάσης στο οποίο αντιστοιχεί το atribute. OUTPUT_TYPE (VARCHAR2(50)) : Ο τύπος δεδοµένων του attribute Activities Στον πίνακα αυτόν γράφονται τα χαρακτηριστικά των Activities. ACTIVITY_ID (NUMBER) : Το αναγνωριστικό της Activity. ACTIVITY_DESCR (VARCHAR2(100)) : Η περιγραφή της Activity. ACTIVITY_TYPE (VARCHAR2(50)) : Ο τύπος της. ACTIVITY_LOG (VARCHAR2(200)) : Η διαδροµή του Log αρχείου της. ACTIVITY_SQL (VARCHAR2(400)) : Η SQL πρότασή της. ACTIVITY_SCHEMANO (NUMBER) : Ο αριθµός των σχηµάτων εισόδου του τύπου της ActivitySubNodes Περιέχει πληροφορίες για τα attributes ή τις παραµέτρους των Activities. SUBNODE_ID (NUMBER) : Το αναγνωριστικό του attribute ή της παραµέτρου. 108

121 ACTIVITY_ID (NUMBER) : Το αναγνωριστικό της Activity στην οποία ανήκει το attribute ή η παράµετρος. SUBNODE_KEY (VARCHAR2(50)) : Το κλειδί του attribute ή της παραµέτρου. SUBNODE_KIND (NUMBER) : Το είδος του εν λόγω κόµβου. IN αν πρόκειται για attribute εισόδου, OUT αν πρόκειται για attribute εξόδου και PARAM αν πρόκειται για παράµετρο. SUBNODE_NAME (VARCHAR2(50)) : Το όνοµα του attribute ή της παραµέτρου. SUBNODE_TYPE (VARCHAR2(50)) : Ο τύπος δεδοµένων του attribute ή της παραµέτρου. SUBNODE_TAG (NUMBER) : είχνει τον τρόπο µε τον οποίο προήλθε η παράµετρος ActivityFunctions Περιέχει τις πληροφορίες για τις συναρτήσεις που χρησιµοποιούν οι Activities. FUNCTION_ID (NUMBER) : Το αναγνωριστικό της συνάρτησης. ACTIVITY_ID (NUMBER) : Το αναγνωριστικό της Activity στην οποία ανήκει η συνάρτηση. FUNCTION_KEY (VARCHAR2(50)) : Το όνοµα της συνάρτησης. FUNCTION_TYPE (VARCHAR2(50)) : Ο τύπος της. FUNCTION_SOURCE (NUMBER) : Ορίζει αν η συνάρτηση προέρχεται από τον τύπο της Activity ή την έχει προσθέσει ο χρήστης FunctionSubNodes Περιέχει τα στοιχεία των παραµέτρων εισόδου και εξόδου των συναρτήσεων των Activities. SUBNODE_ID (NUMBER) : Το αναγνωριστικό της παραµέτρου. FUNCTION_ID (NUMBER) : Το αναγνωριστικό της συνάρτησης στην οποία ανήκει η παράµετρος. SUBNODE_KEY (VARCHAR2(50)) : Το κλειδί της παραµέτρου. SUBNODE_KIND (NUMBER) : Το είδος της παραµέτρου. IN ανα πρόκειται για είσοδο και OUT αν πρόκειται για έξοδο. SUBNODE_NAME (VARCHAR2(50)) : Το όνοµα της παραµέτρου. SUBNODE_TYPE (VARCHAR2(50)) : Ο τύπος δεδοµένων της Lines Περιέχει τις πληροφορίες για τις βασικές ακµές των σεναρίων, δηλαδή αυτές µεταξύ Activities και RecordSets ή σχολίων ή Log αρχείων. 109

122 SCENARIO_ID (NUMBER) : Το αναγνωριστικό του σεναρίου στο οποίο ανήκει η ακµή. FROM_LABEL (VARCHAR2(50)) : Το αναγνωριστικό του κόµβου από τον οποίο ξεκινά η ακµή. TO_LABEL (VARCHAR2(50)) : Το αναγνωριστικό του κόµβου στον οποίο τερµατίζει η ακµή. FROM_GRAB_POINT (NUMBER) : Το σηµείο στο οποίο προσδένεται η ακµή στον κόµβο εκκίνησης. TO_GRAB_POINT (NUMBER) : Το σηµείο στο οποίο προσδένεται η ακµή στον κόµβο τερµατισµού. EDGE_TYPE (NUMBER) : Ο τύπος της ακµής. ANGLE (NUMBER) : Η γωνία της ακµής Relationships Περιέχει τις πληροφορίες για τις Provider και Regulator σχέσεις NODE_ID (NUMBER) : Το αναγνωριστικό του κόµβου στον οποίο ανήκει η σχέση. FROM_KEY (VARCHAR2(50)) : Το κλειδί του attribute ή της παραµέτρου που παρέχει δεδοµένα. RELATIONSHIP_KIND (NUMBER) : Το είδος της ακµής. FROM_NAME (VARCHAR2(50)) : Το όνοµα του κόµβου στον οποίο ανήκει το attribute ή η παράµετρος που παρέχει δεδοµένα. FROM_TYPE (VARCHAR2(50)) : Καθορίζει τον τύπο της σχέσης. 110

123 5 Έλεγχος Στην ενότητα αυτή θα περιγραφεί ο έλεγχος του συστήµατος. 5.1 Μεθοδολογία Ελέγχου Η µεθοδολογία που έχει χρησιµοποιηθεί είναι η µέθοδος του µαύρου κουτιού. Πιο συγκεκριµένα θα παρουσιαστεί η σχεδίαση του σεναρίου του παραδείγµατος της παραγράφου ώστε να αποδειχτεί η ορθότητα των λειτουργιών που υλοποιήθηκαν. 5.2 Αναλυτική παρουσίαση έλεγχου Μόλις τρέξουµε την εφαρµογή εµφανίζονται δύο παράθυρα. Το πρώτο είναι το κεντρικό παράθυρο της εφαρµογής και είναι ανενεργό, ενώ το δεύτερο παράθυρο µας ζητά να δώσουµε ένα όνοµα χρήστη και να επιλέξουµε το repository που θα χρησιµοποιήσουµε. Τα σενάρια που θα σχεδιάσουµε και θα αποθηκεύσουµε στο repository στη συνέχεια συνδέονται µε το όνοµα αυτό και θα µπορούµε να βλέπουµε µόνο όσα σενάρια δηµιουργήσαµε µε αυτό το όνοµα χρήστη. 111

124 Πιέζοντας το Change Repository εµφανίζεται το παράθυρο επιλογής repository. 112

125 Στην αναπτυσσόµενη λίστα εµφανίζονται οι Βάσεις εδοµένων Oracle που είναι δηλωµένες στις πηγές δεδοµένων του υπολογιστή µας. Επιλέγουµε την επιθυµητή και δίνουµε το κατάλληλο όνοµα χρήστη και το αντίστοιχο αναγνωριστικό για τη σύνδεση στη Βάση. Πιέζοντας Test ελέγχεται αν είναι δυνατή η σύνδεση στη Βάση και παρουσιάζεται το κατάλληλο µήνυµα επιτυχίας ή αποτυχίας. Εάν επιτευχθεί η σύνδεση στη Βάση ελέγχεται αν υπάρχουν ήδη οι απαραίτητοι πίνακες και αν όχι ερωτόµαστε αν επιθυµούµε τη δηµιουργία τους. Σε αυτή την περίπτωση επιλέγουµε να δηµιουργηθούν, στη συνέχεια πιέζουµε Ok στο παράθυρο επιλογής repository και επιστρέφουµε στο παράθυρο όπου µας ζητείται το όνοµα χρήστη. ίνουµε ένα όνοµα και πατάµε Login για να προχωρήσουµε. Το παράθυρο που βλέπουµε στη συνέχεια είναι το εξής: 113

126 Αρχικά δηµιουργούµε τους τύπους δεδοµένων, συναρτήσεων και Activities που χρειαζόµαστε για τη σχεδίαση του σεναρίου. Επιλέγουµε το µενού Types Show DataTypes για να επεξεργαστούµε τους τύπους δεδοµένων και εµφανίζεται το ακόλουθο παράθυρο. Στην αναπτυσσόµενη λίστα υπάρχουν οι τύποι δεδοµένων που βρίσκονται στο repository. Επιλέγουµε New για να δηµιουργήσουµε ένα νέο τύπο. Στο παράθυρο που εµφανίστηκε δίνουµε το όνοµα του τύπου και πατάµε Save για να γυρίσουµε στο προηγούµενο παράθυρο στο οποίο πατάµε Cancel για να κλείσει. Στη συνέχεια ορίζουµε ένα νέο τύπο συνάρτησης. Επιλέγουµε το µενού Types Show FunctionTypes για να ανοίξει το παράθυρο των τύπων συναρτήσεων. 114

127 Στην αναπτυσσόµενη λίστα εµφανίζονται οι τύποι που βρέθηκαν στο repository. Επιλέγουµε New για να ορίσουµε ένα νέο. Στο παράθυρο που εµφανίζεται δίνουµε το όνοµα του τύπου και µία περιγραφή του. Πατώντας το + ή το - κάτω από την κατάλληλη λίστα προσθέτουµε ή αφαιρούµε αντίστοιχα εισόδους ή έξοδο. Στη συνέχεια ορίζουµε τον τύπο συνάρτησης _Α2ΕDate που µετατρέπει µία ηµεροµηνία Αµερικής σε ευρωπαϊκή. 115

128 Πατάµε Save για να αποθηκεύσουµε τον τύπο και στη συνέχεια OK στο προηγούµενο παράθυρο για να κλείσει. Στη συνέχεια επιλέγουµε το µενού Types Show ActivityTypes για να δηµιουργήσουµε ένα νέο τύπο Activity. Στην αναπτυσσόµενη λίστα του παραθύρου που εµφανίζεται υπάρχουν οι τύποι Activities που είναι ορισµένοι στο repository. Επιλέγουµε New για να ορίσουµε έναν νέο. Στο παράθυρο που εµφανίζεται δίνουµε το όνοµα του τύπου, τον αριθµό των εισόδων µίας Activity αυτού του τύπου, τη σηµασιολογία 116

129 πηγής / καταναλωτή δεδοµένων, την πρότυπη SQL πρόταση και τέλος τις εξόδους, τις παραµέτρους και τις συναρτήσεις του τύπου. Στο επόµενο σχήµα ορίζουµε τον τύπο Add_Const_Value. Αφού ορίσουµε τους απαραίτητους τύπους προχωράµε στη σχεδίαση του σεναρίου. Πατάµε τα κουµπιά Nodes και Edges για να εµφανίσουµε τις αντίστοιχες γραµµές εργαλείων. 117

130 Σέρνοντας µε το ποντίκι τις γραµµές εργαλείων απελευθερώνονται και τις τοποθετούµε όπου προτιµούµε. Πριν αρχίσουµε τη σχεδίαση του σεναρίου επιλέγουµε General Options από το κατακόρυφο µενού για να ρυθµίσουµε τις σχεδιαστικές επιλογές όπως επιθυνούµε από το παράκάτω παράθυρο. 118

131 Επιλέγουµε File New για να ανοίξουµε ένα νέο παράθυρο σχεδίασης και µας ζητείται να δώσουµε ένα όνοµα για το νέο σενάριο. ίνουµε το όνοµα UseCase και πατάµε OK για να ανοίξει το παράθυρο. Επιλέγουµε τον κόµβο RecordSet από την αντίστοιχη γραµµή εργαλείων και κάνουµε κλικ στην περιοχή σχεδίασης για να τον δηµιουργήσουµε. Μόλις σχεδιαστεί το RecordSet ανοίγει το παράθυρο ιδιοτήτων του. 119

132 Πατώντας Load DB ανοίγει ένα παράθυρο στο οποίο ορίζουµε τα πεδία της Βάσης στα οποία αντιστοιχεί το RecordSet. Στην αναπτυσσόµενη λίστα αυτού του παραθύρου εµφανίζονται οι Oracle Βάσεις εδοµένων που είναι ορισµένες στο λειτουργικό σύστηµα. Επιλέγουµε την επιθυµητή, δίνουµε το σωστό όνοµα χρήστη και το αντίστοιχο αναγνωριστικό. Πατάµε OΚ και επιστρέφουµε στην προηγούµενη φόρµα στην οποία εµφανίζονται οι πίνακες της Βάσης και τα πεδία τους. 120

133 Κάνοντας κλικ πάνω σε ένα κόµβο ή σύροντάς τον στη λίστα των attributes του RecordSet προσθέτουµε τον ίδιο, αν είναι πεδίο, ή όλα τα παιδιά του, αν είναι πίνακας. Στο πεδίο Name δίνουµε το όνοµα του RecordSet. 121

134 Με δεξί κλικ στο attribute SDATE και επιλέγοντας Edit αλλάζουµε το όνοµά του. Πατώντας Create SQL Sentence δηµιουργείται µία SQL πρόταση που αντιστοιχεί στην επιλογή των κατάλληλων πεδίων. 122

135 Πατάµε OK για να γυρίσουµε στο παράθυρο σχεδίασης. Επιλέγουµε το εργαλείο Resize για να αλλάξουµε τις διαστάσεις του κόµβου και το εργαλείο Move για να τον µετακινήσουµε. 123

136 Το RecordSet που σχεδιάστηκε αντιπροσωπεύει την µία από τις δύο πηγές από τις οποίες δέχεται δεδοµένα η Αποθήκη εδοµένων µας. Με παρόµοιο τρόπο µε αυτό το RecordSet σχεδιάζουµε ένα ακόµα που αντιπροσωπεύει τη δεύτερη πηγή. 124

137 Στη συνέχεια σχεδιάζουµε µία Activity που αναπαριστά τη διαδικασία µεταφορά των δεδοµένων από την πρώτη πηγή στη DSA µέσω FTP. Στο παράθυρο ιδιοτήτων της Activity εµφανίζονται τα RecordSets του σεναρίου. Από το πρώτο επιλέγουµε τις εισόδους της Activity. Ορίζουµε επίσης το όνοµα, τον τύπο και την περιγραφή της. 125

138 Κάνουµε δεξί κλικ στο χώρο της SQL πρότασης και επιλέγουµε Create SQL Statement για να δηµιουργηθεί η ισοδύναµη της Activity SQL πρόταση µε βάση την πρότυπη πρόταση του τύπου της. Όπως φαίνεται στο επόµενο σχήµα οι είσοδοι έχουν αυτόµατα προωθηθεί και στις εξόδους της συνάρτησης. Κάνουµε δεξί κλικ στο χώρο των attributes και επιλέγουµε Show Details για να εµφανιστούν οι σχέσεις των attributes µε τα άλλα στοιχεία του σεναρίου. 126

139 Πατάµε Apply για να επιβεβαιώσουµε τις αλλαγές και OK για να κλείσουµε το παράθυρο. Στη συνέχεια συνδέουµε το RecordSet S1_PartSupp που παρέχει δεδοµένα στην Activity FTP1 µε µία Provider σχέση για να σχεδιάσουµε τη µεταξύ τους σχέση. Όµοια ορίζουµε µία Activity FTP2 για τη δεύτερη πηγή όπως φαίνεται στο παρακάτω σχήµα. 127

140 Στη συνέχεια σχεδιάζουµε το RecordSet που θα δεχτεί δεδοµένα από την Activity FTP1. Επιλέγουµε την DSA στο παράθυρο DBlogin και τον κατάλληλο πίνακα που αντιστοιχεί στα attributes του RecordSet.. 128

141 Κάνουµε δεξί κλικ στην Activity FTP1 και επιλέγουµε Activity Zoom για να ανοίξουµε το αντίστοιχο παράθυρο-zoom. To παράθυρο-zoom που εµφανίζεται είναι το εξής : Προσθέτουµε ένα attribute για να δεχτεί δεδοµένα από το attribute Cost του S1_PartSupp. 129

142 Στο παράθυρο ιδιοτήτων του attribute η αναπτυσσόµενη λίστα περιέχει τους ορισµένους τύπους δεδοµένων. ιαλέγουµε τον τύπο Number και δίνουµε όνοµα Cost και πατάµε OK. Στη συνέχεια συνδέουµε το attribute µε την Activity µε µία Part-Of σχέση Με την ίδια διαδικασία δηµιουργούµε ένα όµοιο attribute εξόδου. Συνδέουµε τις πηγές δεδοµένων µε τους καταναλωτές τους µε Provider σχέσεις όπως φαίνεται στο επόµενο σχήµα. 130

143 Κλείνουµε το παράθυρο-zoom και απαντάµε ναι στην ερώτηση αν θέλουµε να εφαρµόσουµε τις αλλαγές στο σενάριο. Σχεδιάζουµε το αντίστοιχο RecordSet καταναλωτή για την Activity FTP2, το PS_New2. Αυτή τη φορά δηλώνουµε τις Provider σχέσεις µέσα από το παράθυρο ιδιοτήτων της Activity FTP2, προσθέτοντας στις εξόδους της τα attributes του PS_New2. Σχεδιάζουµε δύο RecordSets τα PS_Old1 και PS_Old2 τα οποία αντιπροσωπεύουν τους πίνακες µε τα δεδοµένα που µεταφέραµε την τελευταία φορά από τις πηγές και µέσω των παραθύρων ιδιοτήτων τους τα συνδέουµε µε τους κατάλληλους πίνακες. Επίσης σχεδιάζουµε δύο Activities τύπου Differential, τις Diff1 και Diff2 οι οποίες δέχονται δεδοµένα από τα PS_New1 και PS_Old1 η πρώτη και PS_New2 και PS_Old2 η δεύτερη και βρίσκουν τις διαφορές τους. Σχεδιάζουµε επίσης και δύο RecordSets ακόµα, τα PS1 και PS2 στα οποία προωθούνται τα attributes των Diff1 και Diff2 αντίστοιχα. 131

144 Συνδέουµε την Activity Diff1 µε τα RecordSets πηγές και καταναλωτές µέσω του παράθυρου ιδιοτήτων της. 132

145 Οµοίως και για την Diff2. Και για τις δύο Activities προσθέτουµε από ένα σχόλιο. Στη συνέχεια σχεδιάζουµε µία Activity, την Add_SupKey1, η οποία δέχεται ως εισόδους τα attributes του PS1, τα προωθεί στην έξοδό της και προσθέτει ένα attribute εξόδου το οποίο παίρνει τιµή 1 από µία σταθερά µέσω της συνάρτησης AddConst. 133

146 Κάνουµε Zoom στην Activity Add_SupKey1 για να ορίσουµε τον τρόπο µε τον οποίο δέχεται δεδοµένα το νέο attribute. Αρχικά σχεδιάζουµε τη σταθερά που θα προσφέρει δεδοµένα στο νέο attribute. Από την αναπτυσσόµενη λίστα τύπων δεδοµένων του παραθύρου τύπων δεδοµένων της σταθεράς επιλέγουµε τον τύπο NUMBER και δίνουµε όνοµα 1,δηλαδή την τιµή της σταθεράς. Στη συνέχεια σχεδιάζουµε µε Regulator σχέσεις την παροχή δεδοµένων από τη σταθερά στο attribute Const. 134

147 Αλλάζουµε το όνοµα του attribute Const σε SupKey. Κλείνουµε το παράθυρο-zoom εφαρµόζοντας τις αλλαγές στο σενάριο και σχεδιάζουµε µία όµοια Activity Add_SupKey2 για το δεύτερο ρεύµα δεδοµένων. Στη συνέχεια σχεδιάζουµε την Activity SurrogateKey1 η οποία προσθέτει ένα Surrogate κλειδί. 135

148 Μερικές παράµετροι της SurrogateKey1 παίρνουν τιµές από τον πίνακα LookUp της Αποθήκης εδοµένων, συνεπώς πρέπει να σχεδιάσουµε το αντίστοιχο RecordSet. Συνδέουµε το RecordSet LookUp µε την Activity SurrogateKey1 µε µία Provider σχέση, κάνουµε Zoom στη SurogateKey1 και σχεδιάζουµε τις κατάλληλες Regulator σχέσεις. Επιλέγοντας το µενού View RelationShips Derived Provider σχεδιάζεται στο γράφο η Derived Provider σχέση µεταξύ των attributes SKEY του RecordSet LookUp και της Activity Surrogate1. 136

149 Από το µενού View Relationships πατάµε ξανά Derived Provider για να σβηστούν οι Derived Provider σχέσεις και επιλέγουµε Instance Of ώστε να εµφανιστούν οι τύποι των κόµβων. Σχεδιάζουµε όµοια την αντίστοιχη SurrogateKey2 για τη δεύτερη ροή δεδοµένων και προσθέτουµε και ένα Log αρχείο και για τις δύο. 137

150 Στη δεύτερη ροή δεδοµένων προσθέτουµε µία Activity, την AddDate, η οποία προσθέτει ένα attribute µε την ηµεροµηνία του συστήµατος, ώστε να γίνουν οµοιογενή τα δεδοµένα που πήραµε από τις δύο πηγές. 138

151 Στη συνέχεια ορίζουµε το RecordSet DW στο οποίο απεικονίζεται ο πίνακας της Αποθήκης εδοµένων ο οποίος θα δεχτεί τελικά τα δεδοµένα. Σχεδιάζουµε, τέλος, την Activity Union η οποία ενοποιεί τα δεδοµένα από τα δύο attributes και τα προωθεί στο RecordSet DW. 139

152 Όπως φαίνεται στο παραπάνω σχήµα, η εφαρµογή δεν µπόρεσε να ταυτίσει όλα τα αντίστοιχα attributes των δύο πηγών. Αφαιρούµε λοιπόν τα attributes της SurrogateKey1 των οποίων τις σχέσεις θα ορίσουµε στο παράθυρο-zoom. Κάνουµε Zoom στην Union για να σχεδιάσουµε τις Provider σχέσεις µεταξύ των attributes της Union, των πηγών τους και των καταναλωτών τους. 140

153 Συνδέουµε τα υπόλοιπα attributes της SurrogateKey1 µε τα αντίστοιχα attributes εισόδου της Union και τα attributes του DW µε τα attributes εξόδου της Union που τους παρέχουν δεδοµένα. Στη συνέχεια επιλέγουµε Save από τη γραµµή εργαλείων ή το µενού File για να αποθηκεύσουµε το σενάριο στο repository. 141

154 Αφού δεν έχει σωθεί ξανά το σενάριο στο Repository, δίνουµε το όνοµα του σεναρίου και πατάµε Save.Κρατάµε ένα αντίγραφο του σεναρίου επιλέγοντας το µενού File Save As. ίνουµε ένα νέο όνοµα, το CopyOfUseCase, και πατάµε SAVE. Αργότερα µπορούµε να διαγράψουµε το αντίγραφο του σεναρίου επιλέγωντας File Delete Scenario. Πατάµε DELETE και το σενάριο CopyOfUseCase διαγράφεται από το Repository. Στη συνέχεια, φορτώνουµε από το Repository το σενάριο UseCase για να κάνουµε µετρήσεις επιλέγοντας το µενού File Load 142

155 Για να ελέγξουµε αν όλες οι Provider σχέσεις που βλέπουµε στο γράφο είναι σωστά ορισµένες επιλέγουµε από το τρίτο µενού της κατακόρυφης γραµµής εργαλείων το εργαλείο Constistency. Στο επόµενο σχήµα φαίνεται το ίδιο σενάριο που µόλις δηµιουργήθηκε αλλά µε δύο λάθος Provider σχέσεις µεταξύ PS1-Add_SupKey2 και PS2-Add_SupKey1 Πατάµε Consistency και όπως φαίνεται στο επόµενο σχήµα οι σχέσεις αυτές διαγράφονται. 143

156 Αφού ελέγξαµε τις ακµές του γράφου επιλέγουµε Metrics από την κατακόρυφη γραµµή εργαλείων για να δούµε τις µετρήσεις σπουδαιότητας του γράφου. Στην αναπτυσσόµενη λίστα του παραθύρου των µετρήσεων υπάρχουν όλες οι δοµηµένες οντότητες του γράφου, δηλαδή οι Activities και τα RecordSet. Επιλέγουµε την Activity Union. Όπως φαίνεται από τις µετρήσεις η έξοδος PKEY έχει συνολικό βαθµό εξόδου µηδέν, δηλαδή δεν παρέχει δεδοµένα σε κανένα attribute, συνεπώς είναι άχρηστη και δε θα έπρεπε να υπάρχει. Αλλάζουµε το βάθος αναζήτησης µεταβατικών σχέσεων σε 15 και παίρνουµε τις παρακάτω µετρήσεις. 144

157 Επιλέγοντας Scenario Metrics βλέπουµε τις µετρήσεις για τους κόµβους του σεναρίου συνολικά. 145

Data Warehouse Refreshment via ETL tools. Panos Vassiliadis

Data Warehouse Refreshment via ETL tools. Panos Vassiliadis Data Warehouse Refreshment via ETL tools Panos Vassiliadis Data Warehouse Environment 2 Extract-Transform-Load (ETL) Extract Transform & Clean Load Sources DSA DW 3 Importance ETL market has a steady increase

Διαβάστε περισσότερα

Orchid: Integrating Schema Mapping and ETL ICDE 2008

Orchid: Integrating Schema Mapping and ETL ICDE 2008 Orchid: Integrating Schema Mapping and ETL ICDE 2008 Δομουχτσίδης Παναγιώτης Γενικά Data warehouse (DW): Είναι μία αποθήκη πληροφοριών οργανωμένη από ένα ενοποιημένο μοντέλο. Τα δεδομένα συλλέγονται από

Διαβάστε περισσότερα

Επιχειρηµατικές ιαδικασίες: Εισαγωγικές Έννοιες & Αρχικά στάδια µοντελοποίησης

Επιχειρηµατικές ιαδικασίες: Εισαγωγικές Έννοιες & Αρχικά στάδια µοντελοποίησης ΟΙΚΟΝΟΜΙΚΌ ΠΑΝΕΠΙΣΤΉΜΙΟ ΑΘΗΝΏΝ ΤΜΗΜΑ ΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ & ΤΕΧΝΟΛΟΓΙΑΣ Επιχειρηµατικές ιαδικασίες: Εισαγωγικές Έννοιες & Αρχικά στάδια µοντελοποίησης 1o φροντιστήριο στο µάθηµα Ανάλυση και µοντελοποίηση

Διαβάστε περισσότερα

Περιεχόµενα. Πληροφοριακά Συστήµατα: Κατηγορίες και Κύκλος Ζωής. Π.Σ. ιαχείρισης Πράξεων. Π.Σ. ιοίκησης. Κατηγορίες Π.Σ. Ο κύκλος ζωής Π.Σ.

Περιεχόµενα. Πληροφοριακά Συστήµατα: Κατηγορίες και Κύκλος Ζωής. Π.Σ. ιαχείρισης Πράξεων. Π.Σ. ιοίκησης. Κατηγορίες Π.Σ. Ο κύκλος ζωής Π.Σ. Πληροφοριακά Συστήµατα: Κατηγορίες και Κύκλος Ζωής Περιεχόµενα Κατηγορίες Π.Σ. ιαχείρισης Πράξεων ιοίκησης Υποστήριξης Αποφάσεων Έµπειρα Συστήµατα Ατόµων και Οµάδων Ο κύκλος ζωής Π.Σ. Ορισµός Φάσεις Χρήστες

Διαβάστε περισσότερα

Εννοιολογικό Μοντέλο για ιεργασίες Εξαγωγής, Μετασχηµατισµού και Φόρτωσης εδοµένων

Εννοιολογικό Μοντέλο για ιεργασίες Εξαγωγής, Μετασχηµατισµού και Φόρτωσης εδοµένων Εννοιολογικό Μοντέλο για ιεργασίες Εξαγωγής, Μετασχηµατισµού και Φόρτωσης εδοµένων Άλκης Σιµιτσής Εθνικό Μετσόβιο Πολυτεχνείο, Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών, Τοµέας Πληροφορικής,

Διαβάστε περισσότερα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Χειμερινό Εξάμηνο 2013 - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ Δρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ 1 Αρχιτεκτονική

Διαβάστε περισσότερα

Σχεσιακό Μοντέλο. Εισαγωγή. Βάσεις εδοµένων : Σχεσιακό Μοντέλο 1

Σχεσιακό Μοντέλο. Εισαγωγή. Βάσεις εδοµένων : Σχεσιακό Μοντέλο 1 Σχεσιακό Μοντέλο Βάσεις εδοµένων 2011-2012 Ευαγγελία Πιτουρά 1 Εισαγωγή O σχεδιασμός μιας βάση δεδομένων κωδικοποιεί κάποιο μέρος του φυσικού κόσμου Ένα μοντέλο δεδομένων είναι ένα σύνολο από έννοιες για

Διαβάστε περισσότερα

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΣΥΣΤΗΜΑΤΑ ΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΣΥΣΤΗΜΑΤΑ ΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Βάσεις εδοµένων Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης v.vescoukis@cs.ntua.gr ΣΥΣΤΗΜΑΤΑ ΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ Συστήµατα ιαχείρισης Βάσεων

Διαβάστε περισσότερα

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Βάσεις Δεδομένων Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Βάσεις Δεδομένων», 2015-2016 Κεφάλαιο 2: Περιβάλλον Βάσεων Δεδομένων Μοντέλα Δεδομένων 2.1

Διαβάστε περισσότερα

Γραφικό Εργαλείο Σχεδίασης Σεναρίων Εξαγωγής Μετασχηµατισµού Φόρτωσης εδοµένων σε Περιβάλλον Αποθηκών εδοµένων

Γραφικό Εργαλείο Σχεδίασης Σεναρίων Εξαγωγής Μετασχηµατισµού Φόρτωσης εδοµένων σε Περιβάλλον Αποθηκών εδοµένων Εθνικο Μετσοβιο Πολυτεχνειο Σχολη Ηλεκτρολογων Μηχανικων και Μηχανικων Υπολογιστων Τοµεας Τεχνολογιας Πληροφορικης και Υπολογιστων Γραφικό Εργαλείο Σχεδίασης Σεναρίων Εξαγωγής Μετασχηµατισµού Φόρτωσης

Διαβάστε περισσότερα

Σχεδιασµός µιας Β. Ένας απλός τρόπος αναπαράστασης δεδοµένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσµατα

Σχεδιασµός µιας Β. Ένας απλός τρόπος αναπαράστασης δεδοµένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσµατα Εισαγωγή Σχεσιακό Μοντέλο Σχεδιασµός µιας Β : Βήµατα Ανάλυση Απαιτήσεων Τι δεδοµένα θα αποθηκευτούν, ποιες εφαρµογές θα κτιστούν πάνω στα δεδοµένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασµός

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ - Π.Μ.Σ. ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ - Π.Μ.Σ. ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ > ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ - Π.Μ.Σ. ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΡΙΣΜΟΣ: Το Cloud Computing είναι η ονοµασία της τεχνολογίας η οποία επιτρέπει στους χρήστες να

Διαβάστε περισσότερα

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού Πρόλογος...21 μέρος A Εισαγωγή στην Τεχνολογία Λογισμικού 1 Εισαγωγή στην Τεχνολογία Λογισμικού 1.1 Το λογισμικό...25 1.1.1 Ο ρόλος και η σημασία του λογισμικού...26 1.1.2 Οικονομική σημασία του λογισμικού...28

Διαβάστε περισσότερα

Browsers. Λειτουργικότητα και Παραμετροποίηση

Browsers. Λειτουργικότητα και Παραμετροποίηση Browsers Λειτουργικότητα και Παραμετροποίηση 1 Πίνακας περιεχομένων Γενική περιγραφή... 3 Γενικά... 3 Ποιο αναλυτικά τα μέρη ενός browser... 4 Φίλτρα αναζήτησης... 4 Σενάρια αναζήτησης... 4 Όψεις εμφάνισης

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΖΩΓΡΑΦΟΥ 157 73, ΑΘΗΝΑ ΕΒΓ - ΙΠΛ-2003-1 20 Ιανουαρίου 2003 Σύγκριση Αλγορίθµων

Διαβάστε περισσότερα

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ. Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων Δρ. Κωνσταντίνος Χ. Γιωτόπουλος Βασικά θέματα Βάσεων Δεδομένων Ένα Σύστημα Βάσης Δεδομένων

Διαβάστε περισσότερα

Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων: Αποσύνθεση. Βάσεις εδοµένων Ευαγγελία Πιτουρά 1

Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων: Αποσύνθεση. Βάσεις εδοµένων Ευαγγελία Πιτουρά 1 Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων: Αποσύνθεση Βάσεις εδοµένων 2011-2012 Ευαγγελία Πιτουρά 1 Εισαγωγή Θα εξετάσουµε πότε ένα σχεσιακό σχήµα για µια βάση δεδοµένων είναι «καλό» Γενικές Οδηγίες Η Μέθοδος

Διαβάστε περισσότερα

Μια ολοκληρωμένη, διαχρονική και μόνιμη συλλογή δεδομένων οργανωμένη κατά αντικείμενο ανάλυσης με στόχο τη διαδικασία υποστήριξης λήψης αποφάσεων -

Μια ολοκληρωμένη, διαχρονική και μόνιμη συλλογή δεδομένων οργανωμένη κατά αντικείμενο ανάλυσης με στόχο τη διαδικασία υποστήριξης λήψης αποφάσεων - Εξαγωγή Μετασχηματισμός Εισαγωγή Δεδομένων στην Αποθήκη Πληροφοριών (ETL) Ορισμοί Data Warehouse 1. 2. Μια ολοκληρωμένη, διαχρονική και μόνιμη συλλογή δεδομένων οργανωμένη κατά αντικείμενο ανάλυσης με

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται

Διαβάστε περισσότερα

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Βάσεις εδοµένων 2011-2012 Ευαγγελία Πιτουρά 1 Εισαγωγή Μοντελοποίηση Στα προηγούµενα µαθήµατα: Εννοιολογικός Σχεδιασµός Βάσεων Δεδοµένων (µε

Διαβάστε περισσότερα

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Εισαγωγή στις έννοιες Αλγόριθµοι και Πολυπλοκότητα, Οργάνωση Δεδοµένων και Δοµές Δεδοµένων Χρήσιµοι µαθηµατικοί

Διαβάστε περισσότερα

Σχεσιακό Μοντέλο. Σχεδιασμός Βάσεων Δεδομένων Μάθημα 2 ο Μαρία Χαλκίδη

Σχεσιακό Μοντέλο. Σχεδιασμός Βάσεων Δεδομένων Μάθημα 2 ο Μαρία Χαλκίδη Σχεσιακό Μοντέλο Σχεδιασμός Βάσεων Δεδομένων Μάθημα 2 ο Μαρία Χαλκίδη Εισαγωγή Το σχεσιακό μοντέλο δεδομένων (relational data model) προτάθηκε από τον E. F. Codd το 1970 Aποτελεί ένα μέσο λογικής δόμησης

Διαβάστε περισσότερα

Αρχιτεκτονική Λογισμικού

Αρχιτεκτονική Λογισμικού Αρχιτεκτονική Λογισμικού περιεχόμενα παρουσίασης Τι είναι η αρχιτεκτονική λογισμικού Αρχιτεκτονική και απαιτήσεις Σενάρια ποιότητας Βήματα αρχιτεκτονικής σχεδίασης Αρχιτεκτονικά πρότυπα Διαστρωματωμένη

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή Οι σηµερινές δραστηριότητες των επιχειρήσεων δηµιουργούν την ανάγκη για όσο το δυνατό µεγαλύτερη υποστήριξη από τα πληροφοριακά τους

Διαβάστε περισσότερα

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ 2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ Προκειμένου να επιτευχθεί η «ακριβής περιγραφή» ενός αλγορίθμου, χρησιμοποιείται κάποια γλώσσα που μπορεί να περιγράφει σειρές ενεργειών με τρόπο αυστηρό,

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ Τ. Σελλής ΦΘΙΝΟΠΩΡΟ 2005 Λύση ΑΣΚΗΣΗΣ

Διαβάστε περισσότερα

Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων. Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ

Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων. Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ Χρήστες ΣΔΒΔ Απλοί Χρήστες: συγκεκριμένες λειτουργίες σε

Διαβάστε περισσότερα

Σχεδιασμός μιας εφαρμογής ΒΔ: Βήματα. 1. Συλλογή και Ανάλυση Απαιτήσεων(requirement analysis)

Σχεδιασμός μιας εφαρμογής ΒΔ: Βήματα. 1. Συλλογή και Ανάλυση Απαιτήσεων(requirement analysis) Σχεσιακό Μοντέλο Βάσεις εδοµένων 2012-2013 Ευαγγελία Πιτουρά 1 Σχεδιασμός μιας εφαρμογής ΒΔ: Βήματα 1. Συλλογή και Ανάλυση Απαιτήσεων(requirement analysis) Εισαγωγή Τι δεδομένα θα αποθηκευτούν, ποιες εφαρμογές

Διαβάστε περισσότερα

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams Αλέκα Σεληνιωτάκη Ηράκλειο, 26/06/12 aseliniotaki@csd.uoc.gr ΑΜ: 703 1. Περίληψη Συνεισφοράς

Διαβάστε περισσότερα

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα Εισαγωγή Σχεσιακό Μοντέλο Σχεδιασμός μιας Β : Βήματα Ανάλυση Απαιτήσεων Τι δεδομένα θα αποθηκευτούν, ποιες εφαρμογές θα κτιστούν πάνω στα δεδομένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασμός

Διαβάστε περισσότερα

Βάσεις Δεδομένων : Σχεσιακό Μοντέλο 1. Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση.

Βάσεις Δεδομένων : Σχεσιακό Μοντέλο 1. Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση. Εισαγωγή Σχεσιακό Μοντέλο Ανάλυση Απαιτήσεων Σχεδιασμός μιας Β : Βήματα Τι δεδομένα θα αποθηκευτούν, ποιες εφαρμογές θα κτιστούν πάνω στα δεδομένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασμός

Διαβάστε περισσότερα

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής Εισαγωγή στις Βάσεις Δεδομένων Εισαγωγή στις Βάσεις Δεδομένων Ορισμός Βάσης Δεδομένων Σύστημα Διαχείρισης Βάσης Δεδομένων ΣΔΒΔ (DBMS) Χαρακτηριστικά προσέγγισης συστημάτων αρχειοθέτησης Χαρακτηριστικά

Διαβάστε περισσότερα

Ενότητα 3: Διαχείριση πληροφοριακών πόρων με τη χρήση βάσεων δεδομένων

Ενότητα 3: Διαχείριση πληροφοριακών πόρων με τη χρήση βάσεων δεδομένων Ενότητα 3: Διαχείριση πληροφοριακών πόρων με τη χρήση βάσεων δεδομένων YouTube Ιδρύθηκε το 2005 Στόχος του ήταν να δημιουργήσει μία παγκόσμια κοινότητα Βάση δεδομένων βίντεο Μέσα σε ένα χρόνο από τη δημιουργία

Διαβάστε περισσότερα

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα Εισαγωγή Σχεσιακό Μοντέλο Σχεδιασμός μιας Β : Βήματα Ανάλυση Απαιτήσεων Τι δεδομένα θα αποθηκευτούν, ποιες εφαρμογές θα κτιστούν πάνω στα δεδομένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασμός

Διαβάστε περισσότερα

Στο στάδιο ανάλυσης των αποτελεσµάτων: ανάλυση ευαισθησίας της λύσης, προσδιορισµός της σύγκρουσης των κριτηρίων.

Στο στάδιο ανάλυσης των αποτελεσµάτων: ανάλυση ευαισθησίας της λύσης, προσδιορισµός της σύγκρουσης των κριτηρίων. ΠΕΡΙΛΗΨΗ Η τεχνική αυτή έκθεση περιλαµβάνει αναλυτική περιγραφή των εναλλακτικών µεθόδων πολυκριτηριακής ανάλυσης που εξετάσθηκαν µε στόχο να επιλεγεί η µέθοδος εκείνη η οποία είναι η πιο κατάλληλη για

Διαβάστε περισσότερα

Διαχείριση Έργων Πληροφορικής Εργαστήριο

Διαχείριση Έργων Πληροφορικής Εργαστήριο Διαχείριση Έργων Πληροφορικής Εργαστήριο «Εισαγωγή στο MS Project- Διάγραμμα Gantt» Μ.Τσικνάκης, Ρ.Χατζάκη Ε. Μανιαδή, Ά. Μαριδάκη 1. Εισαγωγή στο Microsoft Project To λογισμικό διαχείρισης έργων MS Project

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων ..?????? Εργαστήριο ΒΑΣΕΙΣ????????? ΔΕΔΟΜΕΝΩΝ Βάσεων Δεδομένων?? ΙΙ Εισαγωγικό Μάθημα Βασικές Έννοιες - . Γενικά Τρόπος Διεξαγωγής Ορισμός: Βάση Δεδομένων (ΒΔ) είναι μια συλλογή από σχετιζόμενα αντικείμενα

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Η έννοια πρόβληµα Ανάλυση προβλήµατος Με τον όρο πρόβληµα εννοούµε µια κατάσταση η οποία χρήζει αντιµετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή ούτε προφανής. Μερικά προβλήµατα είναι τα εξής:

Διαβάστε περισσότερα

ΠΕΡΙ ΜΕΤΑΒΑΣΗΣ ΑΠΟ ΤΑ ΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ ΙΑΓΡΑΜΜΑΤΑ ΟΜΗΣ Ε ΟΜΕΝΩΝ

ΠΕΡΙ ΜΕΤΑΒΑΣΗΣ ΑΠΟ ΤΑ ΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ ΙΑΓΡΑΜΜΑΤΑ ΟΜΗΣ Ε ΟΜΕΝΩΝ ΠΕΡΙ ΜΕΤΑΒΑΣΗΣ ΑΠΟ ΤΑ ΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ ΙΑΓΡΑΜΜΑΤΑ ΟΜΗΣ Ε ΟΜΕΝΩΝ Μερικές παρατηρήσεις και σκέψεις του συγγραφέα του βιβλίου Σχετικά µε τη µετάβαση από Ρ σε ΠΠ υπάρχουν 2 σηµαντικά ερωτήµατα:

Διαβάστε περισσότερα

ΕΞΑΓΩΓΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΜΕΤΑΦΟΡΤΩΣΗ (EXTRACT, TRANSFORM, LOAD) Πασχάλης Θρήσκος, PhD Λάρισα

ΕΞΑΓΩΓΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΜΕΤΑΦΟΡΤΩΣΗ (EXTRACT, TRANSFORM, LOAD) Πασχάλης Θρήσκος, PhD Λάρισα ΕΞΑΓΩΓΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΜΕΤΑΦΟΡΤΩΣΗ (EXTRACT, TRANSFORM, LOAD) Πασχάλης Θρήσκος, PhD Λάρισα 2016-2017 ΤΙ ΕΙΝΑΙ ; Είναι μια διαδικασία σε ένα περιβάλλον Αποθήκης Δεδομένων όπου συμβαίνουν τα εξής: Εξαγωγή

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ Αθήνα 18/ 10/ 2001

ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ Αθήνα 18/ 10/ 2001 ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ Αθήνα 18/ 10/ 2001 ΥΠ.ΕΣ...Α Αριθµ.Πρωτ. / ΙΑ Π/A1/22123 Γ.Γ. ΗΜΟΣΙΑΣ ΙΟΙΚΗΣΗΣ ΓΕΝ. /ΝΣΗ ΙΟΙΚΗΤΙΚΗΣ ΟΡΓΑΝΩΣΗΣ /ΝΣΗ ΑΠΛΟΥΣΤΕΥΣΗΣ ΙΑ ΙΚΑΣΙΩΝ ΚΑΙ ΠΑΡΑΓΩΓΙΚΟΤΗΤΑΣ ΤΜΗΜΑ ΜΕΘΟ ΩΝ ΕΡΓΑΣΙΩΝ

Διαβάστε περισσότερα

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Εργαστήριο Βάσεων Δεδομένων Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Τρόπος Διεξαγωγής #1 Ύλη (4 Ενότητες) 1. Ανάλυση Απαιτήσεων -Σχεδιασμός Βάσης Δεδομένων 2. Δημιουργία βάσης a) Create

Διαβάστε περισσότερα

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Εργαστήριο Βάσεων Δεδομένων Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Τρόπος Διεξαγωγής #1 Ύλη (4 Ενότητες) 1. Ανάλυση Απαιτήσεων - Σχεδιασμός Βάσης Δεδομένων 2. Δημιουργία βάσης a)

Διαβάστε περισσότερα

. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων

. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων .. Εργαστήριο Βάσεων Δεδομένων Εισαγωγικό Μάθημα Βασικές Έννοιες - . Ύλη Εργαστηρίου ΒΔ Ύλη - 4 Ενότητες.1 - Σχεδιασμός Βάσης Δεδομένων.2 Δημιουργία Βάσης Δεδομένων Δημιουργία Πινάκων Εισαγωγή/Ανανέωση/Διαγραφή

Διαβάστε περισσότερα

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού Γενικά Η αρχιτεκτονική ανάπτυξης τους πληροφοριακού συστήµατος Γραµµατεία 2000 υποσύστηµα διαχείρισης προσωπικού

Διαβάστε περισσότερα

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση Βάσεις Δεδομένων 2η εργαστηριακή άσκηση Εισαγωγή στο περιβάλλον της oracle Δημιουργία πινάκων Δρ. Εύη Φαλιάγκα 1. Login Χρησιμοποιώντας έναν web explorer, μπαίνετε στο http://10.0.0.6:8080/apex και συμπληρώνετε

Διαβάστε περισσότερα

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,

Διαβάστε περισσότερα

Ελληνικό Ανοικτό Πανεπιστήµιο. Η Ανάλυση και ο Σχεδιασµός στην Ενοποιηµένη ιαδικασία. ρ. Πάνος Φιτσιλής

Ελληνικό Ανοικτό Πανεπιστήµιο. Η Ανάλυση και ο Σχεδιασµός στην Ενοποιηµένη ιαδικασία. ρ. Πάνος Φιτσιλής 1 Ελληνικό Ανοικτό Πανεπιστήµιο Η και ο στην Ενοποιηµένη ιαδικασία ρ. Πάνος Φιτσιλής Περιεχόµενα Γενικές αρχές ανάλυσης και σχεδιασµού Τα βήµατα της ανάλυσης και του σχεδιασµού Συµπεράσµατα 2 3 Η ανάλυση

Διαβάστε περισσότερα

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Εργαστήριο Βάσεων Δεδομένων Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων Βάσεις Δεδομένων - Γενικά Ορισμός: Βάση Δεδομένων (ΒΔ) είναι μια συλλογή από σχετιζόμενα αντικείμενα. Τα περιεχόμενα

Διαβάστε περισσότερα

Σχεδιασμός Βάσεων Δεδομένων

Σχεδιασμός Βάσεων Δεδομένων Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Σχεδιασμός Βάσεων Δεδομένων Εργαστήριο 1 Δρ. Βασιλική Κούφη Περιεχόμενα 1. Εισαγωγή 2. Κύκλος ζωής ανάπτυξης Βάσεως Δεδομένων 3. Oracle SQL Developer Data

Διαβάστε περισσότερα

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Βάσεις εδοµένων Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης v.vescoukis@cs.ntua.gr ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ Βάσεις εδοµένων

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας

Διαβάστε περισσότερα

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Βάσεις εδοµένων Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης v.vescoukis@cs.ntua.gr ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ Μοντέλα εδοµένων

Διαβάστε περισσότερα

Υποστηρικτικό Υλικό για Πτυχιακές και MSc. Π. Βασιλειάδης

Υποστηρικτικό Υλικό για Πτυχιακές και MSc. Π. Βασιλειάδης Υποστηρικτικό Υλικό για Πτυχιακές και MSc Π. Βασιλειάδης RADAR: Radial Applications Depiction Around Relations For Data-Centric Ecosystems Panos Vassiliadis http://www.cs.uoi.gr/~pvassil/publications/2011_dali/index.html

Διαβάστε περισσότερα

FROM TESTOTA.REGISTRY

FROM TESTOTA.REGISTRY ΟΤΑ Επιχειρησιακή Νοηµοσύνη Ενότητα: Βc1.1.3 Επιχειρησιακή Νοηµοσύνη και Τεχνολογίες της Πληροφορικής και των Επικοινωνιών (BI & IT) Πρακτική Άσκηση (επίπεδο 1): Στόχος της άσκησης είναι η εµβάθυνση στην

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10. Μελέτη ηλεκτρικών δικτύων στην Ηµιτονική Μόνιµη Κατάσταση

ΚΕΦΑΛΑΙΟ 10. Μελέτη ηλεκτρικών δικτύων στην Ηµιτονική Μόνιµη Κατάσταση 26 ΚΕΦΑΛΑΙΟ 0 Μελέτη ηλεκτρικών δικτύων στην Ηµιτονική Μόνιµη Κατάσταση 0. ) Γενικά για την Ηµιτονική Μόνιµη Κατάσταση ( Η.Μ.Κ.) Η µελέτη ενός ηλεκτρικού δικτύου γίνεται πρώτιστα στο στο πεδίο του χρόνου.

Διαβάστε περισσότερα

Στρατηγικό Σχεδιασµό Πληροφοριακών Συστηµάτων

Στρατηγικό Σχεδιασµό Πληροφοριακών Συστηµάτων Μέθοδοι και Τεχνικές για τον Στρατηγικό Σχεδιασµό Πληροφοριακών Συστηµάτων (SISP) Στρατηγική και Διοίκηση Πληροφοριακών Συστηµάτων Μάθηµα 2 No 1 Δοµή της Παρουσίασης l 1. Εισαγωγή l 2. Μεθοδολογία SISP

Διαβάστε περισσότερα

Database System Concepts and Architecture (Αρχιτεκτονική, οµές, και Μοντέλα)

Database System Concepts and Architecture (Αρχιτεκτονική, οµές, και Μοντέλα) Database System Concepts and Architecture (Αρχιτεκτονική, οµές, και Μοντέλα) Μοντέλα, οµές (Σχήµα) και Αντιπρόσωποι (Data Models, Schema, and Instances) DBMS αρχιτεκτονική ιάφοροι τύποι γλωσσών και διεπαφές

Διαβάστε περισσότερα

Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού

Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΜΑΤΙΚΗΣ Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού Μάρα Νικολαϊδου Δραστηριότητες Διαδικασιών Παραγωγής Λογισµικού Καθορισµός απαιτήσεων και εξαγωγή προδιαγραφών

Διαβάστε περισσότερα

Η ΟΝΤΟΛΟΓΙΑ ΤΟΥ ΕΛΛΗΝΙΚΟΥ ΚΤΗΜΑΤΟΛΟΓΙΟΥ. Μελέτη υλοποίησης στο Protégé-2000

Η ΟΝΤΟΛΟΓΙΑ ΤΟΥ ΕΛΛΗΝΙΚΟΥ ΚΤΗΜΑΤΟΛΟΓΙΟΥ. Μελέτη υλοποίησης στο Protégé-2000 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΑΓΡΟΝΟΜΩΝ ΤΟΠΟΓΡΑΦΩΝ ΜΗΧΑΝΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΧΑΡΤΟΓΡΑΦΙΑΣ Η ΟΝΤΟΛΟΓΙΑ ΤΟΥ ΕΛΛΗΝΙΚΟΥ ΚΤΗΜΑΤΟΛΟΓΙΟΥ Μελέτη υλοποίησης στο Protégé-2000 Μαρίνος Κάβουρας Αν. Καθηγητής ΕΜΠ ευκαλίων

Διαβάστε περισσότερα

Σχεσιακό Μοντέλο Περιορισμοί Μετατροπή ER σε Σχεσιακό Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Relational Model

Σχεσιακό Μοντέλο Περιορισμοί Μετατροπή ER σε Σχεσιακό Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Relational Model .. Εργαστήριο Βάσεων Δεδομένων Relational Model . Σχεσιακό Μοντέλο (Relational Model) Το σχεσιακό μοντέλο παρουσιάζει μια βάση ως συλλογή από σχέσεις Μια σχέση είναι ένας πίνακας με διακριτό όνομα Κάθε

Διαβάστε περισσότερα

Μοντέλο Οντοτήτων-Συσχετίσεων

Μοντέλο Οντοτήτων-Συσχετίσεων Εισαγωγή Σχεδιασµός µιας Β : Βήµατα Ανάλυση Απαιτήσεων Τι δεδοµένα θα αποθηκευτούν, ποιες εφαρµογές θα κτιστούν πάνω στα δεδοµένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασµός Υψηλού-επιπέδου

Διαβάστε περισσότερα

Εισαγωγή στις βάσεις δεδομένων - Η ανατομία μιας βάσης δεδομένων

Εισαγωγή στις βάσεις δεδομένων - Η ανατομία μιας βάσης δεδομένων ΕΣΔ516 Τεχνολογίες Διαδικτύου Εισαγωγή στις βάσεις δεδομένων - Η ανατομία μιας βάσης δεδομένων Περιεχόμενα - Βιβλιογραφία Ενότητας Περιεχόμενα Ορισμοί Συστατικά στοιχεία εννοιολογικής σχεδίασης Συστατικά

Διαβάστε περισσότερα

ΚΥΚΛΟΣ ΖΩΗΣ ΛΟΓΙΣΜΙΚΟΥ και ΔΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ

ΚΥΚΛΟΣ ΖΩΗΣ ΛΟΓΙΣΜΙΚΟΥ και ΔΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ ΚΥΚΛΟΣ ΖΩΗΣ ΛΟΓΙΣΜΙΚΟΥ και ΔΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ Ο κύκλος ζωής λογισµικού (συνοπτικά) Η παραδοσιακή φάση ανάπτυξης του κύκλου ζωής λογισµικού Φάση καθορισµού απαιτήσεων (1/2) ΤΙ πρέπει να κάνει το

Διαβάστε περισσότερα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες: Άσκηση 5Α_5 26/3/2003 11.5. Άσκηση 5A - [αναγνώριση αντικειµένων-διάγραµµα κλάσεων] [Σε αντικατάσταση της άσκησης 5 του κεφαλαίου 11] 11.5.1. Περιγραφή Η άσκηση αυτή είναι η πρώτη από µία σειρά ασκήσεων

Διαβάστε περισσότερα

ιµελής Σχέση ιατεταγµένο ζεύγος (α, β): ύο αντικείµενα (όχι κατ ανάγκη διαφορετικά) σε καθορισµένη σειρά. Γενίκευση: διατεταγµένη τριάδα (α, β, γ), δι

ιµελής Σχέση ιατεταγµένο ζεύγος (α, β): ύο αντικείµενα (όχι κατ ανάγκη διαφορετικά) σε καθορισµένη σειρά. Γενίκευση: διατεταγµένη τριάδα (α, β, γ), δι Σχέσεις ιδάσκοντες: Φ. Αφράτη, Σ. Ζάχος,. Σούλιου Επιµέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιµελής Σχέση ιατεταγµένο ζεύγος (α, β):

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Rational Unified Process. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Rational Unified Process. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Rational Unified Process Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων Εισαγωγή στην Επεξεργασία Ερωτήσεων 1 Εισαγωγή ΣΔΒΔ Σύνολο από προγράµµατα για τη διαχείριση της ΒΔ Αρχεία ευρετηρίου Κατάλογος ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ Αρχεία δεδοµένων συστήµατος Σύστηµα Βάσεων Δεδοµένων (ΣΒΔ)

Διαβάστε περισσότερα

Εισαγωγή στη Σχεδίαση Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του

Διαβάστε περισσότερα

MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ. Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync

MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ. Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync Ρυθµίσεις Συγχρονισµού Pos Sync Η διαδικασία του συγχρονισµού γίνεται από τον Η/Υ που έχει το BackOffice. Βασική προϋπόθεση για

Διαβάστε περισσότερα

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος ΑΛΓΟΡΙΘΜΟΙ Στο σηµείωµα αυτό αρχικά εξηγείται η έννοια αλγόριθµος και παραθέτονται τα σπουδαιότερα κριτήρια που πρέπει να πληρεί κάθε αλγόριθµος. Στη συνέχεια, η σπουδαιότητα των αλγορίθµων συνδυάζεται

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ Διδάσκων: Γ. Χαραλαμπίδης,

Διαβάστε περισσότερα

Σχεδιασμός μιας Β : Βήματα

Σχεδιασμός μιας Β : Βήματα Σχεσιακό Μοντέλο 1 Εισαγωγή Ανάλυση Απαιτήσεων Σχεδιασμός μιας Β : Βήματα Τι δεδομένα θα αποθηκευτούν, ποιες εφαρμογές θα κτιστούν πάνω στα δεδομένα, ποιες λειτουργίες είναι συχνές Εννοιολογικός Σχεδιασμός

Διαβάστε περισσότερα

Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ

Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ 1 Λειτουργικές απαιτήσεις Το σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών στοχεύει στο να επιτρέπει την πλήρως ηλεκτρονική υποβολή αιτήσεων από υποψήφιους

Διαβάστε περισσότερα

ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης)

ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης) ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης) Καλλονιάτης Χρήστος Επίκουρος Καθηγητής Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας, Πανεπιστήμιο Αιγαίου http://www.ct.aegean.gr/people/kalloniatis

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

Το Σχεσιακό Μοντέλο. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Το Σχεσιακό Μοντέλο. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Το Σχεσιακό Μοντέλο Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1 Μοντελοποίηση Σχήμα (database schema): η περιγραφή της δομής της πληροφορίας που είναι αποθηκευμένη στη βδ με τη χρήση ενός μοντέλου δεδομένων

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΞΑΜΗΝΟ Η ΟΝΟΜΑΤΕΠΩΝΥΜΟ ΦΟΙΤΗΤΗ : ΜΟΣΧΟΥΛΑ ΟΛΓΑ ΑΡΙΘΜΟΣ ΜΗΤΡΩΟΥ : 30/02 ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ : ΥΛΟΠΟΙΗΣΗ ΣΥΣΤΗΜΑΤΟΣ ΙΑΧΕΙΡΙΣΗΣ ΣΥΝΕ ΡΙΩΝ ΜΕ ΧΡΗΣΗ

Διαβάστε περισσότερα

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που 7.7 Πρωτόκολλο ARP 1 ύο είδη διευθύνσεων: MAC - IP Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που µπορεί

Διαβάστε περισσότερα

Certified Data Base Designer (CDBD)

Certified Data Base Designer (CDBD) Certified Data Base Designer (CDBD) Εξεταστέα Ύλη (Syllabus) Πνευµατικά ικαιώµατα Το παρόν είναι πνευµατική ιδιοκτησία της ACTA Α.Ε. και προστατεύεται από την Ελληνική και Ευρωπαϊκή νοµοθεσία που αφορά

Διαβάστε περισσότερα

1. ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ

1. ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ 1. ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ Τα δεδομένα που θα επεξεργασθούμε στη διάρκεια του εργαστηρίου παραχωρήθηκαν από την εταιρεία ICAP ειδικά για τις ανάγκες του μαθήματος. Τα δεδομένα αυτά αντλήθηκαν από την

Διαβάστε περισσότερα

Υποδείγματα Ανάπτυξης

Υποδείγματα Ανάπτυξης Υποδείγματα Ανάπτυξης περιεχόμενα παρουσίασης Αποσύνθεση Αφαίρεση Μοντελοποίηση Η δεδομένο λειτουργική προσέγγιση Η αντικειμενοστρεφής προσέγγιση αποσύνθεση Όταν επιχειρούμε τη λύση ενός προβλήματος, πρώτα

Διαβάστε περισσότερα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ ΜΑΘΗΜΑ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΑΚΑ. ΕΤΟΣ 2012-13 Ι ΑΣΚΟΝΤΕΣ Ιωάννης Βασιλείου Καθηγητής, Τοµέας Τεχνολογίας

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ 1 Βάση Δεδομένων: Με το όρο Βάση Δεδομένων εννοούμε ένα σύνολο δεδομένων που είναι οργανωμένο

Διαβάστε περισσότερα

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Εισαγωγή στην πληροφορική Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Αλγόριθµοι, στοιχεία

Διαβάστε περισσότερα

Τεχνολογία Λογισμικού

Τεχνολογία Λογισμικού Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού 14/11/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Μοντέλα Παράστασης

Διαβάστε περισσότερα

Εισαγωγή. Σχεδιασµός µιας Β

Εισαγωγή. Σχεδιασµός µιας Β Σχεδιασµός µιας Β Εισαγωγή ανάλυση ποιας πληροφορίας και της σχέσης ανάµεσα στα στοιχεία της περιγραφή της δοµής - σχήµα σε διάφορους συµβολισµούς ή µοντέλα Μοντέλο Οντοτήτων - Συσχετίσεων (κεφ. 3) γραφικό

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ Εισαγωγή στην επιστήµη των υπολογιστών Πράξεις µε µπιτ 1 Πράξεις µε µπιτ 2 Αριθµητικές Πράξεις σε Ακέραιους Πρόσθεση, Αφαίρεση, Πολλαπλασιασµός, Διαίρεση Ο πολλαπλασιασµός και η διαίρεση στο επίπεδο του

Διαβάστε περισσότερα

Περίληψη ιπλωµατικής Εργασίας

Περίληψη ιπλωµατικής Εργασίας Περίληψη ιπλωµατικής Εργασίας Θέµα: Εναλλακτικές Τεχνικές Εντοπισµού Θέσης Όνοµα: Κατερίνα Σπόντου Επιβλέπων: Ιωάννης Βασιλείου Συν-επιβλέπων: Σπύρος Αθανασίου 1. Αντικείµενο της διπλωµατικής Ο εντοπισµός

Διαβάστε περισσότερα

Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων

Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων Εισαγωγή Θα εξετάσουµε πότε ένα σχεσιακό σχήµα για µια βάση δεδοµένων είναι «καλό» Λογικός Σχεδιασµός Σχεσιακών Σχηµάτων Γενικές Οδηγίες Η Μέθοδος της Αποσύνθεσης Επιθυµητές Ιδιότητες της Αποσύνθεσης Συνένωση

Διαβάστε περισσότερα

ΕΝ ΕΙΚΤΙΚΗ ΛΥΣΗ ΚΑΙ ΣΧΟΛΙΑ ΣΤΗΝ ΠΡΩΤΗ ΑΣΚΗΣΗ ΣΧΕ ΙΑΣΜΟΙ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ

ΕΝ ΕΙΚΤΙΚΗ ΛΥΣΗ ΚΑΙ ΣΧΟΛΙΑ ΣΤΗΝ ΠΡΩΤΗ ΑΣΚΗΣΗ ΣΧΕ ΙΑΣΜΟΙ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΕΘΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΕΙΟ Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Ακαδηµαϊκό Έτος 2007-2008 Μάθηµα: ΒΑΣΕΙΣ Ε ΟΜΕΩ ιδάσκων: Καθ. Ιωάννης Βασιλείου Ε ΕΙΚΤΙΚΗ ΛΥΣΗ ΚΑΙ ΣΧΟΛΙΑ ΣΤΗ ΠΡΩΤΗ ΑΣΚΗΣΗ

Διαβάστε περισσότερα

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ Οι Μηχανικοί Λογισμικού παράγουν μοντέλα που βοηθούν στη διατύπωση των απαιτήσεων με τη μορφή προδιαγραφών. Η εργασία της παραγωγής μοντέλων περιγράφεται ως ανάλυση απαιτήσεων. Η ανάλυση

Διαβάστε περισσότερα

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός 7 Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός Σχεσιακή Άλγεβρα H Σχεσιακή Άλγεβρα (relational algebra) ορίζει ένα σύνολο πράξεων που εφαρμόζονται σε μία ή περισσότερες σχέσεις

Διαβάστε περισσότερα

Σχεσιακή δοµή δεδοµένων

Σχεσιακή δοµή δεδοµένων Σχεσιακή δοµή δεδοµένων Μοντελοποίηση δεδοµένων (data modeling) Εννοιολογικό: μοντέλα δεδομένων. Λογικό: δομή δεδομένων. Φυσικό: δοµή αρχείων. Μοντέλο της Βάσης Σχήµα της Βάσης Στιγµιότυπο της βάσης Μοντέλο

Διαβάστε περισσότερα

Οι διαθέσιμες μέθοδοι σε γενικές γραμμές είναι:

Οι διαθέσιμες μέθοδοι σε γενικές γραμμές είναι: Χωρική Ανάλυση Ο σκοπός χρήσης των ΣΓΠ δεν είναι μόνο η δημιουργία μίας Β.Δ. για ψηφιακές αναπαραστάσεις των φαινομένων του χώρου, αλλά κυρίως, η βοήθειά του προς την κατεύθυνση της υπόδειξης τρόπων διαχείρισής

Διαβάστε περισσότερα