02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

23
Βάσεις Δεδομένων Ι - 02 Σχεσιακό Πρότυπο Δεδομένων (Relational Data Model) (σύντομη παρουσίαση) Τύποι Δεδομένων Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ ΤΕΙ Θεσσαλίας

Transcript of 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Page 1: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Βάσεις Δεδομένων Ι - 02

Σχεσιακό Πρότυπο Δεδομένων (Relational Data Model) (σύντομη παρουσίαση)

Τύποι Δεδομένων

Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ ΤΕΙ Θεσσαλίας

Page 2: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 2 - Βάσεις Δεδομένων Ι

Τι είναι τα Πρότυπα Δεδομένων; Είναι σημειογραφικά συστήματα που χρησιμοποιούμε για την περιγραφή δεδομένων.

Τα πιο σημαντικά πρότυπα στα συστήματα βάσεων δεδομένων είναι το σχεσιακό πρότυπο

και το πρότυπο των ημιδομημένων δεδομένων.

Τα πρότυπα δεδομένων περιλαμβάνουν 3 βασικά συστατικά:

Δομή Δεδομένων

ΔΕΝ εννοούμε τις δομές δεδομένων του προγραμματισμού αλλά εννοιολογικά πρότυπα.

Στο σχεσιακό πρότυπο η κύρια δομή δεδομένων είναι η σχέση/relation (ή πίνακας/table).

Στο πρότυπο ημιδομημένων δεδομένων η κύρια δομή δεδομένων είναι οι ιεραρχικά

φωλιασμένες ετικέτες (tags), με κλασικό αντιπρόσωπο τα XML δένδρα.

Πράξεις επί των Δεδομένων

Στις γλώσσες προγραμματισμού: πράξεις είναι οτιδήποτε μπορεί να προγραμματιστεί!

Στο σχεσιακό πρότυπο έχουμε κύρια πράξεις πάνω σε πίνακες (σχεσιακή άλγεβρα) όπως π.χ.

επιλογή των γραμμών που έχουν δεδομένη τιμή σε δεδομένη στήλη.

Στο πρότυπο ημιδομημένων δεδομένων ακολουθούμε διαδρομές στο δένδρο, ζητάμε την τιμή

δεδομένου κόμβου, κτλ

Το πλήθος των επιτρεπτών πράξεων είναι μικρό. Αυτό οδηγεί σε απλές γλώσσες (πχ η SQL)

Περιορισμοί στα Δεδομένα

Στο σχεσιακό πρότυπο οι περιορισμοί μπορεί να είναι π.χ. στις δυνατές τιμές μιας στήλης.

Στο πρότυπο ημιδομημένων δεδομένων μπορεί πχ κάποιος τύπος κόμβου να πρέπει να περιέχει

δεδομένους άλλους κόμβους, πιθανώς και με συγκεκριμένη σειρά, κτλ.

Page 3: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 3 - Βάσεις Δεδομένων Ι

Πρότυπα Δεδομένων (συνέχεια)

Υπάρχουν και άλλα, λιγότερο διαδεδομένα πρότυπα δεδομένων στις ΒΔ όπως το

αντικειμενοστραφές σχεσιακό πρότυπο όπου:

οι τιμές που αποθηκεύονται μπορεί να είναι σύνθετες δομές παρά απλοί αριθμοί και

αλφαριθμητικά (που είπαμε ότι ισχύει στις σχεσιακές ΒΔ)

οι σχέσεις μπορεί να συνοδεύονται από μεθόδους (methods) όπως π.χ. στη C++

Είναι γεγονός ότι τα ημιδομημένα πρότυπα είναι πιο ευέλικτα από το σχεσιακό,

ειδικά αν αναλογιστεί κανείς ότι στο ιεραρχικό πρότυπο μπορεί να ενσωματωθούν

και δομές γράφων, που είναι πολύ χρήσιμες. Όμως, το σχεσιακό πρότυπο είναι

περισσότερο διαδεδομένο καθώς:

παρέχει αποδοτικούς τρόπους πρόσβασης σε τεράστιους όγκους δεδομένων

η απλότητα του μοντέλου και το περιορισμένο πλήθος πράξεων στα δεδομένα έχουν

οδηγήσει σε απλές γλώσσες προγραμματισμού που επιτρέπουν στους προγραμματιστές να

μπορούν με απλές εντολές να κάνουν σχεδόν τα πάντα.

λίγες γραμμές κώδικα SQL ισοδυναμούν με εκατοντάδες γραμμές C

το περιορισμένο ρεπερτόριο εντολών της SQL μας επιτρέπει να γράψουμε αλγορίθμους

βελτιστοποίησης των ερωτημάτων έτσι ώστε να προγραμματίζουμε με περισσότερο

