3.5.2

3.5.2 Διαδικασία Μετασχηματισμού από το Εννοιολογικό Μοντέλο στο Σχεσιακό Μοντέλο
Στην υποενότητα αυτή θα μελετήσουμε τους κανόνες που διέπουν τον μετασχηματισμό του μοντέλου οντοτήτων συσχετίσεων στο σχεσιακό μοντέλο. Η υλοποίηση του σχεσιακού μοντέλου είναι μία σχεσιακή βάση δεδομένων, όπως φαίνεται στο παρακάτω σχήμα, με τον (σχεσιακό) πίνακα ΜΑΘΗΤΕΣ.

Ο (σχεσιακός) πίνακας ΜΑΘΗΤΕΣ είναι ένας δισδιάστατος πίνακας. Αποτελείται από γραμμές και στήλες. Έχει τέσσερις στήλες Κωδικός_Μαθητή, Όνομα, Επίθετο και email. Κάθε γραμμή του πίνακα αυτού περιγράφει ένα στιγμιότυπο της οντότητας ΜΑΘΗΤΗΣ. Για παράδειγμα, υπάρχει καταχωρημένος στον πίνακα ο μαθητής με όνομα «Πέτρος», επίθετο «Θεοδώρου», email «ghgh@jghj.gr» και κωδικό μαθητή «S1001». Η στήλη Κωδικός_Μαθητή αποτελεί το πρωτεύoν κλειδί του πίνακα. Κάθε μαθητής έχει ένα μοναδικό κωδικό. Δεν μπορούμε, δηλαδή, να συναντήσουμε δύο μαθητές με τον ίδιο κωδικό.

Όλες οι παραπάνω αυτές πληροφορίες σχετικά με τον (σχεσιακό) πίνακα ΜΑΘΗΤΕΣ, όπως αυτές καθορίζονται από το αντίστοιχο μοντέλο οντοτήτων συσχετίσεων, αποθηκεύονται με έναν συγκεκριμένο τρόπο στον διαγραμματικό πίνακα ΜΑΘΗΤΕΣ. Ο διαγραμματικός αυτός πίνακας ονομάζεται ΜΑΘΗΤΕΣ όπως και η αντίστοιχη οντότητα. Συνήθως προτιμούμε τον πληθυντικό αριθμό. Δηλαδή ΜΑΘΗΤΕΣ αντί για ΜΑΘΗΤΗΣ. Ο διαγραμματικός πίνακας αποτελείται από τρεις στήλες. Τον «Τύπο Κλειδιού», το «Προαιρετικό» και το «Όνομα Στήλης».

Ο διαγραμματικός αυτός πίνακας ΜΑΘΗΤΕΣ μας λέει ότι για την οντότητα ΜΑΘΗΤΗΣ θα δημιουργηθεί κατά την υλοποίηση ο (σχεσιακός) πίνακας ΜΑΘΗΤΕΣ που θα έχει τέσσερις στήλες: Κωδικός_Μαθητή, Όνομα, Επίθετο και email, όπως φαίνεται από την στήλη «Όνομα Στήλης» του διαγραμματικού πίνακα ΜΑΘΗΤΕΣ. Οι τρεις πρώτες πληροφορίες για τον μαθητή είναι υποχρεωτικές, όπως φαίνεται από την στήλη «Προαιρετικό» του διαγραμματικού πίνακα ΜΑΘΗΤΕΣ. Δηλαδή, κάθε φορά που θα εισάγουμε έναν μαθητή πρέπει υποχρεωτικά να καταγράφουμε τον κωδικό του, το όνομα του και το επίθετό του. Η καταγραφή του email του μαθητή είναι προαιρετική. Η στήλη Κωδικός_Μαθητή θα αποτελεί το πρωτεύον κλειδί του (σχεσιακού) πίνακα ΜΑΘΗΤΕΣ όπως φαίνεται από την στήλη «Τύπος κλειδιού» του διαγραμματικού πίνακα ΜΑΘΗΤΕΣ. Δηλαδή, στον σχεσιακό πίνακα ΜΑΘΗΤΕΣ όλα τα κελιά της στήλης Κωδικός_Μαθητή θα έχουν διαφορετικές τιμές.

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

