ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Φυσική Σχεδίαση – Υλοποίηση βάσης ΕΣΔ232 – Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα Περιεχόμενα Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα Περιεχόμενα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Βιβλιογραφία [Ullman 2007]: Chapter 4 [Seyed 2007]: Chapter 8 [Forta 2005]: Chapter 21 [Oppel 2004]: Chapter 8 [Petersen 2002]: Chapter 5 [Taylor 2000]: Chapters 10, 12 [Teorey 2005]: Chapter 6 Βιβλιογραφία Ενότητας Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Η φυσική σχεδίαση αποσκοπεί στο μετασχηματισμό του ER διαγράμματος σε μια βάση δεδομένων. Περιλαμβάνει: Τη δημιουργία των πινάκων της βάσης: Τον καθορισμό των πεδίων στους πίνακες Τον καθορισμό των περιορισμών όσον αφορά τα πεδία των πινάκων, τις επιτρεπτές τιμές τις οποίες λαμβάνουν καθώς και τα ξένα κλειδιά Η φυσική σχεδίαση της βάσης μπορεί να γίνει είτε με εξειδικευμένο λογισμικό το οποίο συνήθως παρέχεται με το σύστημα DBMS (π.χ. phpMyAdmin για τη βάση MySQL) είτε με κατάλληλες εντολές SQL (συνήθως βασισμένες στην CREATE TABLE και την ALTER TABLE). Η δεύτερη μεθοδολογία φυσικής υλοποίησης της βάσης (δηλαδή με τη βοήθεια της SQL) είναι λιγότερο εξαρτημένη από το συγκεκριμένο σύστημα DBMS που χρησιμοποιείται Εισαγωγή Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Βασικά βήματα μετασχηματισμού ER διαγράμματος σε βάση Ο μετασχηματισμός ενός ER διαγράμματος σε βάση δεδομένων περιλαμβάνει αρκετές ενέργειες και ελέγχους. Εντούτοις τα τρία κυριότερα βήματα είναι: 1)Μετασχηματισμός κάθε οντότητας σε πίνακα (με εισαγωγή των κατάλληλων κλειδιών και πεδίων). 2)Δημιουργία ενός πίνακα για κάθε συσχέτιση πολλά προς πολλά. Στον πίνακα συμπεριλαμβάνονται τα πρωτεύοντα κλειδιά των οντοτήτων που συνδέονται με τη συσχέτιση καθώς και τα δεδομένα διασταύρωσης 3)Μετασχηματισμός κάθε τριαδικής (ή μεγαλύτερης πολλαπλότητας) συσχέτισης σε πίνακα ανεξαρτήτως της μορφής της συσχέτισης (π.χ. ένας προς ένα προς ένα, ένα προς πολλά προς ένα, κ.ο.κ) 4)Προσθήκη των κατάλληλων περιορισμών στα πεδία των πινάκων που έχουν δημιουργηθεί στα βήματα (1)-(3) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Μετασχηματισμός οντοτήτων Όλες οι οντότητες που εμφαίνονται στο ER διάγραμμα μετασχηματίζονται σε πίνακες. Στους πίνακες περιλαμβάνονται όλα τα πεδία των οντοτήτων ως στήλες Για κάθε οντότητα που αντιστοιχεί σε μια συσχέτιση «ένα προς πολλά» που αντιστοιχεί στην πλευρά του «πολλά» δημιουργείται στον αντίστοιχο πίνακα ένα ξένο κλειδί με αναφορά στο πρωτεύον κλειδί στην πλευρά του «ένα» Συσχετίσεις «ένα προς ένα» υποδηλώνουν συχνά κακή σχεδίαση (ιδιαίτερα όταν είναι υποχρεωτικές και προς τις δύο κατευθύνσεις). Αν κατασκευαστούν δύο ξεχωριστοί πίνακες τότε επιλέγεται ο ένας μόνο από αυτούς για να προστεθεί σε αυτόν ξένο κλειδί Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Παράδειγμα Να κατασκευάσετε τους πίνακες για το πιο κάτω διάγραμμα. Λύση: CREATE TABLE Departments (code CHAR(3), name VARCHAR(25), phone VARCHAR(15), sec_name VARCHAR(45), chairman INT(3), PRIMARY KEY(code)) CREATE TABLE Students (sid INT(3), name VARCHAR(20), surname VARCHAR(25), semester INT(1) UNSIGNED, phone VARCHAR(15), dept_id CHAR(3) NOT NULL, PRIMARY KEY(sid), FOREIGN KEY (dept_id) REFERENCES Departments ON DELETE SET default ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Μετασχηματισμός συσχετίσεων Οι συσχετίσεις απαιτούν ιδιαίτερους χειρισμούς στην υλοποίηση της βάσης: Σχέσεις πολλά προς πολλά μετασχηματίζονται σε πίνακες Τριαδικές σχέσεις οποιασδήποτε πολλαπλότητας μετασχηματίζονται σε πίνακες Σε όλες τις περιπτώσεις η πολλαπλότητα της σχέσης μας οδηγεί σε συγκεκριμένες επιλογές όσον αφορά τις τιμές των ξένων κλειδιών και των τιμών NULL Στις επόμενες διαφάνειες θα δούμε διάφορα παραδείγματα μετασχηματισμού συσχετίσεων. Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς ένα Διακρίνουμε τρεις περιπτώσεις: Ένα προς ένα υποχρεωτική (ολική συμμετοχή και των δύο οντοτήτων) και προς τις δύο κατευθύνσεις. Στην περίπτωση αυτή οι δύο οντότητες μπορούν να ενοποιηθούν σε μία. Αν θέλουμε να τις κρατήσουμε (πιθανόν επειδή ο πίνακας που προκύπτει έχει πολλά πεδία) τότε χρησιμοποιούμε μόνο στον ένα πίνακα ξένο κλειδί με μη NULL τιμή (και κατάλληλες συνθήκες σε περίπτωση διαγραφής ή και ενημέρωσης) Ένα προς ένα υποχρεωτική (ολική συμμετοχή) προς τη μία κατεύθυνση. Η οντότητα στην πλευρά του προαιρετικού τμήματος παίρνει ξένο κλειδί το πρωτεύον της άλλης οντότητας (δηλαδή της οντότητας που συμμετέχει ολικά στη σχέση). Το ξένο κλειδί έχει μη NULL τιμή και κατάλληλες συνθήκες σε περίπτωση διαγραφής ή και ενημέρωσης. Ένα προς ένα προαιρετική (μερική συμμετοχή) και προς τις δύο κατευθύνσεις. Χρησιμοποιούμε μόνο στον ένα πίνακα ξένο κλειδί με τιμή που μπορεί να είναι και NULL (και κατάλληλες συνθήκες σε περίπτωση διαγραφής ή και ενημέρωσης) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς ένα (2) Ένα προς ένα υποχρεωτική και προς τις δύο κατευθύνσεις. CREATE TABLE Reports (no INT(3), name VARCHAR(40), PRIMARY KEY(no)) CREATE TABLE Abbreviations (Abbr_no CHAR(6), report_no INT(3) NOT NULL UNIQUE, PRIMARY KEY(Abbr_no), FOREIGN KEY (report_no) REFERENCES Reports ON DELETE cascade ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς ένα (3) Ένα προς ένα υποχρεωτική προς τη μία κατεύθυνση. CREATE TABLE Academics (ID INT(3), name VARCHAR(20), surname VARCHAR(25), rank INT(1) UNSIGNED, specialty VARCHAR(25), phone VARCHAR(15), PRIMARY KEY(ID)) CREATE TABLE Departments (code CHAR(3), name VARCHAR(25), phone VARCHAR(15), sec_name VARCHAR(45), coordinator_ID INT(3) NOT NULL UNIQUE PRIMARY KEY(code), FOREIGN KEY (coordinator_ID) REFERENCES Academics ON DELETE SET default ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς ένα (4) Ένα προς ένα προαιρετική και προς τις δύο κατευθύνσεις. «Σε κάθε ακαδημαϊκό μπορεί να δοθεί το πολύ ένα laptop. Υπάρχουν laptop που δεν έχουν χρεωθεί σε κανένα ακαδημαϊκό» CREATE TABLE Academics (ID INT(3), name VARCHAR(20), surname VARCHAR(25), rank INT(1) UNSIGNED, specialty VARCHAR(25), phone VARCHAR(15), PRIMARY KEY(ID)) CREATE TABLE Laptops (no INT(2), firm VARCHAR(20), bought_date DATE, academic_ID INT(3), PRIMARY KEY(no), FOREIGN KEY (academic_ID) REFERENCES Academics ON DELETE SET NULL ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς πολλά Σε όλες τις περιπτώσεις το ξένο κλειδί τοποθετείται στην οντότητα που αντιστοιχεί στα πολλά. Διακρίνουμε τέσσερεις υποπεριπτώσεις: 1)Ένα προς πολλά υποχρεωτική και προς τις δύο κατευθύνσεις (ολική συμμετοχή και των δύο οντοτήτων στη σχέση). Το ξένο κλειδί έχει μη NULL τιμή και κατάλληλες συνθήκες σε περίπτωση διαγραφής ή και ενημέρωσης 2)Ένα προς πολλά προαιρετική προς την κατεύθυνση του «ένα» (η οντότητα στο ένα μετέχει μερικά στη σχέση). Το ξένο κλειδί μπορεί να έχει NULL τιμή (και κατάλληλες συνθήκες σε περίπτωση διαγραφής ή και ενημέρωσης). 3)Ένα προς πολλά προαιρετική προς την κατεύθυνση του «πολλά». Ο μετασχηματισμός είναι ίδιος με την περίπτωση (1). Ο έλεγχος της υποχρεωτικής τιμής στα «πολλά» δεν μπορεί να εφαρμοστεί κατά τον ορισμό του πίνακα αλλά με μεταγενέστερο έλεγχο. 4)Ένα προς πολλά προαιρετική και προς τις δύο κατευθύνσεις. Ο μετασχηματισμός είναι ίδιος με την περίπτωση (2). Ο έλεγχος της υποχρεωτικής τιμής στα «πολλά» δεν μπορεί να εφαρμοστεί κατά τον ορισμό του πίνακα αλλά με μεταγενέστερο έλεγχο. Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς πολλά (2) Ένα προς πολλά υποχρεωτική και προς τις δύο κατευθύνσεις: «Κάθε ακαδημαϊκός υπάγεται σε ένα και μόνο τμήμα. Κάθε τμήμα έχει τουλάχιστον ένα ακαδημαϊκό» CREATE TABLE Departments (code CHAR(3), name VARCHAR(25), phone VARCHAR(15), sec_name VARCHAR(45), PRIMARY KEY(code)). CREATE TABLE Academics (ID INT(3), name VARCHAR(20), surname VARCHAR(25), rank INT(1) UNSIGNED, specialty VARCHAR(25), phone VARCHAR(15), dept_id CHAR(3) NOT NULL, PRIMARY KEY(ID), FOREIGN KEY (dept_ID) REFERENCES Departments ON DELETE SET default ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση ένα προς πολλά (3) Ένα προς πολλά προαιρετική προς την κατεύθυνση του «πολλά» «Κάθε τμήμα δημοσιεύει πολλές αναφορές. Υπάρχουν αναφορές που δεν δημοσιεύονται από κάποιο τμήμα» CREATE TABLE Departments (code CHAR(3), name VARCHAR(25), phone VARCHAR(15), sec_name VARCHAR(45), PRIMARY KEY(code)). CREATE TABLE Reports (no INT(3), title VARCHAR(40), summary TEXT, dept_id CHAR(3), PRIMARY KEY(ID), FOREIGN KEY (dept_ID) REFERENCES Departments ON DELETE SET NULL ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Δυαδική συσχέτιση πολλά προς πολλά Σε όλες τις περιπτώσεις δημιουργείται επιπλέον πίνακας για τη σχέση πολλά προς πολλά Στο νέο πίνακα ορίζουμε ξένα κλειδιά των πρωτεύοντα κλειδιά των συσχετιζόμενων οντοτήτων καθώς και τα δεδομένα διασταύρωσης. Επειδή η σχέση πολλά προς πολλά με τη δημιουργία ενδιάμεσου πίνακα θα διασπαστεί σε δύο σχέσεις ένα προς πολλά με υποχρεωτική την πλευρά του «ένα» ισχύουν για τις τιμές των πεδίων όσα αναφέρθηκαν για τη αντίστοιχη σχέση (ένα προς πολλά με υποχρεωτική την πλευρά του «ένα»). Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Παράδειγμα Να μετασχηματίσετε την πιο κάτω σχέση σε πίνακες: Λύση: CREATE TABLE Courses (code CHAR(6), name VARCHAR(25), ECTS INT(1) UNSIGNED, PRIMARY KEY(code)). CREATE TABLE Rooms (code VARCHAR(8), type SET(‘lecture’, ‘lab’), capacity INT(2) UNSIGNED, PRIMARY KEY(code)). CREATE TABLE Course_Rooms (room_code VARCHAR(8), course_code CHAR(6), day SET(‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’), start_time TIME, end_time TIME, PRIMARY KEY(room_code, course_code, day), FOREIGN KEY (room_code) REFERENCES Rooms ON DELETE cascade ON UPDATE cascade, FOREIGN KEY (course_code) REFERENCES Courses ON DELETE cascade ON UPDATE cascade) Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Ακεραιότητα δεδομένων Με τον όρο ακεραιότητα δεδομένων αναφερόμαστε στη διαδικασία προστασίας των δεδομένων της βάσης μέσω περιορισμών που τίθενται σε αυτήν. Ο όρος «περιορισμοί» προέκυψε επειδή απαγορεύουν αλλαγές στα δεδομένα οι οποίες θα μπορούσαν να παραβιάσουν έναν ή περισσότερους «κανόνες της επιχείρησης» (business rules). Οι «κανόνες επιχείρησης» υλοποιούνται σε μια βάση με κάποιον (πολλές φορές περισσότερους από έναν) από τους πιο κάτω τρόπους: NOT NULL τιμές. Πρωτεύοντα κλειδιά (δηλαδή διαφορετική τιμή για κάθε εγγραφή και επιπλέον μη NULL τιμή) Ξένα κλειδιά (κάθε τιμή ξένου κλειδιού αντιστοιχεί σε κάποια τιμή πρωτεύοντος κλειδιού στον πίνακα αναφοράς) Μοναδικές (unique) τιμές (όπως τα πρωτεύοντα κλειδιά αλλά επιτρέπονται και NULL τιμές) Έλεγχος τιμής πεδίου (για παράδειγμα HIRE_DATE > BORN_DATE) Έλεγχοι πεδίου (τύποι δεδομένων στα πεδία) Εναύσματα (π.χ. κατά τη διαγραφή ενός ακαδημαϊκού από τη βάση ελέγχεται κατά πόσον το τμήμα πληροί τον ελάχιστο αριθμό ακαδημαϊκών διότι η σχέση «ένα προς πολλά» είναι τουλάχιστον ένα στην πλευρά του «πολλά» Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2012 Nicolas Tsapatsoulis Παραδείγματα Να υλοποιηθεί πλήρως η βάση για το ER διάγραμμα του σχήματος Να δημιουργηθούν οι πίνακες που αντιστοιχούν σε οντότητες Να δημιουργηθούν οι πίνακες που αντιστοιχούν σε σχέσεις πολλά προς πολλά Να οριστούν τα κατάλληλα πρωτεύοντα και ξένα κλειδιά (καθώς επίσης και οι περιορισμοί ακεραιότητας ξένου κλειδιού) Να οριστούν οι περιορισμοί πεδίου και τιμών NULL Εισαγωγή Μετασχηματισμός οντοτήτων Μετασχηματισμός συσχετίσεων Ακεραιότητα δεδομένων Παραδείγματα