κατανοητή για εμάς σύνταξη αλλά τελικά να εκτελείται ο βέλτιστα διατυπωμένος για

τον Η/Υ κώδικας.

Page 4: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 4 - Βάσεις Δεδομένων Ι

Βασικές Αρχές Σχεσιακού Προτύπου (1/5)

Η βασική δομή δεδομένων είναι ο πίνακας (table) δύο διαστάσεων που ονομάζεται

σχέση (relation). Για παράδειγμα έστω η σχέση Movies (ταινίες):

title year length genre

Gone with the Wind 1939 231 drama

Star Wars 1977 124 sciFi

Wayne's World 1992 95 comedy

κάθε γραμμή αφορά σε μία ταινία

κάθε στήλη αφορά σε μια ιδιότητα ταινίας

Όπως θα δούμε παρακάτω, σχέσεις θεωρούνται επίσης και:

τα αποτελέσματα ερωτήσεων (queries) – είναι και αυτά προσωρινοί πίνακες

οι όψεις (views) – σχέσεις που υπολογίζονται όταν χρειάζονται ή και από πριν

Οι στήλες μιας σχέσης ονομάζονται γνωρίσματα (attributes) (ή στήλες-columns)

προσδιορίζουν το είδος πληροφορίας της εκάστοτε στήλης

στο παράδειγμα: title, year, length (διάρκεια της ταινίας), genre (είδος ταινίας, π.χ. θρίλερ)

Θεωρητικά, η σειρά των γνωρισμάτων δεν παίζει ρόλο (γιατί είναι σύνολο/set). Στην πράξη

όμως πρέπει να τη γνωρίζουμε και αυτή καθορίζεται από το schema.

Page 5: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 5 - Βάσεις Δεδομένων Ι

Βασικές Αρχές Σχεσιακού Προτύπου (2/5) Tο όνομα της σχέσης και το σύνολο των γνωρισμάτων της ονομάζονται σχήμα

(schema) (στον πληθυντικό σχήματα – schemata).

ο τρόπος κωδικοποίησης ενός σχήματος είναι ο ακόλουθος π.χ. Movies(title, year, length, genre)

το όνομα της σχέσης συνηθίζεται να το γράφουμε με κεφαλαίο πρώτο γράμμα

το όνομα των γνωρισμάτων συνηθίζεται να το γράφουμε με μικρούς (πεζούς) χαρακτήρες

Σε μια ΒΔ συνήθως έχουμε πολλές σχέσεις (σχήματα)! Το σύνολο των σχημάτων

μιας ΒΔ ονομάζεται σχήμα της ΒΔ (database schema).

Πρακτικά, ο ορισμός μια ΒΔ σημαίνει να ορίσουμε το schema της και αποτελεί τη

σημαντικότερη εργασία σε ένα project που περιλαμβάνει ΒΔ.

Οι γραμμές μιας σχέσης ονομάζονται πλειάδες (tuples) ή γραμμές (rows) ή

εγγραφές (records)

τρόπος γραφής μιας πλειάδας: (Star Wars, 1977, 124, scifi)

πρέπει όμως να λέμε και σε ποια σχέση ανήκει! (εδώ στην σχέση Ταινίες)

Σε κάθε γνώρισμα μιας σχέσης αντιστοιχεί ένα πεδίο τιμών δηλαδή ένας

συγκεκριμένος πρωταρχικός τύπος, συνήθως αλφαριθμητικό ή αριθμός.

δεν προβλέπεται αποθήκευση σύνθετων τύπων (όπως λίστες, πίνακες, κτλ) μέσα σε γνώρισμα

στην καταγραφή του σχήματος μπορούμε να συμπεριλάβουμε και τύπους, ως εξής: π.χ. Movies(title:string, year:integer, length:integer, genre:string)

Page 6: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 6 - Βάσεις Δεδομένων Ι

Βασικές Αρχές Σχεσιακού Προτύπου (3/5)

Προεπιλεγμένη τιμή (default) είναι η τιμή που χρησιμοποιείται σε μια στήλη αν δεν

γνωρίζουμε κάποια άλλη τιμή. Αν δεν έχουμε ορίσει default, τότε είναι το NULL.

η προεπιλεγμένη τιμή μπορεί να υπολογίζεται τη στιγμή που χρειάζεται, όπως π.χ. με την

τρέχουσα ημερομηνία και ώρα.

Ισοδυναμία Αναπαραστάσεων Οι σχέσεις είναι σύνολα (sets) και όχι κατάλογοι – άρα η σειρά των πλειάδων δεν

παίζει ρόλο. Επίσης δεν παίζει ρόλο η σειρά των γνωρισμάτων αλλά (όπως

ειπώθηκε) για πρακτικούς λόγους υιοθετούμε μια δεδομένη σειρά καθώς αυτή

καθορίζει και τη σειρά των στηλών του πίνακα.