Σχήμα 3.5.7: Μετασχηματισμός μοντέλου οντοτήτων συσχετίσεων

Οι κανόνες που ακολουθούνται για τον μετασχηματισμό ενός ER διαγράμματος στο σχεσιακό μοντέλο είναι οι εξής:
 * Κάθε οντότητα γίνεται ένας πίνακας
 * Κάθε γνώρισμα γίνεται στήλη
 * Κάθε μοναδικό αναγνωριστικό γίνεται πρωτεύoν κλειδί
 * Κάθε συσχέτιση μετασχηματίζεται σε ξένο κλειδί.
 * Κάθε στιγμιότυπο γίνεται γραμμή του πίνακα (στην φυσική υλοποίηση)

Στο σχήμα 3.5.7. παρουσιάζεται ο μετασχηματισμός της οντότητας ΜΑΘΗΤΗΣ με βάση τους παραπάνω κανόνες με την μορφή του διαγραμματικού πίνακα ΜΑΘΗΤΕΣ. Ο διαγραμματικός πίνακας ΜΑΘΗΤΕΣ αποτελεί την αναπαράσταση της δομής μιας σχεσιακής βάσης. Ο (σχεσιακός) πίνακας ΜΑΘΗΤΕΣ αποτελεί την μετέπειτα υλοποίηση του διαγραμματικού πίνακα ΜΑΘΗΤΕΣ.

Όπως έχουμε εξηγήσει και παραπάνω ένας διαγραμματικός πίνακας αποτελείται από τρεις στήλες. Τον «Τύπο Κλειδιού», το «Προαιρετικό» και το «Όνομα Στήλης». Η πρώτη γραμμή του διαγραμματικού πίνακα περιέχει το όνομα του σχεσιακού πίνακα. Τα κελιά στην στήλη «Όνομα Στήλης» (δηλαδή Κωδικός_Μαθητή, Όνομα, Επίθετο και email) αντιστοιχούν στα γνωρίσματα της αντίστοιχης οντότητας, καθώς και στις στήλες του αντίστοιχου σχεσιακού πίνακα. Για κάθε κελί που περιέχεται στη στήλη «Όνομα Στήλης» σημειώνεται στο αντίστοιχο κελί της στήλης «Τύπος Κλειδί» το σύμβολο «pk» ή «fk» ανάλογα με το αν το αντίστοιχο γνώρισμα αποτελεί πρωτεύον ή ξένο κλειδί. Κατά επέκταση και η αντίστοιχη στήλη του σχεσιακού πίνακα θα αποτελεί πρωτεύον ή ξένο κλειδί. Η στήλη «Προαιρετικό» περιέχει τα σύμβολα «*» ή «ο» ανάλογα με το αν το αντίστοιχο κελί στην στήλη «Όνομα Στήλης» αναφέρεται σε γνώρισμα που είναι υποχρεωτικό ή προαιρετικό.

Ας θεωρήσουμε ένα δεύτερο παράδειγμα, την συσχέτιση Εργαζόμενος – Τμήμα και ας προσπαθήσουμε να την μετασχηματίσουμε ακολουθώντας τους κανόνες, όπως φαίνεται στο παρακάτω σχήμα.

