ΘΕΜΑ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΘΕΜΑ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ “Προσθήκη υποστήριξης για Ανάκτηση, και επεξεργασία χρονικών δεδομένων σε περιβάλλον σχεσιακής βάσης δεδομένων με δηλωτικές-διαδικαστικές επεκτάσεις και συναρτήσεις στη γλώσσα Transact-SQL”. ΣΠΟΥΔΑΣΤΕΣ : Τζενίδου Στέλλα Καρασακαλίδης Σάββας ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ Δρ. Ιωάννης Κόκκινος 22/10/2017
Σκοπός Oι περισσότερες εφαρμογές βάσεων δεδομένων έχουν να αντιμετωπίσουν και δεδομένα με χρονική διακύμανση όπως ανάκτηση ιστορικών πληροφοριών που είναι αποθηκευμένες μαζί με την τρέχουσα κατάσταση. Η ιδέα είναι πως είναι χρήσιμο να αναλύουμε τα δεδομένα για να δούμε πως έμοιαζαν κάποια δεδομένη χρονική στιγμή. Η υποστήριξη έγκυρου χρόνου είναι απούσα στη γλώσσα SQL .Πολλές κοινές χρονικές ερωτήσεις είναι είτε δύσκολες να εξομοιωθούν μέσω SQL είτε απαιτούν ενσωμάτωση της SQL σε μια δηλωτική / διαδικαστική γλώσσα, λόγω της έλλειψης υποστήριξης πινάκων έγκυρου – χρόνου στο μοντέλο δεδομένων και στην κατασκευή ερωτήσεων της SQL . Ο σκοπός της πτυχιακής εργασίας είναι η ανάκτηση και η διαχείριση χρονικά εξαρτώμενων δεδομένων σε περιβάλλον σχεσιακής βάσης δεδομένων χρησιμοποιώντας τη γλώσσα Transact – SQL . Η προδιαγραφή της γλώσσας Temporal SQL (TSQL) που είναι υπερσύνολο της SQL –2 ασχολείται με χρονικά εξαρτώμενα δεδομένα σε πίνακες έγκυρου χρόνου ( valid-time tables ) . 22/10/2017
Δημιουργία Βάσης Δεδομένων Η βάση δεδομένων που δημιουργήσαμε ονομάζεται “ M –VISION “ και αποτελείται από οκτώ πίνακες έγκυρου χρόνου . Οι πίνακες που δημιουργήσαμε παρουσιάζονται παρακάτω : Πίνακας Employees : για καταχώρηση στοιχείων των εργαζομένων Πίνακας FamilyChildren : για την οικογενειακή κατάσταση κάθε εργαζομένου Πίνακας Positions : για την αντιστοίχιση θέσεων εργασίας με τίτλους εργασίας Πίνακας PositionHistory : για το ιστορικό των θέσεων εργασίας κάθε εργαζομένου Πίνακας SalaryHistory : για τη μισθολογική κατάσταση των εργαζομένων Πίνακας PlacesHistory : για το ιστορικό των χώρων εργασίας κάθε εργαζομένου Πίνακας JobTitles : για την αντιστοίχιση του κωδικού θέσης εργασίας με τον τίτλο εργασίας Πίνακας WorkingPlaces : για πληροφορίες σχετικά με τους χώρους εργασίας 22/10/2017
Χρονικές Περίοδοι Σχήμα 1 : Χρονικές σχέσεις μεταξύ δύο περιόδων Μία περίοδος είναι ένα τμήμα της χρονικής γραμμής που αρχίζει σε μια δεδομένη χρονική στιγμή και που ολοκληρώνεται σε μια πιο πρόσφατη χρονική στιγμή . Συγκεκριμένα μπορεί να οριστεί από μία αρχική ημερομηνία π.χ. StartDate και μία τελική ημερομηνία π.χ. EndDate . Υπάρχουν τεσσάρων ειδών αναπαραστάσεις μιας περιόδου που υποστηρίζει ο SQLServer 1. Ανοιχτή – ανοιχτή αναπαράσταση μιας περιόδου , δηλ . ( StartDate , EndDate ) 2. Ανοιχτή – κλειστή αναπαράσταση μιας περιόδου , δηλ . ( StartDate , EndDtae ] 3. Κλειστή – κλειστή αναπαράσταση μιας περιόδου , δηλ . [ StartDate , EndDate ] 4. Κλειστή – ανοιχτή αναπαράσταση μιας περιόδου , δηλ . [ StartDate , EndDate ) H αναπαράσταση που χρησιμοποιήσαμε είναι η κλειστή – ανοιχτή αναπαράσταση ζευγαριών τύπου Datetime ,δηλαδή [ StartDate , EndDate ) . 22/10/2017 Σχήμα 1 : Χρονικές σχέσεις μεταξύ δύο περιόδων
Χρονικές Περίοδοι Διαδικασίες Περιόδου Microsoft SQL Server2000 Τύπος δεδομένων : περίοδος [ DATETIME , DATETIME ) Predicates ( Κατηγορήματα ) : Λογικές Συνθήκες a equals b a1 = b1 AND a2 = b2 a before b a2 < b1 a meets b a2 = b1 a overlaps b a1 < b1 AND b1 < a2 a during b b1 < a1 AND a2 < b2 a starts b a1 = b1 AND a2 < b2 a finishes b b1 < a1 AND a2 = b2 a IS NULL a1 IS NULL Πίνακας 1 : Διαδικασίες περιόδου στο Microsoft SQL Server2000 22/10/2017
Συναρτήσεις της Transact - SQL H Transact – SQL διαθέτει πολλές ενσωματωμένες συναρτήσεις ημερομηνίας και ώρας τις οποίες θα αναφέρουμε παρακάτω . Οι συναρτήσεις ημερομηνίας και ώρας δέχονται ως είσοδο τιμές τύπου ημερομηνίας και ώρας και επιστρέφουν τιμές είτε αλφαριθμητικές , είτε αριθμητικές είτε ημερομηνίας και ώρας . Οι συναρτήσεις ημερομηνίας και ώρας που υποστηρίζει ο SQL Server2000 παρουσιάζονται στον παρακάτω πίνακα . Συνάρτηση Παράμετροι Λειτουργία DATEADD τμ_ημερομ , αριθμός , ημερομηνία Υπολογίζει μια νέα ημερομηνία , προσθέτοντας στην ημερομηνία τον καθορισμένο αριθμό χρονικών διαστημάτων τμ_ημερομ. DATEDIFF τμ_ημερομ. , αρχ_ημερομ , τελ_ημερομ Επιστρέφει τον αριθμό των διαστημάτων τμ_ημερομ μεταξύ των δύο καθορισμένων ημερομηνιών . DATENAME τμ_ημερομ , ημερομηνία Επιστρέφει το όνομα του καθορισμένου τμήματος τμ_ημερομ της ημερομηνίας ως αλφαριθμητικό . DATEPART Επιστρέφει το καθορισμένο τμήμα τμ_ημερομ της ημερομηνίας ως ακέραια τιμή DAY ημερομηνία Επιστρέφει την ημέρα της καθορισμένης ημερομηνίας ως ακέραια τιμή . GETDATE Επιστρέφει την τρέχουσα ημερομηνία και ώρα του συστήματος MONTH Επιστρέφει το μήνα της καθορισμένης ημερομηνίας ως ακέραια τιμή . YEAR Επιστρέφει το έτος της καθορισμένης ημερομηνίας ως ακέραια τιμή .
Οριζόμενες από το χρήστη συναρτήσεις Οι οριζόμενες από το χρήστη συναρτήσεις ( user-defined functions ) είναι μία νέα δυνατότητα του SQL Server2000 . . Μία τέτοιου είδους συνάρτηση μοιάζει με μία αποθηκευμένη διαδικασία στο ότι δέχεται παραμέτρους εισόδου και επιστρέφει ένα αποτέλεσμα . Οι οριζόμενες από το χρήστη συναρτήσεις κατατάσσονται σε δύο κατηγορίες ( με βάση τον τύπο δεδομένων της επιστρεφόμενης τιμής τους ) σε βαθμωτές ή με τιμή πίνακα . Για την επεξεργασία των περιόδων δημιουργήσαμε κυρίως βαθμωτές συναρτήσεις οι οποίες παρουσιάζονται παρακάτω : 1) Συνάρτηση BeforePeriods : όταν μία περίοδος προηγείται μιας άλλης περιόδου 2) Συνάρτηση DuringPeriods : όταν μία περίοδος αποτελεί τμήμα μιας άλλης περιόδου 3) Συνάρτηση MeetsPeriods : όταν το τέλος μιας περιόδου αποτελεί την αρχή μιας άλλης 4) Συνάρτηση OverlapPeriods : όταν δύο περίοδοι επικαλύπτονται σε κάποιο σημείο 5) Συνάρτηση StartPeriods : όταν δύο περίοδοι αρχίζουν την ίδια χρονική στιγμή 6) Συνάρτηση FinishPeriods : όταν δύο περίοδοι τελειώνουν την ίδια χρονική στιγμή 7) Συνάρτηση EqualPeriods : όταν δύο περίοδοι είναι χρονικά ίσες 8) Συνάρτηση IsNullPeriods : όταν μία περίοδος είναι Null
Παράδειγμα δημιουργίας βαθμωτής συνάρτησης Δημιουργία συνάρτησης OverlapsPeriods : CREATE FUNCTION OverlapslPeriods (@p1 DATETIME, @p2 DATETIME, @q1 DATETIME, @q2 DATETIME) returns bit as begin declare @a bit if (@p1 < @q1 and @q1 < @p2) set @a = 1 else set @a = 0 RETURN (@a) End Το ερώτημα που χρησιμοποιούμε γι’ αυτή τη συνάρτηση είναι το ακόλουθο : 22/10/2017
Διαδικασίες ( πράξεις ) χρονικών περιόδων Οι πράξεις που μπορούμε να κάνουμε μεταξύ δύο περιόδων παρουσιάζονται παρακάτω : 1. Extend δύο χρονικών περιόδων Με τη συγκεκριμένη πράξη προκύπτει ένα χρονικό διάστημα που αποτελείται από τα κοινά σημεία των δύο περιόδων καθώς και τα ενδιάμεσα χρονικά σημεία . 2. Αφαίρεση δύο χρονικών περιόδων [ Α – Β ) Με την αφαίρεση δύο χρονικών περιόδων προκύπτει ένα χρονικό διάστημα που αποτελείται από τα σημεία της πρώτης περιόδου που δεν είναι κοινά με της δεύτερης περιόδου . 3. Τομή δύο χρονικών περιόδων Με την τομή δύο χρονικών περιόδων προκύπτει ένα χρονικό διάστημα που αποτελείται από τα κοινά σημεία των δύο περιόδων . 2. Ένωση δύο χρονικών περιόδων Με την ένωση δύο χρονικών περιόδων προκύπτει ένα χρονικό διάστημα που αποτελείται από τα κοινά και μη κοινά σημεία των δύο περιόδων . Σχήμα 2 : Πράξεις χρονικών περιόδων 22/10/2017
Η χρησιμότητα των TRIGGERS To Trigger ( σκανδάλη ) είναι ένας ειδικός τύπος αποθηκευμένης διαδικασίας που εκτελείται αυτόματα από τον SQL Server όταν τροποποιείται μια γραμμή χρησιμοποιώντας τις διαταγές INSERT , UPDATE ή DELETE . Ποιος είναι ο σκοπός δημιουργίας των Triggers ; Ο σκοπός δημιουργίας των Triggers είναι η προστασία των εγγραφών ενός πίνακα από λανθασμένα INSERT , UPDATE , DELETE ενός χρήστη . Τα Triggers που δημιουργήσαμε για τις ανάγκες της εφαρμογής είναι : Δημιουργία Trigger για τον πίνακα Employees Δημιουργία Trigger για τον πίνακα PositionHistory Δημιουργία Trigger για τον πίνακα SalaryHistory Δημιουργία Trigger για τον πίνακα PlacesHistory Παράδειγμα δημιουργίας Trigger για τον πίνακα Employees :
Αναφορές Χρονικών Δεδομένων Δημιουργία SQL ερωτημάτων για εξαγωγή τρέχων και προγενέστερων καταστάσεων Παράδειγμα 1 : Ποια είναι τρέχουσα κατάσταση του εργαζομένου Αναστάσιου ; Παράδειγμα 2 : Ποια ήταν η θέση εργασίας του Αναστάσιου την 1-01-1997 ;
Τροποποίηση Χρονικών Πινάκων Δύο κατηγορίες τροποποιήσεων Current Insert , Update , Delete Με τις συγκεκριμένες ενέργειες μπορούμε να εισάγουμε , να μετακινήσουμε και να διαγράψουμε έναν εργαζόμενο σε μια θέση εργασίας από την τρέχουσα ημερομηνία ( current ) μέχρι την 1/01/3000 ( συμβολίζει την ειδική περίπτωση Until Changed ) . Sequenced Insert , Update , Delete Με τις συγκεκριμένες ενέργειες μπορούμε να εισάγουμε , να μετακινήσουμε ή να δώσουμε προαγωγή καθώς επίσης και να διαγράψουμε έναν εργαζόμενο από μια θέση εργασίας την περίοδο που επιθυμούμε ( καθορισμένη ημερομηνία ). Στην περίπτωση της διαγραφής ενός εργαζομένου από μια θέση εργασίας τον διαγράφουμε ταυτόχρονα και από τη μισθολογική κατάσταση . 22/10/2017
Τροποποίηση Χρονικών Πινάκων Παράδειγμα 1 : Την τρέχουσα ημερομηνία ο Γιάννης Ανδρέου παίρνει προαγωγή ως Διοικητικό Στέλεχος , Επιτροπής Ερευνών . Σχήμα 3 : Current Update 22/10/2017
Τροποποίηση Χρονικών Πινάκων Παράδειγμα 2 : Ο Γιάννης Ανδρέου πήρε προαγωγή ως Επίκουρος Καθηγητής , Τμήμα Πληροφορικής από 1/03/2005 έως 1/01/2006 . 22/10/2017 Σχήμα 4 : Sequenced Update
Τροποποίηση Χρονικών Πινάκων Παράδειγμα 3 : Ο Γιάννης Ανδρέου απολύεται ως Επίκουρος Καθηγητής , Τμήμα Πληροφορικής τον Ιανουάριο του 2004 . 22/10/2017 Σχήμα 5 : Sequenced Delete
Περιγραφή της Εφαρμογής Η ανάπτυξη της εφαρμογής πραγματοποιήθηκε με χρήση της γλώσσας προγραμματισμού C++ Builder . Η σύνδεση του εξωτερικού προγράμματος με τον SQL Server2000 γίνεται μέσω ODBC Drivers . Σκοπός της εφαρμογής είναι η παρουσίαση και η επεξεργασία χρονικά εξαρτώμενων δεδομένων . Η πρόσβαση στην εφαρμογή επιτυγχάνεται με συγκεκριμένο κωδικό ασφαλείας για προστασία της εφαρμογής . 22/10/2017
Δυνατότητες της Εφαρμογής Μέσω της εφαρμογής μπορούμε να εξάγουμε συγκεκριμένες πληροφορίες που τυπώνονται στην οθόνη και αναφορές χρονικών δεδομένων που μπορούμε και να τις εκτυπώσουμε . Παράδειγμα 1 : Πληροφορίες που μπορούμε να εξάγουμε από τον πίνακα PositionHistory 22/10/2017
Δυνατότητες της Εφαρμογής Παράδειγμα 2 : Εμφάνιση του TabSheet Reports 22/10/2017
Δυνατότητες της Εφαρμογής Παράδειγμα 3 : Εκτύπωση Report : Ποιοι υπάλληλοι δεν έχουν παιδιά 22/10/2017
Δυνατότητες της Εφαρμογής Μέσω της εφαρμογής μπορούμε να επεξεργαστούμε χρονικά δεδομένα , δηλαδή να εισάγουμε , να μετακινήσουμε και να διαγράψουμε εγγραφές στους πίνακες της βάσης δεδομένων που δημιουργήσαμε έχοντας βέβαια την προστασία των Triggers για αποφυγή λανθασμένων ενεργειών . Επεξεργασία χρονικών δεδομένων
Ακολουθεί παρουσίαση του προγράμματος 22/10/2017