Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Σχετικά έγγραφα
Τμήμα Διοίκησης Επιχειρήσεων

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

Ηλεκτρονικοί Υπολογιστές II

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:


Σχεδίαση και Χρήση Βάσεων Δεδομένων. Χρήση του DBDesigner. Γιώργος Πυρουνάκης - forky@di.uoa.gr

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Ηλεκτρονικοί Υπολογιστές ΙI. Βάσεις Δεδομένων. Ακαδημαϊκό Έτος Εργαστήριο 2. Διαφάνεια 1. Κάπαρης Αναστάσιος

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

Μετατροπή Σχήματος Ο/Σ σεσχεσιακό

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Εισαγωγήστην SQL. Εργαστήριο Βάσεων εδοµένων

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 4ο Μάθημα: SQL - Παράδειγμα. Δρ. Κωνσταντίνος Χ.



Σχεδίαση Βάσεων Δεδομένων

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό Σχήμα. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό Σχήμα. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό Σχήμα. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μετατροπή Σχήματος Ο/Σ σεσχεσιακό

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης


Παράδειγμα Εμφιαλωτήριο. Διάγραμμα Οντοτήτων - Συσχετίσεων

Σχεσιακό Μοντέλο Περιορισμοί Μετατροπή ER σε Σχεσιακό Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Relational Model

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

Τεχνολογία Πολιτισμικού Λογισμικού

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Το σχεσιακό μοντέλο βάσεων δεδομένων

Μετατροπή Σχήµατος Ο/Σ σε Σχεσιακό

Διαχείριση Πολιτισμικών Δεδομένων

SQL: Συναρτήσεις Συνάθροισης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Σχεδίαση Βάσεων Δεδομένων

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Σχεδιασμός Βάσεων Δεδομένων

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό Σχήμα. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

Τμήμα Πληροφορικής ΑΠΘ

DELETE, UPDATE, INSERT.

Μετατροπή Σχήµατος Ο/Σ σε Σχεσιακό

DELETE, UPDATE, INSERT

Ηλεκτρονικοί Υπολογιστές II

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Το Σχεσιακό μοντέλο και η γλώσσα SQL

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

Βάσεις δεδομένων. (2 ο μάθημα) Ηρακλής Βαρλάμης

Εργαστήριο Βάσεων Δεδομένων


Φυσική Σχεδίαση Υλοποίηση βάσης

Τεχνολογία Πολιτισμικού Λογισμικού

Σχεδίαση Βάσεων Δεδομένων

Τμήμα Πληροφορικής ΑΠΘ

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2013

Μετατροπή Σχήµατος Ο/Σ σε Σχεσιακό

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

Ηλεκτρονικοί Υπολογιστές II

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

Εργαστήριο Βάσεων Δεδομένων. Relational Model Σχεσιακό Μοντέλο

Σχεδιασµός µιας Β. Εισαγωγή. Μετατροπή σε σχεσιακό -> είσοδο σε ένα Σ Β. Εισαγωγή. Ιδέες Ο/Σ Σχέσεις Σχεσιακό Σ Β

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

Βάσεις δεδομένων. (3 ο μάθημα) Ηρακλής Βαρλάμης

Βάσεις Δεδομένων Ι Εξεταστική Περίοδος Φεβρουαρίου 2006

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Βάσεις Δεδομένων (Databases)

Ερωτήματα επιλογής με σύζευξη πινάκων

Από το Μοντέλο Οντοτήτων Συσχετίσεων στο Σχεσιακό Μοντέλο

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Certified Data Base Designer (CDBD)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

Τ.Ε.Ι ΘΕΣΣΑΛΟΝΙΚΗΣ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΔΒΔ (ΕΡΓΑΣΤΗΡΙΟ 4) Τελευταία ενημέρωση: 11/2011. Μετασχηματισμός διαγράμματος ER σε σχεσιακό σχήμα ΒΔ

Αρχεία και Βάσεις Δεδομένων

Ηλεκτρονικοί Υπολογιστές II

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μοντέλο Οντοτήτων-Συσχετίσεων

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Εργαστήριο Βάσεων Δεδομένων

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - SQL

1 / 97

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