Στιγμιότυπα Σχέσεων Το σύνολο των πλειάδων μιας σχέσης αποτελεί ένα στιγμιότυπο (instance) αυτής

της σχέσης. πχ. ο πίνακας στη διαφάνεια 4 είναι ένα στιγμιότυπο της σχέσης Movies.

Στην πορεία του χρόνου, καθώς π.χ. προσθέτουμε ταινίες στη σχέση Movies, προκύπτουν νέα

στιγμιότυπα! Τα συμβατικά DBMS όμως διατηρούν μόνο μία εκδοχή της σχέσης: τις

πλειάδες που βρίσκονται στη σχέση τώρα! Αυτό είναι το λεγόμενο τρέχον στιγμιότυπο.

Υπάρχουν και οι χρονικές βάσεις δεδομένων που τηρούν παρελθούσες εκδοχές των δεδομένων!

Page 7: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 7 - Βάσεις Δεδομένων Ι

Βασικές Αρχές Σχεσιακού Προτύπου (4/5) Κλειδιά Σχέσεων: το κλειδί (key) είναι ένα σύνολο γνωρισμάτων (συνήθως ένα

μόνο γνώρισμα) της σχέσης για το οποίο δεν επιτρέπεται να υπάρχουν πλειάδες που

να έχουν ίδια τιμή στα γνωρίσματα του κλειδιού. Για παράδειγμα:

στη σχέση Φοιτητής, ο αριθμός μητρώου είναι κλειδί! (κάθε φοιτητής έχει διαφορετικό ΑΜ)

στη σχέση Movies, έστω ότι ο συνδυασμός title και year είναι κλειδί (τα υπογραμμίζουμε). π.χ. Movies(title, year, length, genre)

Θεωρούμε ότι δεν θα υπάρξουν ταινίες που θα κυκλοφορήσουν την ίδια χρονιά με ίδιο τίτλο!

το year μόνο του δεν μπορεί να είναι κλειδί γιατί σε μια χρονιά κυκλοφορούν πολλές ταινίες!

το title μόνο του δεν μπορεί να είναι κλειδί γιατί υπάρχουν ταινίες που έχουν ίδιο τίτλο

ΠΡΟΣΟΧΗ: το κλειδί δεν ορίζεται με βάση το τρέχον στιγμιότυπο (δηλ. τα παρόντα

δεδομένα) αλλά με βάση τα πιθανά στιγμιότυπα, δηλ. αυτά που θα προκύψουν μελλοντικά

όταν θα καταχωρηθούν επιπλέον πλειάδες (δεδομένα).

Συχνά δεν είναι εύκολο να οριστούν κλειδιά και επειδή τα σύνθετα κλειδιά με πολλά

γνωρίσματα είναι δύσχρηστα, ορίζουμε τεχνητά κλειδιά (artificial keys).

Τα τεχνητά κλειδιά συνήθως παίρνουν αυτόματα αριθμητικές τιμές 1, 2, 3, κ.ο.κ.

ΠΡΟΣΟΧΗ: Η υιοθέτηση από μέρους μας ως κλειδιού ενός γνωρίσματος του

οποίου η τιμή ΔΕΝ ελέγχεται 100% από εμάς, μακροπρόθεσμα εμπεριέχει ρίσκο!

Έτσι εξηγείται γιατί κάθε φορέας έχει δικό του κωδικό (Αστ/κή Ταυτότητα, ΑΦΜ, ΑΜΚΑ,

Τηλεφωνία, κτλ). Δεν είναι έτσι εξαρτημένος από τρίτους.

Page 8: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 8 - Βάσεις Δεδομένων Ι

Βασικές Αρχές Σχεσιακού Προτύπου (5/5)

Παράδειγμα Σχέσης - Σύνοψη

title year length genre

Gone with the Wind 1939 231 drama

Star Wars 1977 124 sciFi

Wayne's World 1992 95 comedy

Όνομα Σχέσης: Movies

Γνωρίσματα: 4 – title, year, length, genre

Σχήμα: Movies(title, year, length, genre)

Κλειδί: (title, year) (τα υπογραμμίζουμε στη σχέση)

Πλειάδες: 3

Πεδία Τιμών: Movies(title:string, year:integer, length:integer, genre:string)

Τονίζεται ξανά ότι αν και οι τίτλοι στις 3 ταινίες του παραπάνω στιγμιότυπου της σχέ-

σης Movies είναι διαφορετικοί, δε σημαίνει ότι μόνος του ο τίτλος μπορεί να αποτελέ-

σει κλειδί. Δεν αποφασίζουμε το κλειδί με βάση το τρέχον στιγμιότυπο αλλά με βάση

το πιθανό μελλοντικό στιγμιότυπο (όταν δηλαδή θα καταχωρηθούν επιπλέον ταινίες).

