Relational Databases - Σχεσιακές βάσεις δεδομένων
Εάν ενδιαφέρεσαι για δημιουργία βάσεων δεδομένων με προγράμματα που χρησιμοποιούν την γλώσσα SQL, τότε κρίνεται απαραίτητη η γνώση και η κατανόηση της έννοιας σχεσιακή βάση δεδομένων.
Οι βάσεις που χρησιμοποιούμε και για τις οποίες παρέχουμε τεχνική υποστήριξη (όχι όμως και εκπαίδευση ) είναι η MySQL και ο MS SQL Server.
Το site της dnHost υποστηρίζεται από μία βάση σε MySQL η οποία βοηθά την δημιουργία αλλά και τη συντήρηση του site, πάρα πολύ.
Όλα τα βιβλία και για τις δύο αφιερώνουν στην αρχή λίγες ή περισσότερες σελίδες πάνω στο θέμα, συνήθως στο κεφάλαιο με τίτλο "Σχεδιασμός της βάσης" ή κάτι παρόμοιο.
Η θεωρία αυτή παρουσιάζει μεγάλο ενδιαφέρον και ένα είναι σίγουρο: ο μεγαλύτερος τεχνίτης της MySQL ή τoυ SQL Server, αυτός που παίζει στα δάχτυλα την php, την perl ή την Visual Basic, δεν θα μπορέσει ποτέ να σχεδιάσει σωστά μία βάση δεδομένων εάν δεν ασχοληθεί πρώτα με το τι λέει η θεωρία γι' αυτό.
Δεν γίνεται να επεκταθούμε στο θέμα, άλλωστε υπάρχει πληθώρα πληροφοριών, εύκολων ή δύσκολων στο Internet, θα κάνουμε μόνο μία μικρή εισαγωγή για όσους ξεκινούν. Οι βάσεις δεδομένων σαν έννοια έρχονται να οργανώσουν μία πληθώρα αρχείων.
Παράδειγμα κατανόησης δομής μιας σχεσιακής βάσης δεδομένων.
Εκεί που έχω λίστες με ονόματα πελατών και άλλες λίστες με προϊόντα, όταν τα στοιχεία αυτά αυξάνουν έρχεται η ώρα της οργάνωσης.
Περαιτέρω θέλω να οργανώσω τους συσχετισμούς τους, ποιος μένει πού, τι αγοράζει, πότε, από εκεί έχουμε τον όρο "σχεσιακή".
Ας δούμε τον παρακάτω πίνακα:
Όνομα | Διεύθυνση | Προϊόν |
Γιώργος Π | Αμαλίας 25 | Πουκάμισο |
Ελένη Η. | Τρικούπη 10 | Παπούτσια |
Κώστας Φ. | Τσιμισκή 6 | Πουκάμισο |
Εάν η Ελένη Η. αγοράσει ξανά κάποιο προϊόν θα έχουμε πρόβλημα, διότι θα έπρεπε να έχουμε δύο καταχωρίσεις με το ίδιο όνομα. Αυτό σημαίνει ότι εάν η Ελένη Η. άλλαζε σπίτι θα έπρεπε να αλλάξουμε δύο καταχωρίσεις για το ίδιο άτομο. Όχι μόνο πρόκειται για χάσιμο χρόνου, αλλά κυρίως αυξάνουν οι πιθανότητες να γίνει λάθος. Εάν η Ελένη Η. ήταν ένας καλός πελάτης της επιχείρησής μας τότε θα μπορούσαν να υπάρχουν δεκάδες σειρές με τα στοιχεία της. Μία μικρή αλλαγή των στοιχείων της θα αποτελούσε καταστροφή για την ανανέωση της βάσης. Και όλες οι βάσεις δεδομένων αποκτούν με τον καιρό χιλιάδες records! Βλέπουμε λοιπόν, πόσο μεγάλη σημασία έχει ο αρχικός σχεδιασμός.
Ένας από τους δέκα κανόνες για τη σωστή κατασκευή σχεσιακής βάσης δεδομένων είναι να αποφεύγεται η επανάληψη των ιδίων στοιχείων.
Αλλάζοντας το παραπάνω παράδειγμα με στοιχεία πελάτη και προϊόντων θα έπρεπε να έχουμε τρεις πίνακες: Πελάτες
id (Πελάτης) | Όνομα | Διεύθυνση | Τηλέφωνα |
1 | Γιώργος Π. | Αμαλίας 25 | 2233445 |
2 | Ελένη Η. | Τρικούπη 10 | 3455233 |
3 | Κώστας Φ. | Τσιμισκή 6 | 7766554 |
Προϊόντα
id (Προϊόν) | Είδος | Προμηθευτής | Τιμή |
1 | Παπούτσια | Xxxxxxxx | €45,44 |
2 | Πουκάμισο | Yyyyyyyy | €23,10 |
3 | Παντελόνι | Zzzzzzzz | €40,00 |
Ο τρίτος πίνακας θα προέκυπτε από την ένωση των δύο (join), με όσα πεδία από τον καθένα θέλουμε:
Όνομα | Διεύθυνση | Είδος | Τιμή |
Ελένη Η. (id=2) | Τρικούπη 10 | Πουκάμισο (id=2) | €23,10 |
Γιώργος Π. (id=1) | Πουκάμισο | Πουκάμισο (id=2) | €23,10 |
Ελένη Η. (id=2) | Τρικούπη 10 | Παντελόνι (id=3) | €40,00 |
Εάν νομίζετε ότι η αρίθμηση στους πίνακες είναι περιττή σκεφτείτε τι θα μπορούσε να συμβεί σε περίπτωση συνωνυμίας. Ακόμα και αν πελάτες με το ίδιο επώνυμο θα έχουν πιθανότατα άλλο όνομα ή έστω διεύθυνση θα έπρεπε να συμπεριλαμβάνουμε σε κάθε αναφορά που θα θέλαμε να πάρουμε όλα αυτά τα στοιχεία ώστε να μην υπάρξει περίπτωση λάθους. Αντίθετα η αρίθμηση που συνοδεύει κάθε πίνακα και που είναι μοναδική κάθε φορά μας εξασφαλίζει. Οι συσχετισμοί των πινάκων γίνονται πάντα με αριθμούς τους οποίους μεταφράζουμε εμείς σε κείμενο. Μην ξεχνάμε ότι οι υπολογιστές λειτουργούν πάντα και μόνο με αριθμούς.