Μέρος 1o: Theory, ER Diagram & Design the Database
Μέρος 2ο: Install MySQL, Create the Database, Tables & Import the Data
Μέρος 3ο: Basic SQL Queries, Functions, JOINs & VIEWs
Πίνακας Περιεχομένων
- Τι είναι μία Βάση Δεδομένων; (Database)
- Τύποι Βάσεων Δεδομένων (Types of Databases)
- Λογισμικό Διαχείρισης Βάσεων Δεδομένων (DBMS)
- Εισαγωγή
- Τύποι Δεδομένων (Data Types)
- Πρωτεύον Κλειδί (Primary Key)
- Ξένο Κλειδί (Foreign Key)
- Περιορισμοί ξένων κλειδιών (Foreign Key Constraint)
- Σχέσεις πινάκων (Table Relationships)
- Ευρετήριο (Index)
- Κανονικοποίηση Βάσης Δεδομένων (Database Normalization)
- Σχεδίαση Βάσης Δεδομένων (ER)
- Μετατροπή του διαγράμματος ER σε Σχέδιο Βάσης Δεδομένων (Database Schema)
Τι είναι μία Βάση Δεδομένων; (Database)
Μία βάση δεδομένων είναι μία συλλογή πληροφοριών ή δεδομένων τα οποία συνήθως είναι αποθηκευμένα σε έναν υπολογιστή. Όπως για παράδειγμα οι χρήστες ενός κοινωνικού δικτύου αποτελούν μία βάση δεδομένων. Μία βάση δεδομένων θα μπορούσε να αποτελέσει και ένας τηλεφωνικός κατάλογος.
Τύποι Βάσεων Δεδομένων (Types of Databases)
Υπάρχουν δύο τύποι βάσεων δεδομένων:
- Relational Databases, τα δεδομένα αποθυκεύονται σε μορφή πίνακα
- Non-Relational Databases, τα δεδομένα αποθηκεύονται σε οτιδήποτε εκτός απο πίνακα, πχ ένα γράφημα ή ένα αρχείο XML.
Εμείς θα ασχοληθούμε μόνο με Relational Databases και όποτε θα αναφερόμαστε σε μία βάση δεδομένων θα θεωρούμε αυτήν.
Λογισμικό Διαχείρισης Βάσεων Δεδομένων (DBMS)
Για να δημιουργήσουμε και να διαχειρηστούμε μία βάση δεδομένων χρειαζόμαστε ένα ειδικό πρόγραμμα. Υπάρχουν πολλά προγράμματα από διαφορετικές εταιρείες που μπορεί κάποιος να χρησιμοποιήσει, για παράδειγμα:
- Microsoft SQL Server
- MySQL
- PostgreSQL
- Oracle RDBMS
- SQLite
Εμείς θα χρησιμοποιήσουμε το MySQL. Όλα τα προγράμματα χρησιμοποιούν σαν βάση την ίδια γλώσσα, την SQL, αλλά κάθε εταιρεία έχει κάποιες διαφορετικές λειτουργίες και μπορεί μερικές εντολές να χρειαστεί να γραφούν διαφορετικά γι’ αυτό το λόγο εάν έχετε σκοπό να ακολουθήσετε κατά γράμμα αυτό και τα επόμενα μαθήματα καλό θα ήταν να χρησιμοποιήσετε και εσείς την MySQL. Παρόλα αυτά, επείδή όπως είπαμε η γλώσσα σε όλα τα προγράμματα είναι είτε ίδια στις περισσότερες περιπτώσεις είτε παρόμοια, εάν κάποιος μάθει ένα από τα προγράμματα τότε είναι αρκετά εύκολο να μάθει και κάποιο άλλο.
Εισαγωγή
Μία βάση δεδομένων αποτελείται από τουλάχιστον έναν πίνακα.
Κάθε πίνακας είναι μία οντότητα, για παράδειγμα ένας πίνακας με τους πελάτες της εταιρείας μας, ένας πίνακας με τους προμηθευτές μας κλπ. Δεν πρέπει να έχουμε σε έναν πίνακα για παράδειγμα και τους πελάτες μας και τους προμηθευτές μας.
Κάθε στήλη αποτελεί και ένα χαρακτηριστικό της οντότητας, για παράδειγμα μία στήλη θα μπορούσε να είναι το όνομα του προμηθευτή ή το κόστος της παραγγελείας.
Κάθε σειρά περιέχει όλα τα χαρακτηριστικά από μία συγκεκριμένη οντότητα, για παράδειγμα όλα τα χαρακτηριστικά ενός πελάτη μας, δηλαδή το όνομά τους, την διεύθυνσή τους, το email τους κλπ.
Τύποι Δεδομένων (Data types)
Κάθε στήλη πρέπει να περιέχει έναν τύπο δεδομένων, δεν μπορούμε δηλαδή σε μία στήλη πότε να βάζουμε νούμερα και πότε κείμενο.
Οι βασικοί τύποι δεδομένων είναι έξι.
- INT: Είναι οι ακέραιοι αριθμοί
- DECIMAL (M,N): Δεκαδικοί αριθμοί, με Μ συνολικά ψηφία και Ν δεκαδικά ψηφία
- VARCHAR (20): Μια σειρά γραμμάτων με μέγιστο μέγεθος τα 20
- DATE: Ημερομηνία της μορφής ‘YYYY-MM-DD’
- TIMESTAMP: Χρονική σήμανση της μορφής ‘YYYY-MM-DD HH:MM:SS’
- BLOB: Συλλογή δυαδικών δεδομένων
Πρωτεύον κλειδί (Primary Key)
Κάθε πίνακας πρέπει να έχει τουλάχιστον μία στήλη η οποία θα λειτουργεί σαν πρωτεύον κλειδί. Το πρωτεύον κλειδί θα πρέπει να μην είναι κενό και θα πρέπει να είναι μοναδικό. Εφόσον ισχύουν αυτά τα δύο μπορούμε να επιλέξουμε όποια στήλη θέλουμε για πρωτεύον κλειδί, μπορούμε ακόμα να χρησιμοποιήσουμε και τον συνδυασμό δύο στηλών ή και περισσότερων. Μπορούμε επίσης να δημιουργήσουμε μία νέα στήλη που θα χρησιμοποιήσουμε για πρωτεύον κλειδί η οποία θα περιέχει αριθμούς και σε κάθε νέα σειρά ο αριθμός θα αυξάνεται κατά ένα. Η συγκεκριμένη τακτική είναι μάλιστα και η πιο συνηθισμένη.
Ας δούμε ένα παράδειγμα για να το κατανοήσουμε καλυτερα. Ας υποθέσουμε ότι έχουμε μία λίστα με τους πελάτες μας. Το να χρησιμοποιήσουμε το μικρό τους όνομα δεν θα ήταν και η καλύτερη λύση μιας και θα υπάρχουν πολλοί πελάτες με το ίδιο όνομα. Θα μπορούσαμε να προσθέταμε και την στήλη με το επιθετό τους, σε αυτή την περίπτωση θα είχαμε μικρότερες πιθανότητες να έχουμε κάποιον πελάτη με το ίδιο όνομα και επίθετο αλλά και πάλι είναι πιθανό. Οπότε μια καλύτερη λύση θα ήταν να δημιουργήσουμε μία νέα στήλη με μοναδικό αριθμό για κάθε πελάτη και να έχουμε αυτή σαν πρωτεύον κλειδί. Επίσης μια καλή πρακτική είναι να χρησιμοποιούμε μία στήλη η οποία δεν θα αλλάζει συχνά.
Ξένο κλειδί (Foreign Key)
Το ξένο κλειδί δεν χρειάζεται να είναι μοναδικό σε μία στήλη όπως το πρωτεύον κλειδί. Το ξένο κλειδί αναφέρεται στο πρωτεύον κλειδί του ίδιου ή άλλου πίνακα.
Για παράδειγμα έχουμε δύο πίνακες, ο ένας αναφέρεται στους προμηθευτές μας και ο άλλος στα καταστήματά μας. Μέσα στον πίνακα με τους προμηθευτές μας μπορούμε να έχουμε ένα ξένο κλειδί το οποίο θα αναφέρεται στο κατάστημα που μας προμηθεύουν. Θα έχουμε δηλαδή μέσα στον πίνακα των προμηθευτών και μία στήλη με το κατάστημα μας το οποίο συνεργάζονται. Επίσης σε έναν πίνακα μπορούμε να έχουμε όσα ξένα κλειδία θέλουμε.
Με κόκκινο είναι τα πρωτεύοντα κλειδιά, με κίτρινο τα ξένα κλειδιά και με πράσινο οι υπόλειπες στήλες.
Περιορισμοί ξένων κλειδιών (Foreign Key Constraint)
Όπως βλέπουμε στην παραπάνω φωτογραφία δημιουργείται μία εξάρτηση της στήλης του ξένου κλειδιού με την στήλη του πρωτεύοντος κλειδιού. Τι γίνεται όμως στην περίπτωση που διαγράψουμε κάποια σειρά από τον πρώτο πίνακα ή την ενημερώσουμε και αλλάξουμε όλη την σειρα; Σε αυτή την περίπτωση όταν δημιουργούμε το ξένο κλειδί πρέπει να γράψουμε και τι θέλουμε να κάνει σε μία τέτοια περίπτωση. Υπάρχουν τρεις επιλογές:
- RESTRICT: Σε αυτή την περίπτωση όταν προσπαθήσουμε να ενημερώσουμε ή να διαγράψουμε το πρωτεύον κλειδί θα μας εμφανίσει ένα error και δεν θα μας αφήσει να αλλάξουμε το πρωτεύον κλειδί
- CASCADE: Σε αυτή την περίπτωση εάν διαγράψουμε το πρωτεύον κλειδί θα διαγραφεί και το ξένο κλειδί, το ίδιο και εαν αλλάξουμε το πρωτεύον κλειδί θα αλλάξει και το ξένο κλειδί.
- SET NULL: Σε αυτη την περίπτωση θα σβηστεί το ξένο κλειδί και στην θέση του θα υπάρχει η τιμή NULL.
Όσον αφορά το ποιο από τα τρία είναι καλύτερο να επιλέγουμε κάθε φορά δεν υπάρχει μια απάντηση, κάθε φορά επιλέγουμε ανάλογα την περίπτωση και τι θέλουμε να γίνεται.
Επίσης μπορούμε να διαλέξουμε διαφορετική επιλογή για όταν διαγράφουμε το πρωτεύον κλειδί και διαφορετική για όταν το ενημερώνουμε.
Σχέσεις πινάκων (Table Relationships)
Υπάρχουν τρεις διαφορετικές σχέσεις ανάμεσα στους πίνακες. Οι σχέσεις δημιουργούνται ανάμεσα στο ξένο κλειδί ενός πίνακα και στο πρωτεύον κλειδί ενός άλλου. Οι τρεις σχέσεις είναι:
- Σχέση ένα προς ένα: Για παράδειγμα ένας καθηγητής μπορεί να κάνει μάθημα σε μία τάξη και μία τάξη μπορεί να έχει μόνο έναν καθηγητη. Συνήθως όταν μεταξύ δύο πινάκων υπάρχει μόνο μία σχέση ένα προς ένα σημαίνει ότι μπορούμε αυτους τους δύο πίνακες να τους γράψουμε σαν εναν.
- Σχέση ένα προς πολλά: Για παράδειγμα, ένας μαθητής μπορεί να πάει σε ένα σχολείο αλλά ένα σχολείο μπορεί να έχει πολλούς μαθητές. Αυτή είναι και η πιο σύνηθες σχέση ανάμεσα στους πίνακες.
- Σχέση πολλά προς πολλά: Για παράδειγμα, ένας υπάλληλος μπορεί να εξυπηρετήσει πολλούς πελάτες και ένας πελάτης μπορεί να εξυπηρετηθεί από πολλούς εργαζόμενους.
Συνήθως δημιουργούμε έναν τρίτο πίνακα που θα περιέχει τα πρωτέυοντα κλειδιά των δύο πινάκων και αν χρειάζεται και κάποιες επιπλέον στήλες. Στο παράδειγμά μας δηλαδή θα δημιουργήσουμε έναν τρίτο πίνακα με πρωτεύον κλειδί τον συνδυασμό του employee_id και του client_id.
Μπορούμε να αναφέρουμε και μία τέταρτη περίπτωση, την σχέση αυτοαναφοράς (self-referencing relationships) η οποία ακολουθεί μία από τις τρεις προηγούμενες σχέσεις με την διαφορά ότι αναφέρεται σε σχέση μέσα σε έναν πίνακα και όχι ανάμεσα σε δύο. Δηλαδή ξένο και πρωτεύον κλειδί ανήκουν στον ίδιο πίνακα.
Ευρετήριο (Index)
Το ευρετήριο χρησιμοποιείται για να αναζητήσουμε δεδομένα από μία βάση δεδομένων γρηγορότερα. Στο προτεύων κλειδί προστείθετε αυτόματα ένα ευρετήριο. Μπορούμε να προσθέσουμε το ευρετήριο σε οποιαδήποτε στήλη θέλουμε. Συνήθως όμως το βάζουμε μόνο σε στήλες που έχουμε σκοπό να κάνουμε αναζήτηση πολλές φορές στο μέλλον.
Ένα ευρετήριο θα μπορούσαμε να πούμε ότι είναι όπως το ευρετήριο σε ένα βιβλίο που μας βοηθάει να βρούμε πιο γρήγορα αυτό που ψάχνουμε.
Γιατί όμως να μην προσθέσουμε ένα ευρετήριο σε όλες τις στήλες; Γιατί κάθε φορά που θα ενημερώνουμε μία στήλη θα πρέπει να ενημερώνουμε και το ευρετήριό της, πράγμα που παίρνει περισσότερο χρόνο. Οπότε πρέπει να προσθέτουμε το ευρετήριο μόνο στις στήλες που θα αναζητούμε συχνά. Επίσης καλό είναι να μην προσθέτουμε ευρετήριο σε στήλες που έχουν πολλές επαναλαμβανόμενες τιμές.
Κανονικοποίηση Βάσης Δεδομένων (Database Normalization)
Είναι η διαδικασία όπου ελέγχουμε την βάση δεδομένων μας για να διορθώσουμε τυχόν πράγματα που μπορεί να προκαλέσουν πρόβλημα στην ακεραιότητα των δεδομένων μας ή επαναλαμβανόμενα δεδομένα. Υπάρχουν 7 επίπεδα κανονικοποίησης μίας βάσης δεδομένων αλλά συνήθως δεν πάμε μετά το 4ο επίπεδο γιατί τα οφέλη συνήθως είναι λιγότερα από τα αρνητικά που θα προκυψουν. Μία βάση δεδομένων λέμε ότι είναι κανονικοποιημένη εάν έχουν εφαρμοστεί τουλάχιστον τα τρία πρώτα επίπεδα.
Τα 7 επίπεδα είναι:
- 1NF (First Normal Form)
- 2NF (Second Normal Form)
- 3NF (Third Normal Form)
- BCNF (Boyce-Codd Normal Form)
- 4NF (Fourth Normal Form)
- 5NF (Fifth Normal Form)
- 6NF (Sixth Normal Form)
First Normal Form
Για να πούμε ότι μία βάση δεδομένων ικανοποιεί το πρώτο επίπεδο κανονικοποίησης θα πρέπει σε κάθε κελί να υπάρχει μία τιμή, δηλαδή δεν μπορούμε σε ένα κελί να έχουμε δύο email.
Επίσης δεν θα πρέπει να υπάρχουν διπλές σειρές.
Η λύση σε αυτά τα δύο προβήματα είναι είτε να αφήνουμε τους πελάτες να μπορούν να προσθέτουν μόνο ένα email, είτε να φτιάξουμε έναν δεύτερο πίνακα που να αποθηκεύουμε τα email.
Ένα άλλο παρόμοιο πρόβλημα με το πρώτο είναι οι διευθύνσεις. Δεν πρέπει να έχουμε σε ένα κελί την χώρα, τον ταχυδρομικό κώδικα, την πόλη, την οδό και τον αριθμό της οδού.
Η λύση είναι να δημιουργήσουμε ξεχωριστές στήλες για την κάθε τιμή.
Τέλος, κάθε πίνακας θα πρέπει υποχρεωτικά να έχει πρωτεύον κλειδί και κάθε στήλη θα πρέπει να έχει μόνο έναν τύπο δεδομένων. Δεν μπορούμε δηλαδή να έχουμε μία στήλη με φυσικούς αριθμούς αλλά και με κείμενο.
Second Normal Form
Εάν το πρωτεύον κλειδί αποτελείται από μία στήλη δεν χρειάζεται να κάνουμε τίποτα. Εάν όμως αποτελείται από τουλάχιστον δύο στήλες τότε θα πρέπει όλες οι στήλες που δεν ανήκουν στο πρωτεύον κλειδί να εξαρτόνται από το σύνολο των στηλών του πρωτεύοντος κλειδιού. Ας το δούμε σε ένα παράδειγμα για να το καταλάβουμε καλύτερα.
Ας υποθέσουμε έχουμε έναν πίνακα με πρωτεύοντα κλειδιά τις στήλες κατασκευαστής και μοντέλο και έχουμε και μία τρίτη στήλη την χώρα κατασκευής.
Η τρίτη στήλη εξαρτάται μόνο από τον κατασκευαστή και όχι από το μοντέλο.
Για να λύσουμε αυτο το πρόβλημα πρέπει να χωρίσουμε αυτόν τον πίνακα στα δύο. Ο ένας θα έχει σαν πρωτεύον κλειδί μόνο τον κατασκευαστή και θα περιέχει και την στήλη χώρα κατασευαστή. Ο δεύτερος πίνακας θα περιέχει μόνο τα δύο πρωτεύοντα κλειδιά, δηλαδή τις στήλες κατασκευαστής και μοντέλο.
Third Normal Form
Κάθε στήλη που δεν ανήκει στο πρωτεύον κλειδί, πρέπει να εξαρτάται μόνο από το πρωτεύον κλειδί.
Για παράδειγμα έχουμε σε έναν πίνακα τις κριτικές των χρηστών.
Εδώ η στήλη star_meaning εξαρτάται από την στήλη star.
Για να λύσουμε αυτό το πρόβλημα πρέπει να φτιάξουμε έναν νέο πίνακα που θα έχει τις στήλες star και star_meaning και θα συνδέεται με τον πίνακα των κριτικών με μία νέα στήλη που θα λειτουργεί σαν ξένο κλειδί (star_id).
Στο συγκεκριμένο μάθημα θα ασχοληθούμε μόνο με τους τρεις πρώτους κανόνες που είναι και αυτοί που χρησιμοποιούνται περισσότερο.
Σχεδίαση Βάσης Δεδομένων (ER)
Στην συνέχεια θα δούμε πώς μπορούμε να φτιάξουμε ένα διάγραμμα για την βάση δεδομένων μας, το σχεδιάγραμμα λέγεται μοντέλο Οντοτήτων-Συσχετίσεων ή στα αγγλικά entity-relationship model (ER).
Ας υποθέσουμε ότι είμαστε μία ηλεκτρονική τράπεζα και θέλουμε να φτιάξουμε μία βάση δεδομένων. Προφανώς για να φτιάξουμε μία ολοκληρωμένη βάση θα έπαιρνε πάρα πολύ χρόνο οπότε εμείς εδώ θα αφοσιωθούμε σε μερικούς πίνακες μόνο.
Οι πίνακες που θα χρησιμοποιήσουμε είναι:
- Καταστήματα
- Υπάλληλοι
- Πελάτες
- Κάρτες
- Ιστορικό Υποστήριξης Πελατών
- Λόγος υποστήριξης
Ξεκινάμε πρώτα με τον πίνακα καταστήματα και προσθέτουμε και τις στήλες του πίνακα πλην του ξένου κλειδιού. Η στήλη του ξένου κλειδιού δείχνει την σχέση που υπάρχει μεταξύ δύο πινάκων, στο μοντέλο ER την σχέση μεταξύ δύο πινάκων την βλέπουμε μέσο των γραμμών που συνδέουν τους δύο πίνακες. Θα το δούμε λεπτομερώς στην συνέχεια.
Εδώ βλέπουμε τον πίνακα καταστήματα και τις στήλες του, στο πρωτεύον κλειδί βάλαμε και διαφορετικό χρώμα για να το ξεχωρίζουμε.
Στην συνέχεια θα προσθέσουμε και τον πίνακα με τους υπάλλήλους και τις στήλες του πίνακα.
Στην συνέχεια θα δούμε πως συνδέονται οι δύο πίνακες μεταξύ τους. Όταν συνδέονται με διπλή γραμμή σημαίνει ότι όλες οι εγγραφές του πίνακα έχουν σύνδεση με τον άλλον πίνακα, ενώ αν είναι μονή όχι.
Εδώ βλέπουμε ότι όλοι οι υπάλληλοι πρέπει να ανήκουν σε ένα κατάστημα και ότι όλα τα καταστήματα πρέπει να έχουν υπαλλήλους.
Επίσης το 1 και το Ν, τα οποία τοποθετούντε στην αντίθετη μεριά, δηλαδή το 1 που είναι από την μεριά του πίνακα των καταστημάτων ανήκει στον πίνακα των υπαλλήλων. Αυτό σημαίνει ότι ένας υπάλληλος μπορεί να ανήκει σε 1 κατάστημα και όχι σε πολλά. Το Ν εδώ σημαίνει ότι ένα κατάστημα μπορεί να περιέχει πολλούς υπαλλήλους.
Μεταξύ των δύο πινάκων υπάρχει και μία δεύτερη σχέση. Κάθε κατάστημα έχει και έναν μανατζερ από τον πίνακαν των εργαζομένων.
Η σχέση είναι 1 προς 1. Δηλαδή ένας υπάλληλος μπορεί να είναι μάνατζερ μόνο σε ένα κατάστημα και ένα κατάστημα μπορεί να έχει μόνο έναν μανατζερ. Επίσης δεν είναι απαραίτητο όλοι οι υπάλληλοι να είναι μάνατζερ αλλά πρέπει όλα τα καταστήματα να έχουν έναν μάνατζερ.
Έχουμε επίσης μία σύνδεση μεταξύ του ίδιου πίνακα, των υπαλλήλων. Έχουμε ότι κάποιοι υπάλληλοι είναι προϊστάμενοι σε άλλους υπαλλήλους, οπότε και κάποιοι υπάλληλοι έχουν κάποιον προϊστάμενο.
Επειδή δεν είναι όλοι οι υπάλληλοι προιστάμενοι και ούτε όλοι οι υπάλληλοι έχουν κάποιον προιστάμενο, γιαυτό βάζουμε μία μονή γραμμή. Επίσης ένας υπάλληλος μπορεί να είναι προϊστάμενος σε πολλούς υπαλλήλους αλλά ένας υπάλληλος μπορεί να έχει μέχρι έναν προϊστάμενο.
Στην συνέχεια θα προσθέσουμε και τον πίνακα πελάτες.
Έπειτα θα προσθέσουμε και τον πίνακα κάρτες.
Κάθε κάρτα πρέπει να ανήκει σε κάποιον πελάτη αλλά κάθε πελάτης δεν χρειάζεται να έχει κάρτα. Επίσης ο πελάτης μπορεί να έχει πολλές κάρτες αλλά η μία κάρτα μπορεί να ανήκει μόνο σε έναν πελάτη.
Επίσης έχουμε και μία σύνδεση ανάμεσα σε πελάτες και υπαλλήλους.
Εδώ δεν χρειάζεται κάθε πελάτης να έχει επικοινωνήσει με την υποστήριξή πελατών και δεν χρειάζεται κάθε υπάλληλος να έχει δουλέψει στην υποστήριξη πελατών.
Επίσης ένας πελάτης μπορεί να έχει επικοινωνήσει με πολλούς υπαλλήλους και ένας υπάλληλος να έχει εξυπηρετήσει πολλούς πελάτες.
Εφόσον έχουμε μία σχέση πολλά προ πολλά (Ν σε Μ) τότε δημιουργούμε έναν καινούργιο πίνακα, το “Ιστορικό Υποστήριξης πελατών”. Δεν προσθέτουμε δηλαδή την σχέση μεταξύ των πελατών και των υπαλλήλων μέσα στον πίνακα των υπαλλήλων ή μέσα στον πίνακα των πελατών.
Επιπλέον προσθέτουμε και δύο στήλες, το αν λύθηκε το πρόβλημα και πόσο χρόνο πήρε.
Τέλος, θα προσθέσουμε και τον πίνακα με τον λόγο που επικοινώνησε ο πελάτης με την υποστήριξη.
Ο λόγος που προσθέτουμε τον ‘Λόγο Υποστήριξης’ σε ξεχωριστό πίνακα είναι για να μην έχουμε μέσα στον πίνακα ‘Υποστήριξη’ πολλές επαναλαμβανόμενες τιμές κάτι το οποίο θα έκανε την βάση μας να πιάνει περισσότερο χώρο. Επίσης αν θέλουμε να επεξεργαστούμε έναν από τους λόγους υποστήριξης θα χρειαστεί να αλλάξουμε ένα κελί και όχι χιλιάδες.
Αυτό είναι και το τελικό διάγραμμα ER.
Το διάγραμμα ER είναι κυρίως θεωρητικό και ένα αρχικό σχέδιο για να δούμε πώς θα φτιάξουμε την βάση δεδομένων μας. Αν η βάση μας είναι σχετικά μικρή δεν είναι αναγκαίο να φτιάξουμε ένα.
Μετατροπή του διαγράμματος ER σε Σχέδιο Βάσης Δεδομένων (Database Schema)
Το σχέδιο βάσης δεδομένων μας δείχνει πώς θα είναι οι πίνακες και πώς τα δεδομένα των πινάκων θα συνδέονται το ένα με το άλλο. Είναι ουσιαστικά το πώς θα είναι η τελική μορφή των πινάκων της βάσης δεδομένων μας.
Ξεκινάμε αρχικά με το να φτιάξουμε τους πίνακες που φαίνονται στο διάγραμμα ER. Θα χρησιμοποιήσουμε και εδώ το χρώμα κόκκινο για το πρωτεύον κλειδί, το κίτρινο για το ξένο κλειδί και το πράσινο για τις υπόλοιπες στήλες.
Στην συνέχεια θα προσθέσουμε τις σχέσεις 1 προς 1. Εδώ έχουμε μόνο μία σχέση που είναι οι μάνατζερ των καταστημάτων. Το ξένο κλειδί το προσθέτουμε στον πίνακα που έχει πλήρη συμμετοχή (διπλή γραμμή).
Έπειτα προσθέτουμε και τις σχέσεις 1 προς Ν. Το πρωτεύον κλειδί του πίνακα με το 1 στην μεριά του θα μπει σαν ξένο κλειδί στον πίνακα με το Ν στην μεριά του. Για παράδειγμα οι πελάτες μπορούν να έχουν πολλές κάρτες αλλά οι κάρτες μπορούν να έχουν έναν πελάτη. Αρα στον πίνακα κάρτες θα μπει ο πελάτης σαν ξένο κλειδί.
Τέλος θα προσθέσουμε και τις σχέσεις Ν προς Μ. Σε αυτή την περίπτωση το σύνηθες είναι να φτιαχτεί ένας νέος πίνακας που το πρωτεύον κλειδί του να απότελείται από τα δύο πρωτεύον κλειδιά από τους δύο πίνακες που υπάρχει η σχέση.
Επίσης θα προσθέσουμε και την σχέση 1 προς Ν στον καινούργιο πίνακα που θα φτιάξουμε, με τον πίνακα ‘Λόγος Υποστήριξης’.
Για να δούμε λίγο καλύτερα τις σχέσεις μεταξύ των στηλών θα σχεδιάσουμε μερικές γραμμές που θα ενώνουν όσες στήλες έχουν σχέσεις μεταξύ τους.
Αυτή είναι και η τελική μορφή της βάσης δεδομένων μας.
Και κάπου εδώ φτάσαμε στο τέλος του συγκεκριμένου μαθήματος. Είδαμε συνοπτικά την θεωρία για το πώς μπορούμε να σχεδιάσουμε μία βάση δεδομένων.
Σε επόμενο μάθημα θα δούμε πώς μπορούμε να πάμε από την θεωρία στην πράξη και να γράψουμε των κώδικα που χρειάζεται για να δημιουργήσουμε την βάση μας.
Αν βρήκες ενδιαφέρον αυτό το μάθημα μπορείς να μας κεράσεις έναν καφέ ή να το μοιραστείς με τους φίλους στα social media.
