Εργαστήριο Βάσεων Δεδομένων Άσκηση 2 Σκοπός της άσκησης είναι: 1. Με δεδομένο το σχεσιακό διάγραμμα, η υλοποίηση μιας βάσης σε MySQL. 2. Η εισαγωγή δεδομένων στη βάση. Για το κείμενο των προδιαγραφών της άσκησης 1, δίνονται το αντίστοιχο ER και σχεσιακό:
Βήμα 1: Υλοποίηση της βάσης Με δεδομένα το κείμενο προδιαγραφών, το ER και το σχεσιακό που δόθηκαν ως λύσεις στην προηγούμενη άσκηση (τις λύσεις που ανακοινώθηκαν και όχι την δική σας), υλοποιήστε ένα script σε MySQL το οποίο θα περιέχει: Την εντολή Create για τη βάση Τις εντολές Create για τους πίνακες της βάσης Το script θα πρέπει να τρέχει απευθείας και χωρίς λάθη σε MySQL. Θα το αποθηκεύσετε σε ένα αρχείο με όνομα create.txt, το οποίο αποτελεί το παραδοτέο του βήματος αυτού. Παράδειγμα ενός script για τη δημιουργία βάσης: CREATE DATABASE test; USE test; CREATE TABLE tbl1( col1 INT NOT NULL AUTO_INCREMENT, col2 VARCHAR(20), col3 INT, PRIMARY KEY (col1) )ENGINE=InnoDB DEFAULT CHARSET=greek;
CREATE TABLE tbl2( st1 INT NOT NULL AUTO_INCREMENT, st2 INT NOT NULL, PRIMARY KEY (st1), FOREIGN KEY (st2) REFERENCES tbl1(col1) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=InnoDB DEFAULT CHARSET=greek; Σημείωση: Για τις δηλώσεις ENGINE και DEFAULT CHARSET δείτε το Παράρτημα 3. Για τη χρήση scripts δείτε το Παράρτημα 2. Βήμα 2: Εισαγωγή στη βάση Για τη βάση που υλοποιήσατε στο προηγούμενο βήμα, υλοποιήστε ένα script σε MySQL το οποίο θα περιέχει τουλάχιστον 2 Insert εντολές για κάθε πίνακα της βάσης. Το παραδοτέο του βήματος 2 είναι το αντίστοιχο script, το οποίο θα το αποθηκεύσετε σε αρχείο insert.txt. Παράδειγμα ενός script για την εισαγωγή δεδομένων στην προηγούμενη βάση: INSERT INTO tbl1(col2,col3) VALUES ('test_col1_1', 10); INSERT INTO tbl1(col2,col3) VALUES ('test_col1_2', 20); INSERT INTO tbl2(st2) VALUES (1); INSERT INTO tbl2(st2) VALUES (2); Παραρτήματα Παράρτημα 1: Εγκατάσταση MySQL Windows: Μπορείτε να εγκαταστήσετε τη MySQL είτε μόνη της, είτε ως μέρος του πακέτου WampServer. Προτείνεται το δεύτερο, καθώς εγκαθιστά εργαλεία που μπορούν να σας βοηθήσουν. Linux:Συνήθως η MySQL είναι εγκατεστημένη με το λειτουργικό. Χρήσιμα Links: Downloads της Mysql: http://dev.mysql.com/downloads/ WampServer: http://www.wampserver.com/en/ Παράρτημα 2: Ζητήματα χρήσης scripts Ένα script της MySQL περιέχει εντολές sql. Το δημιουργείτε με έναν οποιονδήποτε editor txt αρχείων (notepad, textpad κλπ). Οι πιο απλοί τρόποι για να το τρέξετε είναι οι ακόλουθοι: 1. Copy & Paste : Κάνετε copy τα περιεχόμενα του script και μετά paste στην κονσόλα της MySQL. 2. Εντολή source: Η εντολή source παίρνει σαν όρισμα το path του αρχείου στο οποίο έχετε αποθηκεύσει το script και εκτελεί τις εντολές που περιέχονται μία προς μία. πχ. mysql> source C:\sql.txt
Προσοχή: το path δεν περικλείεται σε αυτάκια, οπότε αν έχετε κενό στο path του script μπορεί να δημιουργηθούν προβλήματα. Παράρτημα 3: ENGINE και DEFAULT CHARSET επιλογές δημιουργίας πίνακα Η MySQL περιλαμβάνει δύο storage engines. Την MyISAM που είναι και η default όταν το ENGINE δεν καθορίζεται στην create και την InnoDB. Η MyISAM δεν υποστηρίζει foreign keys. Αν στην create υπάρχει δήλωση foreign key, δεν παρουσιάζει λάθος, απλά το αγνοεί, με αποτέλεσμα οι περιορισμοί στις INSERT, UPDATE και DELETE να μην εφαρμόζονται. Για την άσκηση θα δηλώνετε ρητά το ENGINE InnoDB, το οποίο εφαρμόζει τους περιορισμούς ξένων κλειδιών. Το DEFAULT CHARSET ενός πίνακα πρέπει να το δηλώσετε greek αν θέλετε να αποθηκεύσετε δεδομένα με ελληνικούς χαρακτήρες και να υποστηρίζετε ταξινόμηση σε αυτά. Το greek charset υποστηρίζει τόσο ταξινόμηση λατινικών χαρακτήρων, όσο και ελληνικών. Για τους σκοπούς της άσκησης δεν κρίνεται απαραίτητο, αν θέλετε όμως μπορείτε να το συμπεριλάβετε. Παράρτημα 4: Κείμενο προδιαγραφών Το κείμενο προδιαγραφών είναι το ίδιο με το κείμενο στην εκφώνηση της πρώτης άσκησης: Η βάση δεδομένων που θα σχεδιαστεί περιέχει πληροφορίες για ένα σύστημα διαχείρισης εφημερίδων. Συγκεκριμένα, το σύστημα θα διαχειρίζεται τις ακόλουθες έννοιες: Εφημερίδα: Στο σύστημα θα αποθηκεύονται πληροφορίες για εφημερίδες, για κάθε μια από τις οποίες θα καταγράφεται το όνομά της το οποίο είναι μοναδικό, η επωνυμία του ιδιοκτήτη, μια περιγραφή της εφημερίδας, ο χαρακτηρισμός του είδους της εφημερίδας (πχ αθλητική, πολιτική, κοινωνική κλπ) και η συχνότητα έκδοσης (πχ ημερήσια, εβδομαδιαία, μηνιαία κλπ). Εργαζόμενος: Καταγράφονται επίσης τα στοιχεία των εργαζομένων στις εφημερίδες. Συγκεκριμένα καταγράφεται το email του κάθε εργαζόμενου, καθώς και το όνομα και το επώνυμό του. Δημοσιογράφος: Κάποιοι από τους εργαζόμενους στις εφημερίδες είναι δημοσιογράφοι. Γι αυτούς καταγράφεται επιπλέον των υπολοίπων στοιχείων και το βιογραφικό τους, καθώς και το έτος δραστηριοποίησης ως δημοσιογράφος. Διοικητικοί Υπάλληλοι: Κάποιοι από τους εργαζόμενους είναι διοικητικοί υπάλληλοι. Για κάθε διοικητικό υπάλληλο εκτός των άλλων στοιχείων καταγράφεται επιπλέον η διεύθυνση επικοινωνίας του (οδός, αριθμός και πόλη) και τα τηλέφωνα επικοινωνίας. Φύλλο: Κάθε εφημερίδα εκδίδει φύλλα. Κάθε φύλλο έχει τον αριθμό φύλλου, ο οποίος είναι αύξοντας αριθμός των φύλλων της εφημερίδας. Επίσης για κάθε φύλλο καταγράφονται η ημερομηνία κυκλοφορίας και ο τίτλος του πρωτοσέλιδου. Κατηγορία: Τα θέματα των εφημερίδων χωρίζονται σε κατηγορίες (πχ αθλητικά, πολιτικά, εσωτερικού κλπ). Για κάθε κατηγορία καταγράφεται ένας μοναδικός κωδικός, το όνομα της κατηγορίας και μια σύντομη περιγραφή. Άρθρο: Για τα άρθρα που περιέχονται σε εφημερίδες θα καταγράφεται αρχικά μια διαδρομή στο σκληρό δίσκο (path) στην οποία είναι αποθηκευμένο το κείμενο του
άρθρου (θεωρητικά το σύστημα θα διατηρεί αρχεία με άρθρα τα οποία θα διαχειρίζεται). Επίσης για κάθε άρθρο θα αποθηκεύεται ο τίτλος του και μια σύντομη περίληψη. Τέλος για κάθε άρθρο θα αποθηκεύονται προτεινόμενες λέξειςκλειδιά. Για τις σχέσεις μεταξύ των οντοτήτων ισχύουν οι εξής περιορισμοί: Κάθε δημοσιογράφος είναι εργαζόμενος. Κάθε διοικητικός υπάλληλος είναι εργαζόμενος. Κάθε εργαζόμενος πρέπει εργάζεται σε ακριβώς μια εφημερίδα. Μια εφημερίδα τη διευθύνει ένας εργαζόμενος. Κάθε φύλλο εκδόθηκε από μια εφημερίδα. Ο αριθμός φύλλου είναι μοναδικός για τη συγκεκριμένη εφημερίδα. Κάθε άρθρο πρέπει να έχει δημοσιευτεί σε ένα φύλλο. Μας ενδιαφέρει επίσης να καταγράψουμε και τον αριθμό της σελίδας του φύλλου στην οποία δημοσιεύθηκε. Κάθε άρθρο πρέπει να το υπογράφουν ένας ή περισσότεροι δημοσιογράφοι. Κάθε κατηγορία μπορεί να είναι γονική κατηγορία πολλών κατηγοριών. Κάθε κατηγορία μπορεί να έχει μόνο μία γονική κατηγορία. Κάθε άρθρο πρέπει να ανήκει σε μια ή περισσότερες κατηγορίες. Παράδοση: Η παράδοση της εργασίας θα γίνει ηλεκτρονικά μέσω της υπηρεσίας υποβολής εργασιών στην οποία έχετε πρόσβαση μέσω της διεύθυνσης http://dblab.ceid.upatras.gr (απαιτείται εγγραφή). Το παραδοτέο θα είναι ένα συμπιεσμένο αρχείο με όνομα dbxxxx2010.zip όπου xxxx o AM σας, το οποίο θα περιλαμβάνει: 1. Το script create.txt 2. Το script insert.txt 3. Ένα αρχείο readme.txt με το όνομα και το AM σας και, αν είναι απαραίτητο, οδηγίες και διευκρινίσεις για την υλοποίησή σας. Δεν επιτρέπεται να παραδώσετε generated από software scripts. Θα πρέπει να τα δουλέψετε και μόνοι σας σύμφωνα με αυτά που είπαμε στο εργαστήριο. Ως ημερομηνία παράδοσης της εργασίας ορίζεται η Τρίτη 7/12.