Transcript:

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Περιεχόμενα 1 Γενική περιγραφή του προβλήματος 2 Μοντελοποίηση Ο/Σ 3 Σχεσιακό μοντέλο, SQL 4 Ερωτήματα SQL 5 Γεννήσεις διδύμων 2 / 84

Γενικές απαιτήσεις καταγραφής δεδομένων Θεωρείστε την ύπαρξη ενός μαιευτηρίου, εκεί όπου έγκυες γυναίκες φέρνουν στον κόσμο παιδιά. Αυτό που ενδιαφέρει εδώ είναι η απλή καταγραφή του γεγονότος της γέννησης, πέρα από κάθε κοινωνική, οικογενειακή επέκταση. Μητέρα 1 Αριθμός ταυτότητας. 2 Ονομα και επώνυμο. 3 Ημερομηνία γέννησης. 4 Τηλέφωνο επικοινωνίας. Παιδί 1 Ημερομηνία γέννησης. 2 Βάρος. 3 Φύλλο (αγόρι ή κορίτσι). 4 Ενα αναγνωριστικό ώστε κάθε παιδί να έχει αντιστοίχιση με μία συγκεκριμένη μητέρα. 3 / 84

Τι πληροφορίες θέλουμε 4 / 84

Τι πληροφορίες θέλουμε Λεπτομέρειες για τον καθένα 1 Δεδομένα που αφορούν μόνο τη μητέρα, πχ Ονομα, ΑΜΚΑ, τηλέφωνο, κα. 2 Δεδομένα που αφορούν μόνο το παιδί, πχ βάρος, φύλλο, κα. 5 / 84

Τι πληροφορίες θέλουμε Λεπτομέρειες για τον καθένα 1 Δεδομένα που αφορούν μόνο τη μητέρα, πχ Ονομα, ΑΜΚΑ, τηλέφωνο, κα. 2 Δεδομένα που αφορούν μόνο το παιδί, πχ βάρος, φύλλο, κα. Λεπτομέρειες συσχέτισης 1 Η Μαρία Κ. γέννησε στις 19/4/2000 αγόρι. 2 Η Στέλλα Μ. γέννησε στις 25/8/2001 αγόρι. 3 Η Στέλλα Μ. γέννησε στις 9/1/2006 κορίτσι. 4 Η Αντωνία Β. γέννησε στις 12/9/2002 αγόρι. 5 Η Αντωνία Β. γέννησε στις 7/11/2004 κορίτσι. 6 / 84

Τι θέλουμε να αποφύγουμε Μήνυση σε μαιευτήριο για ανατροφή λάθος παιδιού http://bit.ly/1ld7rgh 7 / 84

Περιεχόμενα 1 Γενική περιγραφή του προβλήματος 2 Μοντελοποίηση Ο/Σ 3 Σχεσιακό μοντέλο, SQL 4 Ερωτήματα SQL 5 Γεννήσεις διδύμων 8 / 84

Προτεινόμενο διάγραμμα Ο/Σ amka birthdate gender mother has child phone fname weight birthdate 9 / 84

Γιατί όχι έτσι; amka birthdate mother child phone fname 10 / 84

Αποφυγή λάθους σχεδίασης amka birthdate gender mother child phone fname birthdate 11 / 84

Αντικειμενοστραφή μοντέλα δεδομένων Το σχεσιακό μοντέλο δεδομένων δεν είναι η «τελευταία λέξη της τεχνολογίας». Νεώτερα μοντέλα δεδομένων μπορούν να καλύψουν διάφορες ατέλειες ή ελλείψεις. Άλλο μοντέλο δεδομένων σημαίνει άλλος τρόπος σκέψης. Αντικειμενοστραφές, το πιο διαδεδομένο μοντέλο δεδομένων από τα μέσα της δεκαετίας του 80. 12 / 84

Ημερομηνία γέννησης amka birthdate gender child-birthdate mother has child phone fname weight 13 / 84

Σχετικά με την πληθικότητα M H C m 1 m 2 m 3 m 4 h 1 h 2 h 3 h 4 h 5 c 1 c 2 c 3 c 4 c 5 min card(m, H) = 0 max card(m, H) = N min card(c, H) = 1 max card(c, H) = 1 h 6 c 6 14 / 84

Μερικές λεπτομέρειες ακόμα 15 / 84