Page 9: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 9 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων - Αλφαριθμητικά Να τονιστεί ότι κάθε υλοποίηση RDBMS πιθανώς να ακολουθεί τη δική της οδό ως προς τον ακρι-

βή ορισμό των τύπων δεδομένων που υιοθετεί. Παρακάτω γίνεται αναφορά στους βασικούς τύπους

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

όποιες ιδιαιτερότητες του MySQL RDBMS. Ανάλογα με την πλατφόρμα στην οποία δουλεύετε, να

συμβουλεύστε την τεκμηρίωσή της (documentation, manuals).

Για MySQL δείτε εδώ: http://dev.mysql.com/doc/refman/5.0/en/data-type-overview.html

Αλφαριθμητικά σταθερού μήκους: CHAR(N) όπου Ν ακέραιος ως 255

Τα χρησιμοποιούμε σε περιπτώσεις που το μήκος των δεδομένων που θέλουμε να καταχω-

ρούμε είναι το πολύ Ν χαρακτήρες και δεν υπάρχει μεγάλη απόκλιση από αυτό το μήκος.

Λέμε σταθερού μήκους γιατί ότι και να καταχωρηθεί σε μια στήλη τέτοιου τύπου, θα

καταλάβει χώρο Ν χαρακτήρων. Οπότε:

ο αριθμός ταυτότητας είναι ένα καλό παράδειγμα: έχει μήκος 8 πάντα

ο τίτλος ταινίας δεν είναι καλό παράδειγμα! υπάρχει μεγάλο εύρος τιμών στο πιθανό μήκος του

Αλφαριθμητικά μεταβλητού μήκους: VARCHAR(N) όπου Ν ακέραιος ως βλ. επόμενο slide

Χρήση σε περιπτώσεις που το μήκος των δεδομένων που θέλουμε να καταχωρούμε είναι το

πολύ Ν χαρακτήρες και υπάρχει μεγάλη απόκλιση από αυτό το μήκος στα μήκη των αλφαριθ-

