Βάσεις Δεδομένων Εργαστήριο 2 Διαφάνεια 1
Πώς να δημιουργήσω μια συσχέτιση ένα προς πολλά στην ACCESS; Η απάντηση στο παραπάνω θέμα, θα δοθεί μέσα από ένα παράδειγμα μιας μικρής βάσης δεδομένων. Το μοντέλο οντοτήτων συσχετίσεων δίνεται από το παρακάτω σχήμα: Αρ. Ταυτ. Τηλέφωνο Αρ. Παιδιού μητέρα 1 Ν γέννησε παιδί Διαφάνεια 2 Επώνυμο Όνομα Ημερ. Γέννησης
Η ιδιότητα Ημερ. Γέννησης της συσχέτισης, μπορεί να μεταφερθεί στην οντότητα παιδί: Αρ. Ταυτ. Τηλέφωνο μητέρα 1 Ν γέννησε Αρ. Παιδιού παιδί Επώνυμο Όνομα Ημερ. Γέννησης Διαφάνεια 3
Για την οντότητα μητέρα με όνομα "TBL_MOTHERS", έχουμε τα εξής: Ιδιότητα οντότητας Αρ. Ταυτ. Όνομα γνωρίσματος MID Περιγραφή Ο αριθμός ταυτότητας (πχ Χ99) Επώνυμο FNAME Το Επώνυμο (πχ Παπαδοπούλου) Όνομα ΝΑΜΕ Το όνομα (πχ Μαρία) Διαφάνεια 4 Τηλέφωνο PHONE Τηλέφωνο επικοινωνίας (πχ 0109999999)
Για την οντότητα παιδί με όνομα "TBL_CHILDREN", έχουμε τα εξής: Ιδιότητα οντότητας Αρ. Παιδιού Όνομα γνωρίσματος CID Περιγραφή Ένας αριθμός, ξεχωριστός για κάθε παιδί (πχ 1,2,3...) Ημερομηνία γέννησης BDATE Η ημερομηνία γέννησης (πχ 14/6/94) Διαφάνεια 5
Ηδιαδικασίαέχειωςεξής: κατασκευάζουμε τους δύο πίνακες και δημιουργούμε τη συσχέτιση. Αυτό είναι όλο! Ας δούμε πρώτα πως δημιουργείται ο πίνακας TBL_MOTHERS Διαφάνεια 6
Ακολουθούμε τα παρακάτω βήματα Ανοίγουμε την ACCESS και δημιουργούμε μια κενή βάση δεδομένων. Μετακινούμαστε στα αντικείμενα Πίνακες και κάνουμε κλικ στη σχεδίαση (ΔιπλόκλικστηνΔημιουργία Πίνακα σε Προβολή Σχεδίασης). Δημιουργούμε το πεδίο MID και το ορίζουμε ως πρωτεύον κλειδί. Αφήνουμε τον τύπο δεδομένων ως κείμενο. Αποθηκεύουμε τον πίνακα με όνομα TBL_MOTHERS Διαφάνεια 7
Ακολουθούμε τα παρακάτω βήματα Στις ιδιότητες του πεδίου MID θέτουμε την τιμή μέγεθος πεδίου στο 3. Αυτό σημαίνει ότι οι τιμές του πεδίου μπορούν να έχουν το πολύ 3 χαρακτήρες. Σε ένα πραγματικό πρόβλημα, η τιμή μπορεί να είναι διαφορετική, πχ 7 ή περισσότεροι χαρακτήρες Διαφάνεια 8
Ακολουθούμε τα παρακάτω βήματα Θέτουμετητιμήτης ιδιότητας λεζάντα σε Αρ. Ταυτ. Εισάγουμε το δεύτερο πεδίο FNAME τύπο δεδομένων κείμενο Διαφάνεια 9
Ακολουθούμε τα παρακάτω βήματα Θέτουμε το μέγεθος πεδίου σε 25 (το πολύ 25 χαρακτήρες). Εισάγουμε στη μάσκα εισαγωγής το >L???????????????????????? (24?). Αυτό σημαίνει ότι το πεδίο παίρνει τιμές που ξεκινούν από ένα γράμμα της αλφαβήτου (υποχρεωτικά πρέπει να εισαχθεί τουλάχιστον ένα) και μπορούν να περιέχουν (προαιρετικά) άλλα 24 γράμματα του αλφάβητου. Το > στην αρχή δηλώνει ότι ο πρώτος χαρακτήρας είναι πάντα κεφαλαίο γράμμα. Η διαφοράτουl με το? είναι ότι πρώτο δηλώνει υποχρεωτική εισαγωγή χαρακτήρα (οπωσδήποτε γράμμα του αλφάβητου) και το δεύτερο δηλώνει προαιρετική εισαγωγή χαρακτήρα (γράμμα του αλφάβητου ή τίποτα) Διαφάνεια 10
Ακολουθούμε τα παρακάτω βήματα Θέτουμετητιμήτης ιδιότητας λεζάντα σε ΕΠΩΝΥΜΟ Διαφάνεια 11
Ακολουθούμε τα παρακάτω βήματα Από την αναδιπλούμενη λίστα της ιδιότητας Απαιτείται επιλέγουμε την τιμή Ναι. Αυτό σημαίνει ότι η εισαγωγή του πεδίου FNAME είναι υποχρεωτική. Δεν μπορούμε να "φύγουμε" από μια νέα καταχώριση αν δεν εισαχθεί το επώνυμο. Θυμόμαστε επίσης ότι υποχρεωτική πάντα είναι η εισαγωγή του πρωτεύοντος κλειδιού. Εδώ ορίζουμε ένα ακόμα πεδίο με υποχρεωτική εισαγωγή τιμών Διαφάνεια 12
Ακολουθούμε τα παρακάτω βήματα Εισάγουμε το πεδίο NAME με τύπο δεδομένων κείμενο Στις ιδιότητες, θέτουμε τις ίδιες τιμές όπως και στο FNAME. Μπορούμε επίσης να αντιγράψουμε το FNAME σε ΝΑΜΕ και να αλλάξουμε το όνομα και τη λεζάντα. Επίσης μπορούμε να επιτρέψουμε NULLs στο πεδίο όνομα Εισάγουμε το πεδίο PHONE και θέτουμε τον τύπο δεδομένων σε κείμενο Διαφάνεια 13
Ακολουθούμε τα παρακάτω βήματα Στις ιδιότητες του πεδίου θέτουμε τις παρακάτω τιμές: μέγεθος 10 (τα τηλέφωνα αποτελούνται από 10 ψηφία), λεζάντα ΤΗΛΕΦΩΝΟ και τέλος μάσκα "0"000000000;"0";"-". Η τιμήτηςμάσκας αναλύεται ως εξής: το πρώτο μηδέν μέσα σε διπλά εισαγωγικά σημαίνει ότι θα εισαχθεί χωρίς πληκτρολόγηση (όλα τα τηλέφωνα αρχίζουν από 0). Τα επόμενα 9 μηδενικά σημαίνουν ότι απαιτείται η εισαγωγή 9 αριθμητικών ψηφίων, χαρακτήρες 0-9. Η δήλωση της μάσκας τελειώνει με το ;. Το επόμενο 0 μέσα σε διπλά εισαγωγικά σημαίνει ότι οι χαρακτήρες που έχουν εισαχθεί χωρίς πληκτρολόγηση θα αποθηκευτούν (δεν θα αποθηκευτούν αν αντί για 0 υπάρχει 1). Τέλος η παύλα μέσα σε διπλά εισαγωγικά σημαίνει ότι για κάθε χαρακτήρα που αναμένεται να εισαχθεί (από τους 9 σε αυτό το παράδειγμα) η ACCESS προτρέπει με μία παύλα Διαφάνεια 14
Τέλος η σχεδίαση του TBL_MOTHERS ΑςδούμετώρατιγίνεταιμετονTBL_CHILDREN (Να θυμάστε ότι αυτός ο πίνακας χρειάζεται ξένο κλειδί, το πρωτεύον κλειδί του πίνακα TBL_MOTHERS) Διαφάνεια 15
Ακολουθούμε τα παρακάτω βήματα Δημιουργούμε ένα νέο πίνακα σε προβολή σχεδίασης με όνομα TBL_CHILDS. Εισάγουμε το πεδίο CID με τύπο δεδομένων αυτόματη αρίθμηση. Το ορίζουμε ως πρωτεύον κλειδί Η αυτόματη αρίθμηση είναι ένας ακέραιος μεγάλου μήκους, ητιμήτουαυξάνεταικατάμία μονάδα αυτόματα με κάθε νέα καταχώριση Στις ιδιότητες του πεδίου, θέτουμε τη λεζάντα σε Αρ. Παιδιού Διαφάνεια 16
Ακολουθούμε τα παρακάτω βήματα Εισάγουμε το επόμενο πεδίο με όνομα BDATE (ημερομηνία γέννησης). Στο τύπο δεδομένων, από την αναπτυσσόμενη λίστα, Ημερομηνία/Ώρα Στις ιδιότητες του πεδίου, από την αναδιπλούμενη λίστα της μορφής, επιλέγουμε την Πλήρη Ημερομηνία. Αυτό μας επιτρέπει να εισάγουμε μια ημερομηνία ως 19/6/94 και να εμφανίζεται ως Κυριακή, 19 Ιουνίου 1994. Λιγότερη πληκτρολόγηση και μεγαλύτερη σαφήνεια στη παρουσίαση δεδομένων Διαφάνεια 17
Ακολουθούμε τα παρακάτω βήματα Στη λεζάντα δίνουμε την τιμή Ημερ. Γεν. και στην προεπιλεγμένη τιμή το Date(). Η προεπιλεγμένη τιμή είναι μια τιμή η οποία μπορεί να τροποποιηθεί από το χρήστη, αν είναι απαραίτητο. Εμφανίζεται ωστόσο χωρίς πληκτρολόγηση και αποθηκεύεται ως έχει αν δεν τροποποιηθεί. Στο παράδειγμα, καλείται η συνάρτηση date(), που (όπως στο Excel) επιστρέφει την τρέχουσα ημερομηνία Στην ιδιότητα Απαιτείται, από την αναδιπλούμενη λίστα, επιλέγουμε την τιμή Ναι (NOT NULL) Διαφάνεια 18
Ακολουθούμε τα παρακάτω βήματα Εισάγουμε το πεδίο FK_MID, το οποίο δεν είναι τίποτα άλλο από τον αριθμό ταυτότητας της μητέρας. Το πεδίοαυτόείναιτοξένοκλειδί (Foreign Key) με το οποίο μπορούμε να συσχετίσουμε τους δύο πίνακες Το πεδίο FK_MID ως ξένο κλειδί, οφείλειναέχειτονίδιοτύπο δεδομένων με το MID του πίνακα TBL_MOTHERS. Το να αφήσουμε τιςπροεπιλεγμένεςτιμέςτου κειμένου, είναι αρκετό, ωστόσο αν έχουν μπει (όπως συμβαίνει) περιορισμοί (constraints) καλό είναι να επαναληφθούν για εξασφαλιστεί η ακεραιότητα αναφορών Διαφάνεια 19
Ακολουθούμε τα παρακάτω βήματα Θέτουμε την τιμή της ιδιότητας Απαιτείται σε Ναι (NOT NULL). Όταν ξένο κλειδί μιας σχέσης έχει τεθεί σε NOT NULL, τότε η συμμετοχή της αντίστοιχης οντότητας στη συσχέτιση είναι ολική (Δεν υπάρχει παιδί στη βάση που να μην έχει μητέρα) Αν κλείσουμε τη σχεδίαση του πίνακα TBL_CHILDS (μην ξεχάσουμε την αποθήκευση) θα επιστρέψουμε στο παράθυρο της βάσης δεδομένων και θα έχουμε την διπλανή εικόνα Διαφάνεια 20
Ακολουθούμε τα παρακάτω βήματα Μετά τη σχεδίαση των πινάκων μπορούμε να προχωρήσουμε στον ορισμό της συσχέτισης ένα προς πολλά. Μετακινούμε το δείκτη του ποντικιού στο κουμπί Σχέσεις (ο όρος της ACCESS δεν είναι σωστός από την άποψη της σχεσιακής άλγεβρας) και πιέζουμε το αριστερό πλήκτρο Η ACCESS θα σας ρωτήσει ποιους πίνακες θέλουμε να συσχετίσουμε. Επιλέγουμε τον πρώτο (TBL_CHILDS) και κάνουμε κλικ στη Προσθήκη Διαφάνεια 21
Ακολουθούμε τα παρακάτω βήματα Επιλέγουμε το δεύτερο (TBL_MOTHERS) και κάνουμε κλικ στη Προσθήκη. Προφανώς η σειρά, δεν έχει σημασία Θα πρέπει να έχουμε μια παρόμοια εικόνα Διαφάνεια 22
Ακολουθούμε τα παρακάτω βήματα Μπορούμε να αλλάξουμε το μέγεθος εμφάνισης των πινάκων ή τη θέση που αυτοί εμφανίζονται Γιαναξεκινήσουμετη δημιουργία της συσχέτισης, κρατούμε πατημένο το αριστερό πλήκτρο του ποντικιού πάνω στο πεδίο MID του πίνακα TBL_MOTHERS και... Διαφάνεια 23
Ακολουθούμε τα παρακάτω βήματα... σύρουμε το δείκτη του ποντικιού (προσέχουμε την αλλαγή) σχήματος πάνω στο πεδίο CID του πίνακα TBL_CHILDS Θα εμφανιστεί το πλαίσιο διαλόγου Ιδιότητες. Εδώ ορίζεται η συσχέτιση. Κάνουμε κλικ στο τύπο Συνδέσμου Διαφάνεια 24
Ακολουθούμε τα παρακάτω βήματα Το πλαίσιο διαλόγου ιδιότητες συνδέσμου (JOIN properties). Γενικάεπιλέγουμετο1 (INNER JOIN). Αν χρειαστεί να αλλάξει, να ξέρουμε ότι γίνεται από εδώ. Κάνουμε κλικ στο ΟΚ Κάνουμε κλικ και ενεργοποιούμε την ακεραιότητα αναφορών. Αυτό σημαίνει ότι θα γίνεται έλεγχος στα ξένα κλειδιά, ώστε να μην εισάγονται τιμές που δεν έχουν αντιστοίχιση. Πάντα να επιλέγουμε την ακεραιότητα αναφορών, ανεξάρτητα από τις άλλες δύο επιλογές για τη διαδοχική ενημέρωση εγγραφών, ή διαγραφή εγγραφών Διαφάνεια 25
Ακολουθούμε τα παρακάτω βήματα Μπορούμε (σε αυτό το παράδειγμα) να ενεργοποιήσουμε τη διαδοχική ενημέρωση εγγραφών (αν αλλάξει το πρωτεύον κλειδί του πίνακα TBL_MOTHERS, αλλάζει αυτόματα και το ξένο κλειδί του πίνακα TBL_CHILDS). Επίσης τη διαδοχική διαγραφή (αν διαγραφεί μια μητέρα απότηβάση, θα διαγραφούν επίσης καιταπαιδιάτηςαπότηβάση). Κάνουμε κλικ στο OK για να δημιουργήσουμε τη συσχέτιση Μετά από όλα αυτά πρέπει να έχουμε τη διπλανή εικόνα Διαφάνεια 26
Αυτή είναι η διαδικασία για να δημιουργήσουμε μια συσχέτιση ένα προς πολλά (one-to-many relationship) στην ACCESS Προσπαθήστε να κάνετε περισσότερα παραδείγματα, μέχρι να μπορείτε να επαναλάβετε τη διαδικασία με "κλειστά μάτια" Καλή Επιτυχία! Διαφάνεια 27