Μερικές λεπτομέρειες ακόμα 1 Το όνομα της μητέρας είναι σύνθετη ιδιότητα. 16 / 84

Μερικές λεπτομέρειες ακόμα 1 Το όνομα της μητέρας είναι σύνθετη ιδιότητα. 2 Το σύνολο οντοτήτων παιδί πρέπει να έχει πρωτεύον κλειδί. 17 / 84

Μερικές λεπτομέρειες ακόμα 1 Το όνομα της μητέρας είναι σύνθετη ιδιότητα. 2 Το σύνολο οντοτήτων παιδί πρέπει να έχει πρωτεύον κλειδί. 3 Η συσχέτιση ανάμεσα σε κάποια μητέρα και ένα παιδί (το παιδί της) απαιτεί ένα ξένο κλειδί. Το ξένο κλειδί τοποθετείται για το σύνολο οντοτήτων παιδί, και είναι το πρωτεύον κλειδί του συνόλου οντοτήτων μητέρα. 18 / 84

Μερικές λεπτομέρειες ακόμα 1 Το όνομα της μητέρας είναι σύνθετη ιδιότητα. 2 Το σύνολο οντοτήτων παιδί πρέπει να έχει πρωτεύον κλειδί. 3 Η συσχέτιση ανάμεσα σε κάποια μητέρα και ένα παιδί (το παιδί της) απαιτεί ένα ξένο κλειδί. Το ξένο κλειδί τοποθετείται για το σύνολο οντοτήτων παιδί, και είναι το πρωτεύον κλειδί του συνόλου οντοτήτων μητέρα. 4 Κάθε μέλος του συνόλου οντοτήτων παιδί, εξαρτάται από κάποιο μέλος του συνόλου οντοτήτων μητέρα. Αυτό σημαίνει το παιδί είναι ασθενές σύνολο οντοτήτων. 19 / 84

Βελτιωμένο διάγραμμα Ο/Σ amka birthdate id gender mother 0..* has 1..1 child phone fname weight birthdate firstname lastname 20 / 84

Περιεχόμενα 1 Γενική περιγραφή του προβλήματος 2 Μοντελοποίηση Ο/Σ 3 Σχεσιακό μοντέλο, SQL 4 Ερωτήματα SQL 5 Γεννήσεις διδύμων 21 / 84

Μετατροπή του μοντέλου σε σχεσιακό 22 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 23 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 2 Για τη συσχέτιση Ν:1 δεν υπάρχει αναγκαιότητα μετατροπής της σε σχέση. 24 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 2 Για τη συσχέτιση Ν:1 δεν υπάρχει αναγκαιότητα μετατροπής της σε σχέση. 3 Ολες οι απλές ιδιότητες και μονότιμες ιδιότητες των οντοτήτων μετατρέπονται σε γνωρίσματα των σχέσεων. 25 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 2 Για τη συσχέτιση Ν:1 δεν υπάρχει αναγκαιότητα μετατροπής της σε σχέση. 3 Ολες οι απλές ιδιότητες και μονότιμες ιδιότητες των οντοτήτων μετατρέπονται σε γνωρίσματα των σχέσεων. 4 Η σύνθετη ιδιότητα όνομα, του συνόλου οντοτήτων μητέρα, μοντελοποιείται με την αναλυτική της μορφή (όνομα, επώνυμο) και στη σχέση τοποθετούνται τα δύο αυτά γνωρίσματα. 26 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 2 Για τη συσχέτιση Ν:1 δεν υπάρχει αναγκαιότητα μετατροπής της σε σχέση. 3 Ολες οι απλές ιδιότητες και μονότιμες ιδιότητες των οντοτήτων μετατρέπονται σε γνωρίσματα των σχέσεων. 4 Η σύνθετη ιδιότητα όνομα, του συνόλου οντοτήτων μητέρα, μοντελοποιείται με την αναλυτική της μορφή (όνομα, επώνυμο) και στη σχέση τοποθετούνται τα δύο αυτά γνωρίσματα. 5 Πρωτεύον κλειδί τη σχέσης μητέρα είναι ο ΑΜΚΑ, ενώ πρωτεύον κλειδί της σχέσης παιδί είναι το ΙΔ. 27 / 84