μητικών που καταχωρούνται. Σε MySQL, αν Ν>255 τότε γίνεται TEXT (βλ. slide #10)

Δηλαδή, ο τύπος VARCHAR είναι πιο οικονομικός σε αποθηκευτικό χώρο από τον CHAR. O

δεύτερος όμως είναι πιο γρήγορα διαχειρίσιμος από το RDBMS (λόγω του σταθερού μήκους!).

Page 10: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 10 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων – Αλφαριθμητικά & Binary

Η μέγιστη τιμή του N στον τύπο varchar είναι 65535 αλλά αν η εγγραφή

περιλαμβάνει και άλλες στήλες, η πραγματική μέγιστη τιμή είναι 65535 μείον τα

bytes που καταλαμβάνουν οι υπόλοιπες στήλες.

TEXT: για μεγάλα non-binary αλφαριθμητικά (http://dev.mysql.com/doc/refman/5.0/en/string-types.html)

παραλλαγές του:

TINYTEXT (28 bytes = 255 χαρακτήρες),

TEXT (216 bytes = 64KΒ),

MEDIUMTEXT (224 bytes = 2GB),

LARGETEXT (232 bytes = 4GB)

BINARY(n) και VARBINARY(n) για αλληλουχίες bit (binary αλφαριθμητικά) μήκους ως n

στη λογική των τύπων CHAR και VARCHAR

BLOB: (Binary Large Object) για binary αλφαριθμητικά και γενικά binary data (πχ εικόνες)

παραλλαγές του (σε παρόμοια λογική με το TEXT):

TINYBLOB,

BLOB,

MEDIUMBLOB,

LARGEBLOB

Page 11: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 11 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων - Αλφαριθμητικά

Έστω η λέξη 'ποδήλατο'

σε γνώρισμα τύπου varchar(12) θα αποθηκευτεί ακριβώς η λέξη 'ποδήλατο'

σε γνώρισμα τύπου char(12) θα αποθηκευτεί η λέξη και 4 κενά

(spaces): 'ποδήλατο '

ΠΡΟΣΟΧΗ: Αν επιχειρήσουμε να αποθηκεύσουμε αλφαριθμητικό μεγαλύτερο

από το διαθέσιμο χώρο, οι επιπλέον χαρακτήρες χάνονται!

Τεχνικές Λεπτομέρειες:

Στη γλώσσα SQL τα αλφαριθμητικά οριοθετούνται με μονά εισαγωγικά (και όχι με διπλά

που συνηθίζεται στον προγραμματισμό).

Σε MySQL, αν κάποιος χαρακτήρας του αλφαριθμητικού είναι το μονό εισαγωγικό τότε

πρέπει να μπει escaped. Αυτό σημαίνει να βάλουμε αριστερά του τον χαρακτήρα \

(backslash).

πχ. το 'Jane's World' σε μια έκφραση SQL θα γραφεί ως 'Jane\'s World'

ΠΡΟΣΟΧΗ: Δεν γίνεται σε όλα τα RDBMS με τον ίδιο τρόπο!

Δείτε προσεκτικά τα γραφόμενα σε επόμενα slides (#16, #17) με τίτλο:

Binary και non-Binary Τύποι Αλφαριθμητικών

Page 12: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 12 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων – Boolean και Ακέραιοι

BOOLEAN: για λογικές τιμές TRUE (ή 1), FALSE (ή 0)

INT ή INTEGER για

ακεραίους. Ανάλογα με το

εύρος τιμών των αριθμών

που θα αποθηκεύσουμε

ίσως είναι καλύτερα μια

εξειδίκευση αυτού του

τύπου (βλ. πίνακα δεξιά με

τι ισχύει σε MySQL).

Page 13: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 13 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων – Δεκαδικοί Αριθμοί Αριθμοί με υποδιαστολή:

Σταθερής υποδιαστολής (ή ακριβούς τιμής): τύπος DECIMAL (ή NUMERIC)

η αναπαράσταση αριθμών με τύπο DECIMAL είναι ακριβής και μαθηματικές

πράξεις με αυτούς είναι επίσης ακριβείς. Για παράδειγμα, αν προσθέσουμε 1000 φορές το 0.001

θα πάρουμε 1 και όχι κάποιο δεκαδικό πολύ κοντά στο 1 (όπως πχ 0.9999999999999)

χρησιμοποιούνται όταν είναι σημαντικό να υπάρχει ακριβής αναπαράσταση αριθμών, όπως

για παράδειγμα σε χρηματικά ποσά (fixed-point types ή exact value types).

σύνταξη: DECIMAL(n,d) – όπου n το πλήθος των ψηφίων εκ των οποίων d είναι τα δεκαδικά

γενικά ισχύει 0≤d≤n και ειδικότερα σε MySQL το d μπορεί να είναι από 0 ως 30.

Παραδείγματα: το 1234.56 απαιτεί δήλωση DECIMAL(6,2) (6 ψηφία, τα 2 δεκαδικά) ενώ μια

δήλωση DECIMAL(5,2) επιτρέπει αριθμούς από -999.99 ως 999.99 (5 ψηφία, τα 2 δεκαδικά)

Κινητής υποδιαστολής (ή προσεγγιστικής τιμής): τύποι FLOAT (ή REAL)

σε MySQL επιτρέπεται δήλωση ψηφίων όπως στον τύπο DECIMAL αλλά για λόγους

συμβατότητας με άλλες πλατφόρμες καλύτερα να το αποφεύγετε

η αναπαράσταση αριθμών με τύπους κινητής υποδιαστολής δεν είναι ακριβής (floating-point

types ή approximate value types) και γι αυτό πρέπει να αποφεύγονται συγκρίσεις ισότητας

πχ σε FLOAT(7,4) αποθηκεύονται αριθμοί ως 999.9999. Αν επιχειρήσουμε να αποθηκεύσουμε τον αριθμό

999.00009 θα αποθηκευτεί 999.0001

o τύπος DOUBLE χρησιμοποιείται για δεκαδικούς υψηλότερης ακρίβειας καθώς δεσμεύει

διπλάσια bytes αποθηκευτικού χώρου (8 έναντι 4)

Page 14: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 14 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων - Ημερομηνίες Χρονικά Δεδομένα:

Ο τύπος DATETIME πχ.'2012-10-15 12:25:59.5' δηλ συνδυασμός ημ/νίας και ώρας

κωδικοποίηση: YYYY-MM-DD HH:MM:SS

υποστηρίζει τιμές από 1000-01-01 00:00:00 ως 9999-12-31 23:59:59

O τύπος DATE είναι κατάλληλος όταν δεν ενδιαφέρει η ώρα

κωδικοποίηση: YYYY-MM-DD

υποστηρίζει τιμές από 1000-01-01 ως 9999-12-31

Ο τύπος TIME είναι κατάλληλος όταν δεν ενδιαφέρει η ημερομηνία

κωδικοποίηση: ΗΗ:ΜΜ:SS (ώρες:λεπτά:δεύτερα)

υποστηρίζει τιμές από -838:59:59 ως 838:59:59

Ο τύπος TIMESTAMP χρησιμοποιείται για να καταγράφεται η χρονική στιγμή δημιουργίας (ή

και μεταβολής, σε πρόσφατες εκδόσεις MySQL) μιας εγγραφής σε ένα πίνακα!

Παλιά, ο τύπος TIMESTAMP έπρεπε να συνοδεύεται από την default τιμή current_timestamp.

Πλέον μπαίνει αυτόματα το: current_timestamp on update current_timestamp

Χρήσιμο τύπος για λειτουργίες καταγραφής (auditing), όταν δηλαδή θέλουμε να καταγράψουμε

αυτόματα πχ πότε έγινε μια καταχώριση σε ένα πίνακα.

YEAR: Ειδικός τύπος για έτη (με δύο ή τέσσερα ψηφία). Είναι ακέραιος 1 byte.

εύρος τιμών σε τετραψήφια εκδοχή: από 1901 ως 2155

εύρος τιμών σε διψήφια εκδοχή: 70 ως 69 εννοώντας δηλαδή 1970 ως 2069

Page 15: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 15 - Βάσεις Δεδομένων Ι

Τύποι Δεδομένων – Σύνολα Τιμών

ENUM: αλφαριθμητικός τύπος αλλά με τις δυνατές τιμές του να προέρχονται από το

κλειστό σύνολο τιμών που ορίζεται κατά τη φάση δήλωσης του τύπου (ή NULL).

π.χ. αν θέλουμε ένα γνώρισμα με όνομα size να παίρνει τιμές small, medium ή large τότε

θα το δηλώσουμε ως εξής: size ENUM('small', 'medium', 'large')

σε MySQL, το σύνολο τιμών μπορεί να περιέχει ως 216 τιμές (65535)

SET: αλφαριθμητικός τύπος αλλά με τις δυνατές τιμές του να είναι το κενό αλφαριθ-

μητικό (empty string '') ή οποιοσδήποτε συνδυασμός στοιχείων (χωρισμένα με

κόμμα) από το σύνολο τιμών που ορίζεται κατά τη φάση δήλωσης του τύπου.

π.χ. η ακόλουθη δήλωση για το γνώρισμα test: test SET('one', 'two') NOT NULL

επιτρέπει την καταχώριση τιμών όπως: '', 'one', 'two', 'one,two'

το σύνολο επιτρεπτών τιμών δέχεται ως 64 στοιχεία, το πολύ

---==! ΠΡΟΣΟΧΗ !==--- Για τις απαιτήσεις μνήμης των διαφόρων τύπων δεδομένων αλλά και

τις τυχόν ιδιαιτερότητες στην υλοποίησή τους στο εκάστοτε RDBMS,

να συμβουλεύεστε την τεκμηρίωση του εκάστοτε συστήματος. Για MySQL δείτε τη

σελίδα: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

Page 16: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 16 - Βάσεις Δεδομένων Ι

Binary και non-Binary Τύποι Αλφαριθμητικών (1/2) τα παρακάτω αφορούν στην υλοποίηση του MySQL Server

(είναι αρκετά τεχνικές έννοιες αλλά βασικές για όποιο θέλει να γίνει 'pro')

Non-binary string data types: CHAR, VARCHAR, TEXT (και παραλλαγές του)

εδώ υπάρχουν οι έννοιες character set και collation

character set: το σύνολο χαρακτήρων που υποστηρίζονται – επίσης καθορίζει το πόσα bytes

αποθηκευτικού χώρου καταλαμβάνει κάθε χαρακτήρας καθώς υπάρχουν χαρακτήρες του ενός

byte αλλά και χαρακτήρες πολλών bytes (multi-byte characters) και μάλιστα σταθερού ή

μεταβλητού αριθμού bytes.

π.χ. το utf8 Unicode σύνολο χαρακτήρων χρειάζεται 1 ως 3 bytes ανά χαρακτήρα

collation: καθορίζει την σειρά ταξινόμησης των χαρακτήρων σε ένα character set και έτσι

χρησιμοποιείται στις συγκρίσεις αλφαριθμητικών.

Επίσης καθορίζει το κατά πόσο τα αλφαριθμητικά θα θεωρούνται case-sensitive ή case-insensitive και

αυτό φαίνεται στο όνομα του collation (π.χ. utf8_general_ci, utf8_general_cs).

Το collation μπορεί να είναι και binary (π.χ. utf8_bin) στην οποία περίπτωση η σειρά των χαρακτήρων

καθορίζεται από την τιμή των byte και όχι το τι αναπαριστούν (πχ το 'a' ως byte value είναι το 61). Άρα

ένα binary collation είναι υποχρεωτικά case-sensitive γιατί π.χ. τα byte values των 'A' και 'a' διαφέρουν!

Binary string data types: BINARY, VARBINARY, BLOB (και παραλλαγές του)

τα binary strings ΔΕΝ έχουν character set και collation καθώς πρόκειται για αλληλουχίες από

byte values – άρα είναι case-sensitive καθώς τα byte values πεζών και κεφαλαίων διαφέρουν

δεν υπάρχει η έννοια του multi-byte χαρακτήρα – το string είναι αλληλουχία από byte values!

Page 17: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 17 - Βάσεις Δεδομένων Ι

Binary και non-Binary Τύποι Αλφαριθμητικών (2/2) Τι τύπο αλφαριθμητικού να χρησιμοποιήσω?

Αν πρόκειται να αποθηκεύσουμε δεδομένα που είναι κείμενο (πχ ονόματα,

ειδησεογραφία, καταχωρήσεις σε κάποιο blog, περιγραφές προϊόντων, κτλ)

τότε πρέπει να επιλέξουμε ένα non-binary string data type, δηλαδή CHAR,

VARCHAR, TEXT (και τις παραλλαγές του).

Σε MySQL server (αντίθετα απ'ότι σε άλλα RDBMS), η σύγκριση τέτοιων αλφα-

ριθμητικών γίνεται χωρίς διάκριση μικρών-κεφαλαίων. Αν θέλουμε διάκριση

τότε βάζουμε στο πεδίο και τη ρύθμιση BINARY (βλ. slide 20, το BIN checkbox)

Αν πρόκειται να αποθηκεύσουμε δεδομένα τα οποία δεν είναι κείμενο αλλά

αλληλουχίες από bytes (όπως πχ τα δεδομένα που συνιστούν μια εικόνα) τότε

πρέπει να επιλέξουμε κάποιο τύπο binary string, δηλαδή: BINARY, VARBINARY, BLOB

(και τις παραλλαγές του).

Με αυστηρή θεώρηση στο θέμα οικονομίας αποθηκευτικού χώρου, η επιλογή multi-

byte συνόλου χαρακτήρων όταν η δουλειά μπορεί να γίνει και με single byte

character set, αποτελεί σπατάλη χώρου! Για παράδειγμα, έστω ο τύπος CHAR(10):

καταλαμβάνει 10 bytes αποθηκευτικού χώρου σε single-byte character set όπως πχ σε latin1

καταλαμβάνει 30 bytes αποθηκευτικού χώρου σε multi-byte character set (πχ σε utf8 3 byte)

Πηγή: http://www.ovaistariq.net/632/understanding-mysql-binary-and-non-binary-string-data-types/

Page 18: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 18 - Βάσεις Δεδομένων Ι

SQL – Structured Query Language Δομημένη Γλώσσα Ερωτήσεων

Με βάση τη χρήση διακρίνουμε δύο κύρια μέρη:

DDL: Data Definition Language (Γλώσσα Δήλωσης των Δεδομένων)

περιλαμβάνει τις εντολές για δημιουργία και διαχείριση βάσεων δεδομένων (κατασκευή

πινάκων, ευρετηρίων, μεταβολές στα γνωρίσματα πινάκων, κτλ)

τις χρησιμοποιούμε αρχικά στη σχεδίαση και μετέπειτα σε εργασίες συντήρησης

DQL: Data Query Languare (Γλώσσα Ερωτήσεων στα Δεδομένα)

περιλαμβάνει τις εντολές για δημιουργία ερωτήσεων

τις χρησιμοποιούμε από τη στιγμή που η ΒΔ μπαίνει σε παραγωγική χρήση

Θα δούμε στη συνέχεια παραδείγματα εντολών από το κομμάτι DDL της SQL.

Oι εντολές που θα δείτε στα επόμενα slides, στο εργαστήριο προκύπτουν ως

αποτέλεσμα της χρήσης του Workbench. Μπορείτε όμως να δημιουργήσετε μια

άδεια database και να δοκιμάσετε πάνω της τις παρακάτω εντολές γράφοντάς τες

με το χέρι στον sql editor και εκτελώντας τες.

Θα δούμε περισσότερη SQL σε μελλοντικά μαθήματα και εργαστήρια.

Page 19: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 19 - Βάσεις Δεδομένων Ι

Παραδείγματα SQL (DDL)

CREATE TABLE Movies (

title char(100),

year INT,

length INT,

genre char(10),

studioName char(30),

producerC int

);

CREATE TABLE MovieStars (

name char(30),

address varchar(255),

gender char(1) DEFAULT '?',

birthdate date

);

(το κόκκινο δεν είναι υποχρεωτικό)

DROP TABLE Movies; ALTER TABLE MovieStar ADD phone char(16);

προσθήκη και διαγραφή γνωρισμάτων ALTER TABLE MovieStar DROP birthdate;

CREATE TABLE MovieStars (

name char(30) PRIMARY KEY,

address varchar(255),

gender char(1),

birthdate date

);

CREATE TABLE MovieStars (

name char(30),

address varchar(255),

gender char(1),

birthdate date,

PRIMARY KEY (name)

);

Όταν ορίζουμε πρωτεύον κλειδί σε σχέση, ταυτόχρονα δημιουργείται εξ ορισμού ένα

ευρετήριο (το PRIMARY INDEX).

Page 20: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 20 - Βάσεις Δεδομένων Ι

Ρυθμίσεις Γνωρισμάτων σε Workbench (1/2) (για τα πρώτα εργαστήρια)

Σε αυτό το παράδειγμα, δείτε την επίδραση που έχουν στον παραγόμενο SQL κώδικα

τα διάφορα στοιχεία της διεπαφής του MySQL Workbench για τη ρύθμιση στηλών.

CREATE TABLE Table1 (

demoColumn1 INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,

demoColumn2 VARCHAR(45) BINARY NOT NULL DEFAULT 'abcd',

PRIMARY KEY (demoColumn1, demoColumn2),

UNIQUE INDEX demoColumn_UNIQUE (demoColumn1 ASC),

UNIQUE INDEX demoColumn2_UNIQUE (demoColumn2 ASC) );

Page 21: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 21 - Βάσεις Δεδομένων Ι

Ρυθμίσεις Γνωρισμάτων σε Workbench (2/2) (τα επόμενα αφορούν στην εικόνα του slide #20)

(για τα πρώτα εργαστήρια)

PK: ορίζουμε ότι το γνώρισμα συμμετέχει στον ορισμό του πρωτεύοντος κλειδιού

του πίνακα (Primary Key). Το πρωτεύον κλειδί είναι πάντα ΕΝΑ αλλά μπορεί να

αποτελείται από περισσότερα από ένα γνωρίσματα.

NN: ορίσουμε ότι το γνώρισμα δεν θα μείνει χωρίς τιμή (Not Null). Τα γνωρίσματα

που συμμετέχουν στο πρωτεύον κλειδί υποχρεωτικά πρέπει να έχουν τιμή (γι'αυτό το

NN τους τσεκάρεται αυτόματα).

UQ: ζητάμε ευρετήριο τύπου UNIQUE στο γνώρισμα (βλέπε και επόμενο slide).

BIN: ζητάμε τα πεζά και κεφαλαία γράμματα να θεωρούνται διαφορετικά, σε πεδία

τύπου CHAR, VARCHAR και TEXT (και τις παραλλαγές του)

UN: ζητάμε μόνο θετικούς (unsigned) ακεραίους. Αφορά σε πεδία τύπου INT (και

τις παραλλαγές του). Επηρεάζει το επιτρεπτό εύρος τιμών (βλέπε slide #12).

ZF: ρύθμιση μορφοποίησης (αγνοήστε την!)

AI: ζητάμε το γνώρισμα (τύπου INT ή παραλλαγών αυτού) να παίρνει αυτόματα

τιμές (Auto Incremental). Πολύ χρήσιμο καθώς μέσω αυτής της ρύθμισης

φτιάχνουμε τεχνητά πρωτεύοντα κλειδιά!

Page 22: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 22 - Βάσεις Δεδομένων Ι

Ευρετήρια (Indexes) & Workbench (για τα πρώτα εργαστήρια)

Στην καρτέλα Columns στο Workbench (βλ. slide 20) τα checkboxes UQ ορίζουν

ευρετήριο στο εκάστοτε γνώρισμα, που όμως είναι τύπου UNIQUE, δηλαδή δεν θα

επιτρέπονται ίδιες τιμές σε αυτό το γνώρισμα, σε διαφορετικές πλειάδες.

π.χ. αν το πεδίο είναι για καταχώριση του επώνυμου, δεν θα επιτρέπονται ίδια επώνυμα!

μην το μπερδεύετε με το PRIMARY INDEX που προκύπτει από τον ορισμό κλειδιού

Υπάρχει δυνατότητα ορισμού επιπλέον τύπων ευρετηρίου στην καρτέλα Indexes.

Στην διπλανή εικόνα π.χ. ορίζεται

ένα απλό (μίας στήλης) ευρετήριο

τύπου INDEX που (σε αντίθεση με το

τύπου UNIQUE) επιτρέπει ίδιες τιμές

στο γνώρισμα stuSurname.

Τα ευρετήρια επιταχύνουν τις

αναζητήσεις (select) αλλά επιβρα-

δύνουν τις μεταβολές (insert,

update, delete)

Περισσότερα στo PDF 06.

Page 23: 02 - Σχεσιακό Μοντέλο (Βασικές Έννοιες) - Τύποι Δεδομένων

Φ. Κόκκορας / Μηχανικών Πληροφορικής ΤΕ – ΤΕΙ Θεσσαλίας - 23 - Βάσεις Δεδομένων Ι

Μετά το εργαστήριο 03, όποιος δεν μπορεί να χειριστεί άνετα το Workbench

για εργασίες σαν αυτές που περιλαμβάνουν οι ασκήσεις των εργαστηρίων 02 και 03,

καλύτερα να μην έρχεται στο εργαστήριο!