Η οντότητα ΕΡΓΑΖΟΜΕΝΟΣ γίνεται διαγραμματικός πίνακας με το όνομα ΕΡΓΑΖΟΜΕΝΟΙ. Παρόμοια, η οντότητα ΤΜΗΜΑ γίνεται διαγραμματικός πίνακας με το όνομα ΤΜΗΜΑΤΑ. Τα γνωρίσματα Κωδικός Εργαζομένου, Όνομα και Επίθετο της οντότητας ΕΡΓΑΖΟΜΕΝΟΣ μετατρέπονται στα αντίστοιχα κελιά Κωδικός_Εργαζομένου, Όνομα και Επίθετο της στήλης «Όνομα Στήλης» του διαγραμματικού πίνακα ΕΡΓΑΖΟΜΕΝΟΙ. Παρόμοια και για τα γνωρίσματα της οντότητας ΤΜΗΜΑ. Τα σύμβολα του υποχρεωτικού (*) ή του προαιρετικού (ο) των γνωρισμάτων ακολουθούν και τα αντίστοιχα κελιά στην στήλη «Προαιρετικό». Αν ένα γνώρισμα αποτελεί μοναδικό αναγνωριστικό (πρωτεύον κλειδί) για την οντότητα, τότε στο αντίστοιχο κελί της στήλης «Τύπος Κλειδί» σημειώνεται το σύμβολο pk. Στο παράδειγμά μας δηλαδή, τα κελιά Κωδικός_Εργαζομένου και Κωδικός_Τμήματος θα είναι πρωτεύοντα κλειδιά αντίστοιχα για τους (σχεσιακούς) πίνακες ΕΡΓΑΖΟΜΕΝΟΙ και ΤΜΗΜΑΤΑ. Το ξένο κλειδί τοποθετείται σε εκείνον τον διαγραμματικό πίνακα που βρίσκεται στη θέση του «πολλά». Η συσχέτιση μεταξύ ΤΜΗΜΑ και ΕΡΓΑΖΟΜΕΝΟΣ είναι «ένα προς πολλά». Δηλαδή σε ένα τμήμα είναι δυνατό να εργάζονται περισσότεροι από ένας εργαζόμενοι. Το «πολλά» αντιστοιχεί στην οντότητα ΕΡΓΑΖΟΜΕΝΟΣ. Για αυτό και στον διαγραμματικό πίνακα ΕΡΓΑΖΟΜΕΝΟΙ δημιουργείται ένα επιπλέον κελί με το όνομα Κωδικός_Τμήματος που έχει τον ρόλο του ξένου κλειδιού. Η στήλη «Τύπος Κλειδί» στο αντίστοιχο κελί περιέχει το σύμβολο «fk» για να δηλώσουμε ότι είναι ξένο κλειδί. Τα δύο κλειδιά ξένο και πρωτεύον στους δύο διαγραμματικούς πίνακες συνδέονται μεταξύ τους με ένα βέλος για να δείξουμε την μεταξύ τους σχέση.
 * **Κάθε οντότητα γίνεται ένας πίνακας**
 * **Κάθε γνώρισμα γίνεται στήλη (του αντίστοιχου σχεσιακού πίνακα)**
 * **Κάθε μοναδικό αναγνωριστικό γίνεται πρωτεύον κλειδί**
 * **Κάθε συσχέτιση μετασχηματίζεται σε ξένο κλειδί.**

Σχήμα 3.5.8: ο μετασχηματισμός ενός ER διαγράμματος σε σχεσιακό μοντέλο.

**Ερωτήσεις / Δραστηριότητες**

Μετασχηματίστε το ακόλουθο ER διάγραμμα που απεικονίζει την σχέση μεταξύ «μαθήματος» και «τμήμα» σε σχεσιακό μοντέλο. Δημιουργήστε τόσο τους διαγραμματικούς πίνακες όσο και τους σχεσιακούς πίνακες. «Γεμίστε» τους σχεσιακούς πίνακες με ενδεικτικά στοιχεία.
 * Δραστηριότητα**: Μετασχηματισμός ER διαγράμματος

Οι φοιτητές στο πανεπιστήμιο παρακολουθούν διάφορα μαθήματα. Για παράδειγμα, στο πρώτο εξάμηνο διδάσκεται το μάθημα «Γλώσσα Προγραμματισμού Java». Λόγου του μεγάλου αριθμού των φοιτητών, οι φοιτητές χωρίζονται σε δύο τμήματα. Το ένα τμήμα παρακολουθεί το μάθημα αυτό κάθε Δευτέρα και Τετάρτη και ώρα 10.00 – 12.00, ενώ το άλλο τμήμα κάθε Τετάρτη και Παρασκευή και ώρα 17.00 – 19.00.

Σχήμα 3.5.9: ER διάγραμμα