Μετατροπή του μοντέλου σε σχεσιακό 1 Τα σύνολα οντοτήτων μητέρα και παιδί του διαγράμματος Ο/Σ μετατρέπονται σε σχέσεις. 2 Για τη συσχέτιση Ν:1 δεν υπάρχει αναγκαιότητα μετατροπής της σε σχέση. 3 Ολες οι απλές ιδιότητες και μονότιμες ιδιότητες των οντοτήτων μετατρέπονται σε γνωρίσματα των σχέσεων. 4 Η σύνθετη ιδιότητα όνομα, του συνόλου οντοτήτων μητέρα, μοντελοποιείται με την αναλυτική της μορφή (όνομα, επώνυμο) και στη σχέση τοποθετούνται τα δύο αυτά γνωρίσματα. 5 Πρωτεύον κλειδί τη σχέσης μητέρα είναι ο ΑΜΚΑ, ενώ πρωτεύον κλειδί της σχέσης παιδί είναι το ΙΔ. 6 Στη σχέση παιδί, τοποθετείται ως ξένο κλειδί ο ΑΜΚΑ της μητέρας. 28 / 84

Δημιουργία του πίνακα mother 1 CREATE TABLE mother 2 ( 3 amka CHAR(11) NOT NULL, 4 firstname VARCHAR(50) NOT NULL, 5 lastname VARCHAR(50) NOT NULL, 6 birthdate DATE, 7 phone CHAR(10), 8 CONSTRAINT pk PRIMARY KEY (amka) 9 ); 29 / 84

Παρατηρήσεις για τη μητέρα 1 Ο προσδιορισμός NOT NULL στη γραμμή 3 είναι απαραίτητος (πρωτεύον κλειδί). 2 Ο προσδιορισμός VARCHAR(50) για το όνομα και επώνυμο ορίζει το μέγιστο πλήθος χαρακτήρων. 3 Η ημερομηνία γέννησης birthdate ενδέχεται να πάρει NULL τιμές, όπως και το τηλέφωνο (στις γραμμές 6 7 δεν υπάρχει δήλωση NOT NULL). 4 Ο αριθμός τηλεφώνου δηλώνεται ως συμβολοσειρά και όχι ως αριθμός. Το τηλέφωνο αποτελείται από αριθμητικά ψηφία, αλλά δεν είναι αριθμός! 5 Η δήλωση στη γραμμή 8 χρησιμοποιείται για τον περιορισμό του πρωτεύοντος κλειδιού. Πρακτικά, αυτό εξασφαλίζει το γεγονός πως δεν είναι δυνατό δύο πρόσωπα (δύο μητέρες) να έχουν τον ίδιο ΑΜΚΑ. 30 / 84

Δημιουργία του πίνακα child 1 CREATE TABLE child 2 ( 3 id INTEGER NOT NULL AUTO_INCREMENT, 4 mamka CHAR(11) NOT NULL, 5 weight FLOAT, 6 birthdate DATE, 7 CONSTRAINT pk PRIMARY KEY (id), 8 CONSTRAINT fk_amka FOREIGN KEY (mamka) 9 REFERENCES mother (amka) 10 ); 31 / 84

Παρατηρήσεις για τον πίνακα παιδί 32 / 84

Παρατηρήσεις για τον πίνακα παιδί 1 Η δήλωση AUTO_INCREMENT στη γραμμή 3, δηλώνει το αριθμητικό πεδίο id είναι μια αριθμητική πρόοδος, ένας αύξων αριθμός. Η καταχώριση τιμής γίνεται αυτόματα. 33 / 84

Παρατηρήσεις για τον πίνακα παιδί 1 Η δήλωση AUTO_INCREMENT στη γραμμή 3, δηλώνει το αριθμητικό πεδίο id είναι μια αριθμητική πρόοδος, ένας αύξων αριθμός. Η καταχώριση τιμής γίνεται αυτόματα. 2 Το πεδίο mamka πρέπει να οριστεί με τον ίδιο τύπο δεδομένων όπως και στον πίνακα mother. Κάτι τέτοιο είναι απαραίτητο για την ορθή λειτουργία του περιορισμού ξένου κλειδιού, όπως δηλώνεται στη γραμμή 8. 34 / 84

