Εργαστηριακός Οδηγός
Ελληνικά Ακαδημαϊκά Ηλεκτρονικά
Συγγράμματα και Βοηθήματα
Τίτλος Ηλεκτρονικού Συγγράμματος
Συγγραφή
Παναγιώτης Συμεωνίδης
Αναστάσιος Γούναρης
Κριτικός αναγνώστης
Ιωάννης Θεοδωρίδης
Συντελεστές έκδοσης
Γλωσσικη επιμελεια: Φώτης Συμεωνίδης
Γραφιστικη επιμελεια: Χρήστος Άνδρας
Τεχνικη επεξεργασια: Ανδρέας Πάσχος
@ Copyright Θεσσαλονίκη 2015
Πνευματικά δικαιώματα
Σύνδεσμος Ελληνικων Ακαδημαϊκων Βιβλιοθηκών
Εθνικό Μετσόβιο Πολυτεχνείο
Ηρώων Πολυτεχνείου 9, 15780 Ζωγράφου
ISBN:
Το βιβλίο αυτό αποτελεί έναν εργαστηριακό οδηγό σε θέματα βάσεων, αποθηκών και εξόρυξης δεδομένων με τον MS SQL Server. Αποτελείται από δύο μέρη.
Αναλυτική περιγραφή των δυνατοτήτων και οδηγίες χρήσης του ebook δίνονται στην ακόλουθη 3λεπτη Βίντεο Παρουσίαση
Πρώτο μέρος: Εργαστηριακός Οδηγός σε Θέματα Βάσεων Δεδομένων (Κεφάλαια 1-5)
Το πρώτο μέρος περιγράφει τις βασικές λειτουργίες και
δυνατότητες που προσφέρονται από ένα σύστημα διαχείρισης βάσεων δεδομένων.
Συγκεκριμένα, στο βιβλίο αυτό περιγράφονται οι δυνατότητες του SQL Server
2014. Ο SQL Server είναι ένα ισχυρό εργαλείο που περιέχει ένα πλήθος
δυνατοτήτων, όπως οι εντολές που αφορούν την γλώσσα ορισμού δεδομένων (Data Definition Language - DDL), εντολές της γλώσσας χειρισμού δεδομένων (Data Manipulation Language - DML),
και την γλώσσα προγραμματισμού Transact-SQL για την δημιουργία
αποθηκευμένων διαδικασιών, εναυσμάτων και συναλλαγών.
Το πρώτο κεφάλαιο είναι εισαγωγικό και ο αναγνώστης θα δει πώς μπορεί να εγκαταστήσει τον SQL Server 2014. Συγκεκριμένα, στο παρόν κεφάλαιο περιγράφονται τα βασικά βήματα εγκατάστασης του SQL Server. Επιπλέον, περιγράφεται ο έλεγχος που απαιτείται να γίνει, προκειμένου να βεβαιωθεί η καλή λειτουργία της εγκατάστασης. Τέλος, γίνεται μια σύντομη ξενάγηση στο βασικό γραφικό περιβάλλον του SQL Server Management Studio.
Το δεύτερο κεφάλαιο περιγράφει την δημιουργία μιας βάσης δεδομένων που αφορά ένα DVDclub. Θα εργαστούμε κυρίως με εντολές από την γλώσσα ορισμού δεδομένων (DDL). Θα συζητήσουμε για τους διαφορετικούς τύπους δεδομένων, τον τρόπο δημιουργίας πινάκων με γραφικό τρόπο και με εντολές της SQL. Τέλος, θα δημιουργήσουμε συσχετίσεις μεταξύ των πινάκων στο Database Diagram και θα εισάγουμε τιμές στους πίνακες μας.
Στο τρίτο κεφάλαιο, θα παρουσιάσουμε βασικά και σύνθετα ερωτήματα της SQL. Τα ερωτήματα θα υποβληθούν στην βάση δεδομένων DVDclub, που δημιουργήθηκε στο προηγούμενο κεφάλαιο. Συγκεκριμένα, θα μελετηθούν εντολές της SQL που αφορούν την διαχείριση δεδομένων (DML). Ενδεικτικά αναφέρεται ότι θα παρουσιαστούν ερωτήματα σύνδεσης πινάκων, ομαδοποίησης, πράξεων συνόλων και η δημιουργία ερωτημάτων με γραφικό τρόπο (Query by Example) μέσα από τo περιβάλλον του Query Designer.
Στο τέταρτο κεφάλαιο, θα παρουσιάσουμε προχωρημένες λειτουργίες που γίνονται στο περιβάλλον του SQL Server. Συγκεκριμένα, θα μελετηθούν εντολές της SQL που αφορούν την γλώσσα DDL, όπως την μεταβολή της δομής των πινάκων, την διαγραφή τους, κτλ. Άλλα προχωρημένα θέματα που θα παρουσιαστούν είναι η βελτιστοποίηση ερωτημάτων με την χρήση indices, οι αποθηκευμένες διαδικασίες, τα εναύσματα και οι συναλλαγές με την βοήθεια της γλώσσας προγραμματισμού Transact-SQL.
Στο πέμπτο κεφάλαιο, θα περιγράψουμε την δημιουργία φορμών, προκειμένου να εισάγουμε δεδομένα και να εμφανίζουμε στοιχεία από τους πίνακες της βάσης DVDclub με έναν τυποποιημένο τρόπο. Συγκεκριμένα, θα δούμε πώς μπορούμε να φτιάχνουμε απλές κύριες φόρμες καθώς και κύριες με δευτερεύουσες φόρμες στο περιβάλλον της MS Access. Επιπροσθέτως, θα δούμε την δημιουργία λιστών αναζήτησης για την γρήγορη εύρεση στοιχείων σε μια φόρμα αναζήτησης και την δημιουργία υπολογιζόμενων πεδίων φορμών (derived attributes).
Δεύτερο μέρος: Εργαστηριακός Οδηγός σε Θέματα Αποθηκών και Εξόρυξης Δεδομένων (Κεφάλαια 6-11)
To δεύτερο μέρος του βιβλίου (Κεφάλαια 6-11) περιγράφει τις βασικές τεχνικές εξόρυξης δεδομένων και τη διαδικασία δημιουργίας κύβων δεδομένων (data cubes). Εξόρυξη δεδομένων (Data Mining) ή αλλιώς Knowledge Discovery in Databases (KDD), είναι μία προηγμένη διαδικασία ανάλυσης μεγάλου όγκου δεδομένων. Αυτή η ανάλυση των δεδομένων μπορεί να γίνει με τη χρήση τεχνικών όπως decision trees, clustering, association rules, time series, κτλ. Οι κύβοι δεδομένων είναι ένας τρόπος οργάνωσης των δεδομένων σε συγκεντρωτικούς πίνακες (Pivot tables) για την πραγματοποίηση γρήγορης ανάλυσης των δεδομένων και την λήψη στρατηγικών αποφάσεων. Οι τεχνικές αποθηκών και εξόρυξης δεδομένων ξεπερνούν κατά πολύ σε δυνατότητες ανάλυσης την DML. Στο δεύτερο μέρος λοιπόν, περιγράφονται οι παραπάνω τεχνικές, μέσα από τη χρήση του MS SQL Server 2014 Business Intelligence. Ο Business Intelligence του Visual Studio είναι ένα ισχυρό εργαλείο που περιέχει ένα πλήθος από αλγορίθμους για την υλοποίηση των τεχνικών εξόρυξης δεδομένων που έχουν ήδη αναφερθεί. Κάθε κεφάλαιο του δεύτερου μέρους περιγράφει μία διαφορετική τεχνική εξόρυξης δεδομένων, με εξαίρεση το τελευταίο, που περιγράφει τη δημιουργία ενός κύβου δεδομένων.
Το έκτο κεφάλαιο είναι εισαγωγικό. Ο αναγνώστης θα δει πώς μπορεί να δημιουργήσει μία βάση δεδομένων με τη χρήση του SQL Server Management Studio και στη συνέχεια να εισάγει αυτή τη βάση σε ένα νέο project που θα δημιουργήσει στο Data Tools του Visual Studio. Συγκεκριμένα, θα εισάγουμε και θα κάνουμε προεπεξεργασία δεδομένων σε τρεις διαφορετικές βάσεις δεδομένων (MovieClick, FoodMart, AdventureWorks), προκειμένου σε επόμενα κεφάλαια να εφαρμόσουμε σε αυτές τεχνικές εξόρυξης δεδομένων.
Το έβδομο κεφάλαιο περιγράφει την κατηγοριοποίηση με τη χρήση δένδρων απόφασης. Γίνεται περιγραφή του τρόπου επιλογής των δεδομένων της βάσης δεδομένων που χρησιμοποιούμε και στην συνέχεια ακολουθεί μία αναλυτική περιγραφή των παραμέτρων του αλγορίθμου. Στο παράδειγμα που περιγράφεται, καθώς και στις ασκήσεις που συμπληρώνουν την ενότητα, γίνεται προβολή του δένδρου και αξιολόγηση της ικανότητας πρόβλεψης του μοντέλου μας για διαφορετικές τιμές των παραμέτρων του αλγορίθμου.
Το όγδοο κεφάλαιο ασχολείται με το clustering μέσω των αλγορίθμων ομαδοποίησης k-means και EM clustering. Όπως και στο προηγούμενο κεφάλαιο, γίνεται μία αναλυτική περιγραφή των παραμέτρων του κάθε αλγορίθμου και βλέπουμε τα clusters που δημιουργούνται μεταβάλλοντας τις τιμές των παραμέτρων αυτών. Η αξιολόγηση των clusters γίνεται με δύο τρόπους: με την χρήση διαγραμμάτων και με την αναλυτική εξερεύνηση του κάθε cluster ώστε να δούμε από ποια στοιχεία-μέλη συνίσταται το καθένα.
Στο ένατο κεφάλαιο, περιγράφεται ο αλγόριθμος εξαγωγής κανόνων συσχέτισης. Ο συγκεκριμένος αλγόριθμος παράγει συσχετίσεις μεταξύ συνόλων αντικειμένων και ανήκει στην οικογένεια των Apriori αλγορίθμων. Οι ομάδες αντικειμένων που εξάγονται ονομάζονται itemsets (στοιχειοσύνολα). Με βάση τα itemssets που έχουν παραχθεί, εξάγονται οι κανόνες συσχέτισης μεταξύ των αντικειμένων. Ένας κανόνας συσχέτισης σηματοδοτεί την συσχέτιση ενός συνόλου αντικειμένων από ένα άλλο σύνολο αντικειμένων. Μέσα από τις ασκήσεις περιγράφονται αναλυτικά τα itemsets και οι association rules που δημιουργεί ο αλγόριθμος αλλάζοντας τις τιμές των παραμέτρων του.
Στο δέκατο κεφάλαιο, περιγράφεται η δημιουργία ενός μοντέλου χρονοσειρών (time series). Συγκεκριμένα, θα μάθουμε τον τρόπο με τον οποίο δημιουργείται και χρησιμοποιείται ένα μοντέλο χρονοσειρών για την βάση δεδομένων AdventureWorks. Η Adventure Works είναι μια βάση δεδομένων που αφορά μια υποθετική πολυεθνική εταιρία που εμπορεύεται ποδήλατα σε διάφορες ηπείρους/χώρες. Το τμήμα πωλήσεων επιθυμεί να προβλέψει τις μελλοντικές πωλήσεις ανά μοντέλο ποδηλάτου βάσει των πωλήσεων που σημειώθηκαν στο παρελθόν. Ένα μοντέλο χρονοσειρών είναι πολύ χρήσιμο σε τέτοιες περιπτώσεις.
Το ενδέκατο κεφάλαιο αποτελεί μία εισαγωγή στις αποθήκες και τους κύβους δεδομένων. Ο κύβος είναι μια πολυδιάστατη δομή δεδομένων που εμπεριέχει μέσα της συναθροιστικές πληροφορίες για μια ή περισσότερες βάσεις δεδομένων. Η συνάθροιση της πληροφορίας οδηγεί σε γρήγορους χρόνους απόκρισης ερωτημάτων που τίθενται από υψηλόβαθμα στελέχη επιχειρήσεων, προκειμένου αυτά να λάβουν συνήθως στρατηγικές αποφάσεις για την επιχείρηση.
Συμπερασματικά, ένας χρήστης του SQL μπορεί με τους αλγορίθμους εξόρυξης δεδομένων που διατίθενται από το περιβάλλον να προβλέψει τις τιμές των χαρακτηριστικών που τον ενδιαφέρουν, ενώ με τη δημιουργία κύβων δεδομένων μπορεί να διαχειριστεί μεγαλύτερο όγκο δεδομένων ευκολότερα και αποτελεσματικότερα, προκειμένου να λάβει στρατηγικές αποφάσεις.
Σε αυτό το σημείο, θα ήταν παράλειψη μου να μην ευχαριστήσω όλα τα μέλη του Εργαστηρίου Τεχνολογίας και Επεξεργασίας Δεδομένων (Delab) του Τμήματος Πληροφορικής ΑΠΘ που κατά καιρούς έχουν αναλάβει την διδασκαλία του εργαστηριακού μέρους των μαθημάτων Βάσεων, Αποθηκών και Εξόρυξης Δεδομένων, συνεισφέροντας σε υλικό και ασκήσεις, ενώ μια αρχική έκδοση του εργαστηριακού οδηγού είχε δημιουργηθεί από τον κ. Α. Νανόπουλο. Επίσης, θέλω να ευχαριστήσω ιδιαίτερα τον συνάδελφο και φίλο μου Χρήστο Άνδρα που βοήθησε στην επικαιροποίηση των κεφαλαίων του πρώτου μέρους του βιβλίου, προκειμένου αυτά να προσαρμοστούν στο νέο περιβάλλον του SQL Server 2014, καθώς επίσης και για τις χρήσιμες παρατηρήσεις του που οδήγησαν στην περαιτέρω βελτίωση του βιβλίου. Επιπροσθέτως, να ευχαριστήσω τoυς μεταπτυχιακούς φοιτητές Φοίβο Κολιόπουλο, Στέλλα Γκουτζιούρη, Στέλλα Μαυρομάτη και Ναούμ Τσιόπτσια που βοήθησαν στην επικαιροποίηση (από την προηγούμενη έκδοση) των κεφαλαίων του δεύτερου μέρους του βιβλίου, προκειμένου αυτά να προσαρμοστούν στο νέο περιβάλλον του SQL Server 2014.
Η γλώσσα ορισμού περιεχομένου χρησιμοποιείται για τον ορισμό των πινάκων και των μεταξύ τους σχέσεων. Με τη γλώσσα αυτή δηλώνουμε τα χαρακτηριστικά που έχει κάθε πίνακας και τους αντίστοιχους τύπους δεδομένων του κάθε χαρακτηριστικού.
Η γλώσσα χειρισμού δεδομένων χρησιμοποιείται για την επεξεργασία, την ενημέρωση, την εισαγωγή και την διαγραφή δεδομένων.
Τα Διάγραμματα οντοτήτων-συσχετίσεων παρέχουν ένα απλό και κατανοητό τρόπο περιγραφής της δομής των δεδομένων της Βάσης Δεδομένων
Αποτελεί ένα δομημένο τρόπο σύνταξης ερωτοαποκρίσεων για την αναζήτηση περιεχομένου στη βάση δεδομένων μας.
Ένας νέος πίνακας δημιουργείται με τη χρήση της εντολής CREATE TABLE ή σύνταξη της οποίας έχει ως εξής :
CREATE TABLE(
<όνομα πεδίου 1> <τύπος πεδίου 1>,
<όνομα πεδίου 2> <τύπος πεδίου 2>,
<όνομα πεδίου Ν> <τύπος πεδίου Ν>);
Μπορούμε να διαγράψουμε ολόκληρο πίνακα, μαζί με τα δεδομένα που τυχόν έχει χρησιμοποιώντας την εντολή DROP σύμφωνα με το ακόλουθο πρότυπο :
DROP TABLE <όνομα πίνακα>
H πρόταση ON UPDATE προσδιορίζει την ενέργεια που θα εκτελεστεί αν θέλουμε να αλλάξουμε την τιμή ενός πεδίου:
UPDATE <όνομα πίνακα> SET <όνομα πεδίου> <νέα τιμή πεδίου> WHERE <κριτήρια επιλογής εγγραφών>
Ο σκοπός είναι πολύ απλός, διαγράφει εγγραφές από ένα πίνακα. Και πάλι έχομε την δυνατότητα να ορίσουμε ποιές εγγραφές θέλουμε να διαγραφούν (ή και όλες) π.χ.:
DELETE FROM product WHERE id=1
To Καρτεσιανό γινόμενο αποτελεί την πράξη μεταξύ δύο πινάκων όπου η κάθε εγγραφή του ενός πίνακα συνδυάζεται με όλες τις εγγραφές του άλλου πίνακα
Η SQL εντολή μέσω της οποίας ανακτούμε πληροφορίες και συντάσσουμε ερωτήματα είναι η SELECT. Η γενική σύνταξη της SELECΤ είναι αρκετά σύνθετη, ωστόσο ένα απλό πρότυπο είναι το ακόλουθο:
SELECT <πεδίο που θέλουμε να φαίνονται>
FROM <πίνακες από τους οποίους θα αντληθούν τα δεδομένα>
WHERE <κριτήρια επιλογής των εγγραφών>
Η εντολή JOIN σημαίνει σύνδεση, δηλαδή συνδυασμός δεδομένων από δύο ή περισσότερους πίνακες.
Περιλαμβάνει επιπρόσθετα και όλες τις εγγραφές του πίνακα που βρίσκεται στα αριστερά της πράξης της σύνδεσης (join) και δεν εμπεριέχονται στο αποτέλεσμα της πράξης της σύνδεσης.
Περιλαμβάνει επιπρόσθετα και όλες τις εγγραφές των πινάκων που βρίσκονται στα αριστερά και δεξιά της πράξης της σύνδεσης (join) και δεν εμπεριέχονται στο αποτέλεσμα της πράξης της σύνδεσης.
Η λέξη DISTINCT αμέσως μετά την SELECT δηλώνει ότι κάθε εγγραφή του πίνακα του αποτελέσματος θα συμπεριληφθεί μία μόνο φορά. Επομένως χρησιμοποιείται όταν θέλουμε να εγγυηθούμε ότι στο αποτέλεσμα του ερωτήματος δεν θα υπάρχουν διπλοεγγραφές πρέπει να χρησιμοποιήσουμε το DISTINCT
H λέξη GROUP BY προσδιορίζει τις στήλες με τις οποίες θα πραγματοποιηθεί ομαδοποίηση (grouping) των δεδομένων.
Ο όρος HAVING χρησιμοποιείται για να ορίσει περιοσρισμούς που σχετίζονται με τα ήδη ομαδοποιημένα αποτελέσματα που έχουν δημιουργηθεί με την GROUP BY.
H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξη της ένωσης (UNION) συνενώνει τις εγγραφές δύο ή περισσότερων πινάκων.
Ένα παράδειγμα ένωσης δίνεται παρακάτω:
SELECT συνέδριο
FROM πρακτικά_συνεδρίου
UNION
SELECT τιτλος
FROM περιοδικό;
H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξεις αυτές υλοποιούνται στην SQL με τις εντολές UNION, EXCEPT και INTERSECΤ αντιστοίχως.
παράδειγμα τομής :
SELECT ονομα
FROM συνδρομητης
INTERSECT
SELECT ονομα
FROM συγγραφεας;
H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξεις αυτές υλοποιούνται στην SQL με τις εντολές UNION, EXCEPT και INTERSECΤ αντιστοίχως.
παράδειγμα διαφοράς :
SELECT κωδικός,τίτλος
FROM άρθρο
EXCEPT
SELECT κωδικός,τίτλος
FROM άρθρο
WHERE κωδικός_περιοδικού IS NOT NULL;
Σε περίπτωση που θέλουμε ένα πεδίο να λαμβάνει τιμές από ένα προκαθορισμένο σύνολο τιμών, τότε μπορούμε εναλλακτικά να χρησιμοποιήσουμε τον τελεστή ΙΝ.
Σε περίπτωση που θέλουμε ένα πεδίο να λαμβάνει τιμές από ένα προκαθορισμένο σύνολο τιμών, εξαιρώντας κάποιες τιμές τότε μπορούμε εναλλακτικά να χρησιμοποιήσουμε τον τελεστή ΝΟΤ ΙΝ.
H SQL προσφέρει τα κατηγορήματα SOME(ή ΑΝΥ) και ALL τα οποία αντιστοιχούν στον υπαρξιακό και καθολικό ποσοδείκτη που χρησιμοποιούμε στα μαθηματικά. Με τη χρήση των κατηγορημάτων αυτών μπορούμε να συντάξουμε πολύ χρήσιμα ερωτήματα με τη χρήση υποερωτημάτων. Πριν απο τα κατηγορήματα SOME και ALL, μπορεί να προηγείται οποιοσδήποτε τελεστής σύγκρισης (=, >, <, >=, <=, <>)
Η τιμή που επιστρέφει το κατηγόρημα EXISTS είναι αληθής, αν το σύνολο που ακολουθεί δεν είναι κενό. Σε διαφορετική περίπτωση η τιμή που επιστρέφεται είναι ψευδής.
Για τον ορισμό μιας όψης, η SQL παρέχει την εντολή CREATE VIEW που συντάσσεται ως εξής:
CREATE VIEW όνομα-όψης
AS
(υποερώτημα SQL);
Παρόμοια με την εντολή UPDATE λειτουργεί και η εντολή DELETE. Ο σκοπός της είναι πολύ απλός, διαγράφει εγγραφές από ένα πίνακα.
Η πλήρης διαγραφή ενός πίνακα γίνεται χρησιμοποιώντας την εντολή DROP σύμφωνα με τον ακόλουθο πρότυπο :
DROP TABLE <ονομα πίνακα>
O SQL Server δίνει την δυνατότητα υλοποίησης τμημάτων κώδικα τα οποία παραμένουν αποθηκευμένα μέσα στη Βάση Δεδομένων και καλούνται αποθηκευμένες διαδικασίες (stored procedures). Αυτά ενεργοποιούνται ανά τακτά χρονικά διαστήματα για την εκτέλεση μιας σημαντικής λειτουργίας.
Ένας σκανδαλισμός ή εύναυσμα (trigger) είναι ένα τμήμα κώδικα που εκτελείται όταν συμβεί ένα γεγονός. Τα γεγονότα που ενεργοποιούν σκανδαλισμούς είναι εισαγωγές, διαγραφές, και ενημερώσεις στα δεδομένα ενός πίνακα.
Ένας κατάλογος (ευρετήριο) ορίζεται σε μία ή περισσότερες στήλες ενός πίνακα και στοχεύει στην αποδοτικότερη εκτέλεση των ερωτημάτων που χρησιμοποιούν τις στήλες αυτές στη συνθήκη WHERE. Η κατασκευή και κατάργηση καταλόγων πραγματοποιείται με τις εντολές CREATE INDEX και DROP INDEX αντίστοιχα.
O ορισμός ενός πίνακα μπορεί να μεταβληθεί στην πορεία, αναλόγως με τις απαιτήσεις. H SQL προσφέρει την εντολή ALTER TABLE, με την οποία επιτρέπονται να γίνουν συγκεκριμένες αλλαγές στον πίνακα: (προσθήκη νέας στήλης, διαγραφή υπάρχουσας στήλης, αλλαγή πεδίου ορισμού μίας στήλης, εισαγωγή νέου περιορισμού, κατάργηση περιορισμού, αλλαγή της εξ ορισμού τιμής στήλης, κατάργηση αρχικής τιμής στήλης).
Με την εντολή REVOKE αφαιρούμε από τους χρήστες τα δικαιώματα χρήσης ενός στοιχείου (π.χ. πίνακα, όψη) μιας βάσης δεδομένων.
Αυτή η παράμετρος καθορίζει τη μέθοδο με την οποία διαχωρίζονται οι κόμβοι του δένδρου. Μπορεί να πάρει τις τιμές [1,3] όπου 1 είναι η τιμή για Binary δένδρο, 2 η τιμή για Complete (multi-way) δένδρο και 3 η τιμή και για τα δύο μαζί.
Η κατηγοριοποίηση αποτελεί μια σημαντική λειτουργία εξόρυξης δεδομένων, όπου επιθυμούμε να προβλέψουμε σε πια κατηγορία εντάσσονται και ανήκουν κάθε φορά τα δεδομένα μας.