Υποθετικό Σενάριο Ο νομάρχης Αττικής σε έχει καταστήσει υπεύθυνο διαχείρισης των εμβολιασμών στον νομό Αττικής. Υποθέσουμε ότι ο νομός Αττικής έχει μόνο τους επόμενους Δήμους: Αθηνών, Περιστερίου, Πειραιά, Ζωγράφου και Κηφισιάς. Στους νομούς αυτούς υπάρχουν 4 νοσοκομεία, 2 στον δήμο Αθηναίων και από 1 νοσοκομείο στους δήμους Πειραιά και Περιστερίου. Στα νοσοκομεία εκτός των άλλων πραγματοποιούνται και εμβολιασμοί των κατοίκων των περιοχών. Έχουν οριστεί 10 συνολικά νοσηλευτές σε όλα τα νοσοκομεία για να κάνουν τους εμβολιασμούς. Οι 5 νοσηλευτές βρίσκονται στα 2 νοσοκομεία της Αθήνας και οι άλλοι 5 στα υπόλοιπα 2 (Πειραιά και Περιστερίου). Τα εμβόλια που παρέχονται είναι συγκεκριμένα: Διευθερίτιδας, Κοκίτης, Πολιομυελίτιδας, Ιλαράς, Ερυθράς, Παρωτίτιδας, Τέτανος. Οι πολίτες των δήμων προσέρχονται για εμβολιασμούς στα νοσοκομεία. Ένας πολίτης μπορεί να πάει σε όποιο νοσοκομείο θέλει ανεξάρτητα του που διαμένει. Φτιάξε μία ηλεκτρονική βάση δεδομένων όπου θα καταχωρούνται όλα τα δεδομένα που έχουν σχέση με την διαδικασία εμβολιασμού (στοιχεία πολιτών, νοσηλευτών, εμβολίων κ.τ.λ., η ημερομηνία που έγινε κάποιος εμβολιασμός, σε ποιο νοσοκομείο έγινε, ποιος νοσηλευτής τον έκανε, σχόλια εμβολιασμού, κ.α.). Δώσε στην βάση ως όνομα το vaccinations. Πρόσθεσε στην βάση ως δεδομένα, τους δήμους, τα εμβόλια, 4 νοσοκομεία, 10 νοσηλευτές, όσους πολίτες θέλετε (πάνω από 10) και 20 τουλάχιστον περιπτώσεις εμβολιασμών. Λύση Στην άσκηση έχουμε τις εξής οντότητες: Πολίτες, Νοσηλευτές, Νοσοκομεία, Δήμοι, Εμβόλια. A. Κατασκευάζουμε λοιπόν 5 πίνακες έναν για κάθε οντότητα. 1. Οντότητα Πολίτες. Πίνακας Citizen. Θα κατασκευάσουμε για αυτόν τον πίνακα τα εξής πεδία: o Citizen_ID (Κωδικός Πολίτη) o Citizen_Name (Όνομα πολίτη) o Citizen_Surname (Επώνυμο, πολίτη) o Citizen_Tele [Τηλέφωνο (μορφής 210-000-0000)] o Citizen_Sex (Φύλο) o Citizen_AFM (ΑΦΜ) o Citizen_Address [Διεύθυνση (οδός, Αριθμός)] o Citizen_TK (Ταχυδρομικός κώδικας ΤΚ) o Citizen_Date (Ημερομηνία γέννησης) o Citizen_Photo (Φωτογραφία) 2. Οντότητα Νοσηλευτές. Πίνακας Nurse. Κατασκευάζουμε τα εξής πεδία: o Nurse_ID (Κωδικός Νοσηλευτή o Nurse_Name (Όνομα Νοσηλευτή) o Nurse_Surname (Επώνυμο Νοσηλευτή) o Nurse_Tele [Τηλέφωνο (μορφής 210-0000000)] o Nurse_Address [Διεύθυνση (οδός, Αριθμός)] 1
o Nurse_TK (Ταχυδρομικός κώδικας ΤΚ) o Nurse_Studies [Κατηγορία εκπαίδευσης(δε, ΤΕ, ΠΕ)] o Nurse_Photo (Φωτογραφία) o Nurse_CV [Βιογραφικό (σε PDF)] o Nurse_Family [Οικογενειακή κατάσταση (έγγαμος ναι ή όχι)] 3. Οντότητα Νοσοκομείο. Πίνακας Hospital. Κατασκευάζουμε τα εξής πεδία: o Hosp_ID (Κωδικός Νοσοκομείου) o Hosp_Name [Όνομα νοσοκομείου (μορφής 210-000-0000)] o Hosp_Address [Διεύθυνση (οδός, Αριθμός)] o Hosp_TK (Ταχυδρομικός κώδικας ΤΚ) o Hosp_Tele (Τηλέφωνο νοσοκομείου) o Hosp_Mail (E-mail νοσοκομείου) 4. Οντότητα Δήμος. Πίνακας Country. Κατασκευάζουμε τα εξής πεδία: o Country_Name (Όνομα δήμου) Θα χρησιμοποιήσουμε αυτό ως πρωτεύον κλειδί. o Country_Tele (Τηλέφωνο δήμου) o Country_ Ar_Dimoton (Συνολικός αριθμός δημοτών) o Country_Web (Website του δήμου) o Country_Mail (E-mail του δήμου) 5. Οντότητα εμβόλια. Πίνακας Vaccine. Κατασκευάζουμε τα εξής πεδία: o Vac_ID (Κωδικός εμβολίου) o Vac_Name (Το όνομα του εμβολίου) o Vac_Notes [Πληροφορίες για το συγκεκριμένο εμβόλιο (σχόλια)] o Vac_Price (Κόστος εμβολίου) B. Σε κάθε πίνακα βάζουμε πεδία μόνο σχετικά με την οντότητα την οποία περιγράφει ο πίνακας δεν εισάγουμε πεδία που έχουν σχέση με άλλες οντότητες. C. Εξετάζουμε τα είδη των σχέσεων των μεταξύ πινάκων ανά δύο. 1. Citizen, Nurse (Δεν μπορούμε να σκεπτούμε κάποια απευθείας σχέση μεταξύ των δύο αυτών πινάκων. Το γεγονός ότι αν ένας πολίτης κάνει ένα εμβόλιο θα του το κάνει κάποιος νοσηλευτής δεν αποτελεί απευθείας σχέση γιατί παρεμβάλετε η οντότητα εμβόλιο.). 2. Citizen, Hospital (Ούτε εδώ μπορούμε να σκεπτούμε κάποια απευθείας σχέση). 3. Citizen, Country (1 πολίτης είναι δημότης 1 δήμου, 1 δήμος έχει πολλούς πολίτες. Η σχέση είναι 1 προς πολλά. Πρέπει στον πίνακα πολίτες να φτιάξω ένα καινούριο πεδίο το οποίο θα είναι ξένο κλειδί και θα ταυτίζετε ως προς τον τύπο και τις ιδιότητες με το πρωτεύων κλειδί του πίνακα των δήμων. Για διευκόλυνση ως τύπο του ξένου κλειδιού μπορώ να επιλέξω οδηγό αναζήτησης ο οποίος θα δείχνει το πρωτεύων κλειδί με το οποίο θα συνδεθεί. Προσθέτω λοιπόν στον πίνακα citizen το πεδίο Citizen _Country (Δήμος διαμονής)) 4. Citizen, Vaccine ( 1 πολίτης μπορεί να κάνει πολλά εμβόλια, 1 είδος εμβολίου μπορούν να το κάνουν πολλοί ασθενείς. Η σχέση εδώ είναι πολλά προς πολλά. Απαιτείτε λοιπόν ενδιάμεσος πίνακας ο οποίος θα έχει συν τοις άλλοις και 2 ξένα κλειδιά, το ξένο κλειδί των πολιτών και το ξένο κλειδί των εμβολίων. Τον ενδιάμεσο πίνακα θα τον ονομάσουμε εμβολιασμοί Emboliasmoi. Το πρώτο ξένο κλειδί θα το ονομάσουμε Emb_Citizen και το δεύτερο Emb_Vaccine. Τα πεδία θα είναι του ιδίου τύπου με τα αντίστοιχα πρωτεύοντα ή μπορούμε να φτιάξουμε και οδηγούς αναζήτησης. Ο ενδιάμεσος αυτός πίνακας θα έχει και ένα πρωτεύων κλειδί το Emb_ID (Κωδικός Εμβολιασμού) 5. Nurse, Hospital (1 νοσηλευτής ανήκει σε 1 νοσοκομείο, 1 νοσοκομείο έχει πολλούς νοσηλευτές. Η σχέση είναι 1 προς πολλά. Το πολλά είναι στην μεριά του πίνακα νοσηλευτές. 2
Άρα στον πίνακα των νοσηλευτών θα βάλουμε ένα καινούριο πεδίο ως ξένο κλειδί του πίνακα νοσοκομείου. Θα το ονομάσουμε Nurse_Hospital και θα είναι ίδιου τύπου με το Hosp_ID. Μπορούμε αν θέλουμε να φτιάξουμε και οδηγό αναζήτησης. 6. Nurse, Country (1 νοσηλευτής διαμένει σε έναν δήμο, σε 1 δήμος μπορεί να διαμένουν πολλοί νοσηλευτές. Σχέση 1 προς πολλά. Το ξένο κλειδί nurse_country στον πίνακα των νοσηλευτών. 7. Nurse, Vaccine (1 νοσηλευτής μπορεί να κάνει πολλά εμβόλια, 1 είδος εμβολίου μπορούν να το κάνουν πολλοί νοσηλευτές. Η σχέση είναι πολλά προς πολλά. Θέλουμε λοιπόν ενδιάμεσο πίνακα στον οποίο θα βάλουμε δύο ξένα. Θα χρησιμοποιήσουμε τον ίδιο ενδιάμεσο τον οποίο περιγράψαμε προηγουμένως (εμβολιασμοί Emboliasmoi) θα προσθέσουμε το ξένο κλειδί Emb_Nurse το άλλο ξένο Emb_Vaccine υπάρχει ήδη από την προηγούμενη πολλά προς πολλά σχέση. 8. Hospital, Country (1 νοσοκομείο βρίσκετε σε έναν δήμο, 1 δήμος μπορεί να έχει πολλά νοσοκομεία. Σχέση 1 προς πολλά. Ξένο κλειδί στον πίνακα νοσοκομεία με όνομα Hosp_Country. 9. Hospital, Vaccine (Σε ένα νοσοκομείο μπορούν να γίνουν πολλά εμβόλια, 1 είδος εμβολίου μπορεί να γίνει σε πολλά νοσοκομεία. Σχέση πολλά προς πολλά. Θα χρησιμοποιήσουμε τον ίδιο ενδιάμεσο πίνακα (εμβολιασμοί Emboliasmoi). Θα προσθέσουμε το ξένο κλειδί Emb_Hosp, το άλλο ξένο Emb_Vaccine υπάρχει ήδη. 10. Country, Vaccine (και εδώ η σχέση είναι πολλά προς πολλά, γιατί σε 1 δήμο μπορούν να γίνουν πολλά εμβόλια και 1 είδος εμβολίου μπορεί να γίνει σε πολλούς δήμους. Όμως αυτή η πληροφορία δεν μας ενδιαφέρει να την καταγράψουμε οπότε δεν προχωράμε στην δημιουργία ξένου κλειδιού στον ενδιάμεσο. 11. Στον ενδιάμεσο πίνακα που προέκυψε έχουμε τα εξής πεδία: Emb_ID, Emb _Citizen, Emb_Vaccine, Emb_Nurse, Emb_Hosp. Εκτός του Emb_ID όλα τα άλλα είναι ξένα κλειδιά. Μπορούμε σε αυτόν τον πίνακα να βάλουμε και κάποια άλλα πεδία τα οποία νομίζουμε ότι μας χρειάζονται. Θα θέλαμε την ημερομηνία που έγινε ο εμβολιασμός και κάποια πιθανά σχόλια για κάποιον συγκεκριμένο εμβολιασμό. Προσθέτουμε λοιπόν και τα πεδία Emb_Date και Emb_Notes. 3
D. Φτιάχνουμε τον ενδιάμεσο πίνακα Emboliasmoi με τα πεδία του. a. Emb_ID b. Emb_Citizen c. Emb_Vaccine d. Emb_Nurse e. Emb_Hospital f. Emb_Date g. Emb_Notes E. και προσθέτουμε στους ήδη υπάρχοντες πίνακες τα ξένα κλειδιά που προέκυψαν. a. Citizen_Country (δήμος διαμονή) b. Nurse_Country (Δήμος διαμονής) c. Nurse_Hospital (Νοσοκομείο που ανήκει ο Νοσηλευτής) d. Hosp_Country (Δήμος που ανήκει το νοσοκομείο) F. Οι πίνακες και τα πεδία διαμορφώνονται πλέον ως εξής: 4
G. Τέλος φτιάχνουμε τις σχέσεις μεταξύ των πινάκων ενώνοντας ξένα με πρωτεύοντα κλειδιά. Τσεκάρουμε την ενεργοποίηση ακεραιότητας αναφορών και την διαδοχική ενημέρωση των σχετικών εγγραφών. 5
Αφού τελειώσουμε με την σχεδίαση της βάσης ανοίγουμε τους πίνακες σε προβολή δεδομένων και προσθέτουμε δεδομένα σε αυτούς. Πρώτα γράφουμε τα δεδομένα που δεν αλλάζουν συχνά. Τους δήμους, τα νοσοκομεία, μετά τους νοσηλευτές, και τα είδη των εμβολίων, και τέλος τους πολίτες. Ο ενδιάμεσος πίνακας (εμβολιασμοί) συμπληρώνετε κατά την χρήση της βάσης. Κάθε φορά που έρχεται ένας πολίτης για εμβολιασμό καταχωρείτε μία εγγραφή σε αυτόν τον πίνακα. Ένας αριθμός πρωτοκόλλου (μοναδικός κωδικός πίνακα), την τρέχουσα ημερομηνία, τον κωδικό του πολίτη στον οποίο θα γίνει το εμβόλιο, τον κωδικό του νοσηλευτή που θα το κάνει το νοσοκομείο στο οποίο γίνεται και τέλος κάποια πιθανά σχόλια. 6