Παρατηρήσεις για τον πίνακα παιδί 1 Η δήλωση AUTO_INCREMENT στη γραμμή 3, δηλώνει το αριθμητικό πεδίο id είναι μια αριθμητική πρόοδος, ένας αύξων αριθμός. Η καταχώριση τιμής γίνεται αυτόματα. 2 Το πεδίο mamka πρέπει να οριστεί με τον ίδιο τύπο δεδομένων όπως και στον πίνακα mother. Κάτι τέτοιο είναι απαραίτητο για την ορθή λειτουργία του περιορισμού ξένου κλειδιού, όπως δηλώνεται στη γραμμή 8. 3 Επειδή ο ορισμός του ξένου κλειδιού, γίνεται μέσα στον ορισμό του πίνακα, θα πρέπει ο πίνακας mother να έχει δημιουργηθεί πριν από τον πίνακα child. 35 / 84

Περιεχόμενα 1 Γενική περιγραφή του προβλήματος 2 Μοντελοποίηση Ο/Σ 3 Σχεσιακό μοντέλο, SQL 4 Ερωτήματα SQL 5 Γεννήσεις διδύμων 36 / 84

Πληροφορίες για μια μητέρα Να βρεθεί το όνομα και το επώνυμο της μητέρας με ΑΜΚΑ 2205130059 37 / 84

Πληροφορίες για μια μητέρα Να βρεθεί το όνομα και το επώνυμο της μητέρας με ΑΜΚΑ 2205130059 Π firstname,lastname (σ amka= 2205130059 (mother)) 38 / 84

Πληροφορίες για μια μητέρα Να βρεθεί το όνομα και το επώνυμο της μητέρας με ΑΜΚΑ 2205130059 Π firstname,lastname (σ amka= 2205130059 (mother)) 1 SELECT firstname, lastname 2 FROM mother 3 WHERE amka = 2205130059 ; 39 / 84

Πληροφορίες για τα παιδιά μιας μητέρας Να βρεθούν οι ημερομηνίες γέννησης και το φύλλο των παιδιών από τη μητέρα με ΑΜΚΑ 2205130059 40 / 84

Πληροφορίες για τα παιδιά μιας μητέρας Να βρεθούν οι ημερομηνίες γέννησης και το φύλλο των παιδιών από τη μητέρα με ΑΜΚΑ 2205130059 Π birthdate,gender (σ mamka= 2205130059 (child)) 41 / 84

Πληροφορίες για τα παιδιά μιας μητέρας Να βρεθούν οι ημερομηνίες γέννησης και το φύλλο των παιδιών από τη μητέρα με ΑΜΚΑ 2205130059 Π birthdate,gender (σ mamka= 2205130059 (child)) 1 SELECT birthdate, gender 2 FROM child 3 WHERE mamka = 2205130059 ; 42 / 84

Αναζήτηση με βάση τηλέφωνο Να βρεθεί το πλήθος των παιδιών που γέννησε η μητέρα με τηλέφωνο 6920013077 43 / 84

Αναζήτηση με βάση τηλέφωνο Να βρεθεί το πλήθος των παιδιών που γέννησε η μητέρα με τηλέφωνο 6920013077 1 SELECT COUNT(*) 2 FROM mother m INNER JOIN child c ON m.amka=c.mamka 3 WHERE m.phone= 6920013077 ; 44 / 84

Αναζήτηση με βάση τηλέφωνο Να βρεθεί το πλήθος των παιδιών που γέννησε η μητέρα με τηλέφωνο 6920013077 1 SELECT COUNT(*) 2 FROM mother m INNER JOIN child c ON m.amka=c.mamka 3 WHERE m.phone= 6920013077 ; Προσοχή σε παρόμοια ερωτήματα Είναι μοναδικό το τηλέφωνο 6920013077; 45 / 84

Επεξεργασία χρονολογικών δεδομένων Να βρεθεί η σημερινή ηλικία της μητέρας με ΑΜΚΑ 2205130059 46 / 84

Επεξεργασία χρονολογικών δεδομένων Να βρεθεί η σημερινή ηλικία της μητέρας με ΑΜΚΑ 2205130059 1 SELECT YEAR(NOW()) - YEAR(birthdate) 2 FROM mother 3 WHERE amka = 2205130059 ; 47 / 84

Τουλάχιστον δύο παιδιά Να βρεθεί το όνομα και το επώνυμο των μητέρων με περισσότερα από ένα παιδιά 48 / 84

Τουλάχιστον δύο παιδιά Να βρεθεί το όνομα και το επώνυμο των μητέρων με περισσότερα από ένα παιδιά 1 SELECT m.firstname, m.lastname 2 FROM mother m INNER JOIN child c ON m.amka=c.mamka 3 GROUP BY m.firstname, m.lastname 4 HAVING COUNT(*) > 1; 49 / 84

Το βαρύτερο νεογέννητο Να βρεθεί η ημερομηνία γέννησης και το φύλλο του παιδιού με το μεγαλύτερο βάρος 50 / 84

Το βαρύτερο νεογέννητο Να βρεθεί η ημερομηνία γέννησης και το φύλλο του παιδιού με το μεγαλύτερο βάρος 1 SELECT birthdate, gender 2 FROM child 3 WHERE weight = (SELECT MAX(weight) 4 FROM child); 51 / 84

Η μητέρα του βαρύτερου νεογέννητου Να βρεθεί η σημερινή ηλικία της μητέρας που γέννησε το παιδί με το μεγαλύτερο βάρος 52 / 84

Η μητέρα του βαρύτερου νεογέννητου Να βρεθεί η σημερινή ηλικία της μητέρας που γέννησε το παιδί με το μεγαλύτερο βάρος 1 SELECT YEAR(NOW()) - YEAR(m.birthdate) 2 FROM mother m INNER JOIN child c ON m.amka=c.mamka 3 WHERE c.weight = (SELECT MAX(weight) 4 FROM child); 53 / 84

Η μητέρα του βαρύτερου νεογέννητου Να βρεθεί η σημερινή ηλικία της μητέρας που γέννησε το παιδί με το μεγαλύτερο βάρος 1 SELECT YEAR(NOW()) - YEAR(m.birthdate) 2 FROM mother m INNER JOIN child c ON m.amka=c.mamka 3 WHERE c.weight = (SELECT MAX(weight) 4 FROM child); Υπάρχει κάτι ακόμα; 1 Χρειάζεται DISTINCT; 2 Υπάρχει περίπτωση το ερώτημα να επιστρέψει διπλότυπα; 54 / 84

Το βαρύτερο νεογέννητο Να βρεθεί το πλήθος των γεννήσεων στο μαιευτήριο ανά έτος 55 / 84

Το βαρύτερο νεογέννητο Να βρεθεί το πλήθος των γεννήσεων στο μαιευτήριο ανά έτος 1 SELECT YEAR(birthdate), COUNT(*) 2 FROM child 3 GROUP BY YEAR(birthdate); 56 / 84

Το βαρύτερο νεογέννητο Να βρεθεί το πλήθος των γεννήσεων στο μαιευτήριο ανά έτος 1 SELECT YEAR(birthdate), COUNT(*) 2 FROM child 3 GROUP BY YEAR(birthdate); Τι ακριβώς επιστρέφει το ερώτημα; 1 Πλήθος τοκετών ή πλήθος γεννήσεων; 2 Τι συμβαίνει με τη γέννηση διδύμων; 57 / 84

Περιεχόμενα 1 Γενική περιγραφή του προβλήματος 2 Μοντελοποίηση Ο/Σ 3 Σχεσιακό μοντέλο, SQL 4 Ερωτήματα SQL 5 Γεννήσεις διδύμων 58 / 84

Τι γίνεται με τα δίδυμα; 59 / 84

Τι γίνεται με τα δίδυμα; 1 Μπορεί η βάση δεδομένων να καταγράψει και να χειριστεί ένα τέτοιο γεγονός; 60 / 84

Τι γίνεται με τα δίδυμα; 1 Μπορεί η βάση δεδομένων να καταγράψει και να χειριστεί ένα τέτοιο γεγονός; 2 Είναι ικανοποιητικό το παρόν μοντέλο δεδομένων; Χρειάζονται αλλαγές; 61 / 84

Τι γίνεται με τα δίδυμα; 1 Μπορεί η βάση δεδομένων να καταγράψει και να χειριστεί ένα τέτοιο γεγονός; 2 Είναι ικανοποιητικό το παρόν μοντέλο δεδομένων; Χρειάζονται αλλαγές; 3 Μπορεί να καταγραφεί η γέννηση διδύμων ως νεογέννητα με την ίδια μητέρα και την ίδια ημερομηνία γέννησης; 62 / 84

Δίδυμα και SQL Να βρεθεί ποιες μητέρες έχουν γεννήσει δίδυμα 63 / 84

Δίδυμα και SQL Να βρεθεί ποιες μητέρες έχουν γεννήσει δίδυμα 1 SELECT m.* 2 FROM mother m 3 WHERE m.amka IN (SELECT c1.mamka 4 FROM child c1, child c2 5 WHERE c1.mamka = c2.mamka 6 AND c1.birthdate = c2.birthdate 7 AND c1.id <> c2.id 8 GROUP BY c1.mamka 9 HAVING COUNT(*) = 2); 64 / 84

Δίδυμα και SQL Να βρεθεί ποιες μητέρες έχουν γεννήσει δίδυμα 1 SELECT m.* 2 FROM mother m 3 WHERE m.amka IN (SELECT c1.mamka 4 FROM child c1, child c2 5 WHERE c1.mamka = c2.mamka 6 AND c1.birthdate = c2.birthdate 7 AND c1.id <> c2.id 8 GROUP BY c1.mamka 9 HAVING COUNT(*) = 2); Είμαστε ικανοποιημένοι; 1 Ερώτημα αυτοσύζευξης για μια απλή αναζήτηση; 2 Τι συμβαίνει με τη γέννηση διδύμων σε διαφορετική ημερομηνία (μεσάνυχτα); 65 / 84

Δίδυμοι προβληματισμοί 66 / 84

Δίδυμοι προβληματισμοί 1 Ολη η συζήτηση των προηγούμενων παραγράφων ταύτισε (εσφαλμένα κάπως) τη γέννηση ενός παιδιού με τη γέννα μιας μητέρας. 67 / 84

Δίδυμοι προβληματισμοί 1 Ολη η συζήτηση των προηγούμενων παραγράφων ταύτισε (εσφαλμένα κάπως) τη γέννηση ενός παιδιού με τη γέννα μιας μητέρας. 2 Ο τοκετός μπορεί να αφορά περισσότερα από ένα μωρά, ας διαχωρίζουμε τον τοκετό από τη γέννηση ενός παιδιού. 68 / 84

Δίδυμοι προβληματισμοί 1 Ολη η συζήτηση των προηγούμενων παραγράφων ταύτισε (εσφαλμένα κάπως) τη γέννηση ενός παιδιού με τη γέννα μιας μητέρας. 2 Ο τοκετός μπορεί να αφορά περισσότερα από ένα μωρά, ας διαχωρίζουμε τον τοκετό από τη γέννηση ενός παιδιού. 3 Μια μητέρα κάνει πολλές γέννες, και κάθε γέννα μπορεί να έχει πολλά παιδιά. 69 / 84

Δίδυμοι προβληματισμοί 1 Ολη η συζήτηση των προηγούμενων παραγράφων ταύτισε (εσφαλμένα κάπως) τη γέννηση ενός παιδιού με τη γέννα μιας μητέρας. 2 Ο τοκετός μπορεί να αφορά περισσότερα από ένα μωρά, ας διαχωρίζουμε τον τοκετό από τη γέννηση ενός παιδιού. 3 Μια μητέρα κάνει πολλές γέννες, και κάθε γέννα μπορεί να έχει πολλά παιδιά. 4 Απαιτείται νέα μοντελοποίηση. 70 / 84

Νέο διάγραμμα Ο/Σ amka birthdate id id gender mother 0..* gives 1..1 birth 1..* has 1..1 child phone fname birthdate weight birthdate firstname lastname 71 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 72 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 1 Το σύνολο οντοτήτων μητέρα μένει ως έχει αμετάβλητο. 73 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 1 Το σύνολο οντοτήτων μητέρα μένει ως έχει αμετάβλητο. 2 Η συμμετοχή του συνόλου οντοτήτων μητέρα, στο σύνολο συσχετίσεων τοκετός είναι πλειότιμη: μια μητέρα μπορεί να έχει πολλούς τοκετούς. 74 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 1 Το σύνολο οντοτήτων μητέρα μένει ως έχει αμετάβλητο. 2 Η συμμετοχή του συνόλου οντοτήτων μητέρα, στο σύνολο συσχετίσεων τοκετός είναι πλειότιμη: μια μητέρα μπορεί να έχει πολλούς τοκετούς. 3 Κάθε γέννα ανήκει σε μία μόνο μητέρα. Επομένως, η συμμετοχή του συνόλου οντοτήτων γέννα στο σύνολο οντοτήτων τοκετός είναι μονότιμη. 75 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 1 Το σύνολο οντοτήτων μητέρα μένει ως έχει αμετάβλητο. 2 Η συμμετοχή του συνόλου οντοτήτων μητέρα, στο σύνολο συσχετίσεων τοκετός είναι πλειότιμη: μια μητέρα μπορεί να έχει πολλούς τοκετούς. 3 Κάθε γέννα ανήκει σε μία μόνο μητέρα. Επομένως, η συμμετοχή του συνόλου οντοτήτων γέννα στο σύνολο οντοτήτων τοκετός είναι μονότιμη. 4 Η συμμετοχή του συνόλου οντοτήτων παιδί στο σύνολο συσχετίσεων γέννηση είναι μονότιμη. 76 / 84

Παρατηρήσεις για το νέο διάγραμμα Ο/Σ 1 Το σύνολο οντοτήτων μητέρα μένει ως έχει αμετάβλητο. 2 Η συμμετοχή του συνόλου οντοτήτων μητέρα, στο σύνολο συσχετίσεων τοκετός είναι πλειότιμη: μια μητέρα μπορεί να έχει πολλούς τοκετούς. 3 Κάθε γέννα ανήκει σε μία μόνο μητέρα. Επομένως, η συμμετοχή του συνόλου οντοτήτων γέννα στο σύνολο οντοτήτων τοκετός είναι μονότιμη. 4 Η συμμετοχή του συνόλου οντοτήτων παιδί στο σύνολο συσχετίσεων γέννηση είναι μονότιμη. 5 Η συμμετοχή του συνόλου οντοτήτων γέννα στο σύνολο συσχετίσεων γέννηση είναι πλειότιμη. 77 / 84

Νέο διάγραμμα Ο/Σ amka birthdate id id gender mother 0..* gives 1..1 birth 1..* has 1..1 child phone fname birthdate weight birthdate firstname lastname 78 / 84

Ο πίνακας μητέρα 1 CREATE TABLE mother 2 ( 3 amka CHAR(11) NOT NULL, 4 firstname VARCHAR(50) NOT NULL, 5 lastname VARCHAR(50) NOT NULL, 6 birthdate DATE, 7 phone CHAR(10), 8 CONSTRAINT pk PRIMARY KEY (adt) 9 ); 79 / 84

Ο πίνακας γέννα 1 CREATE TABLE birth 2 ( 3 id INTEGER NOT NULL AUTO_INCREMENT, 4 mamka CHAR(11) NOT NULL, 5 birthdate DATETIME, 6 CONSTRAINT pk PRIMARY KEY (id), 7 CONSTRAINT fk_amka FOREIGN KEY (mamka) 8 REFERENCES mother(amka) 9 ); 80 / 84

Ο πίνακας παιδί 1 CREATE TABLE child 2 ( 3 id INTEGER NOT NULL AUTO_INCREMENT, 4 bid INTEGER NOT NULL, 5 gender CHAR(10), 6 weight FLOAT, 7 CONSTRAINT pk PRIMARY KEY (id), 8 CONSTRAINT fk_bid FOREIGN KEY (bid) 9 REFERENCES birth(id) 10 ); 81 / 84

Μητέρες διδύμων Ποιες μητέρες έχουν δίδυμα; 1 SELECT m.* 2 FROM mother m INNER JOIN birth b 3 ON m.amka = b.mamka 4 INNER JOIN child c 5 ON b.id = c.bid 6 GROUP BY m.amka 7 HAVING COUNT(*) = 2; 82 / 84

Μητέρες τρίδυμων Ποιες μητέρες έχουν τρίδυμα; 1 SELECT m.* 2 FROM mother m INNER JOIN birth b 3 ON m.amka = b.mamka 4 INNER JOIN child c 5 ON b.id = c.bid 6 GROUP BY m.amka 7 HAVING COUNT(*) = 3; 83 / 84