Βάσεις Δεδομένων Ι 4η διάλεξη
1 ΒΔ Στην πράξη!
https://dev.mysql.com/downloads/mysql/ MySQL Workbench Στην πράξη! MySQL https://dev.mysql.com/downloads/mysql/ MySQL Workbench http://dev.mysql.com/downloads/workbench/ Online http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
2 Γλώσσα επικοινωνίας
Structured Query Language Data Definition Language SQL και DDL Structured Query Language Data Definition Language Θεωρούμε ότι η πρόσβαση στα δεδομένα σχετίζεται με ερωτήματα (query) Η DDL είναι κομμάτι/υποσύνολο της SQL και σχετίζεται με τις εντολές της δημιουργίας, διαγραφής και επεξεργασίας των πινάκων!
Student(sid: integer, name: string, login: string, age: integer) Δημιουργία πίνακα Student(sid: integer, name: string, login: string, age: integer) CREATE TABLE student ( sid INTEGER, name VARCHAR(30), login VARCHAR(30), age INTEGER); CREATE TABLE student ( sid INTEGER, name VARCHAR(30), login VARCHAR(30), age INTEGER);
ALTER TABLE student ADD COLUMN firstYear INTEGER Διαχείριση πίνακα DROP TABLE student ALTER TABLE student ADD COLUMN firstYear INTEGER
DELETE FROM student WHERE sid = 1 Διαχείριση δεδομένων INSERT INTO student (sid, name, login, age, firstYear) VALUES (1, “John”, “john@cs.gr”, 18, 2015) DELETE FROM student WHERE sid = 1 DELETE FROM student S WHERE S.sid = 1 UPDATE student SET name = “Jane” WHERE sid = 1 UPDATE student S SET S.name = “Jane” WHERE S.sid = 1
Θέλω να δω όλους τους φοιτητές που είναι 18 ετών Ερώτημα Θέλω να δω όλους τους φοιτητές που είναι 18 ετών Θέλω να δω όλους τους φοιτητές που το όνομά τους είναι John Θέλω να δω όλους τους φοιτητές που έχουν εισαχθεί το 2015 SELECT * FROM student S WHERE S.age = 18 SELECT S.name FROM student S WHERE S.age = 18 SELECT S.name, S.login FROM student S WHERE S.firstYear = 2015 and S.age = 18
SQL Reference http://www.w3schools.com/sql/sql_quickref.asp
3 Περιορισμοί ακεραιότητας
Περιορισμός ακεραιότητας Συνθήκη που δηλώνεται να ισχύει πάνω σε ένα σχήμα βάσης δεδομένων και περιορίζει τα δεδομένα που μπορεί να υπάρχουν σε κάθε στιγμιότυπο Εφαρμογή: σε διαφορετικές χρονικές στιγμές!
Περιορισμός πεδίου ορισμού Επιτρέπονται αποκλειστικά και συγκεκριμένες τιμές που μπορούν να καταχωρηθούν σε ένα πεδίο σύμφωνα με το πεδίο ορισμού.
Κάθε τέτοιο σύνολο ονομάζεται υποψήφιο κλειδί Περιορισμός κλειδιού Υπάρχει κάποιο ελαχιστοποιημένο υποσύνολο του συνόλου των πεδίων του οποίου η συνδυασμένη τιμή ορίζει μονοσήμαντα το σύνολο των πεδίων. Κάθε τέτοιο σύνολο ονομάζεται υποψήφιο κλειδί Το σύνολο που θα επιλεγεί για να αποτελέσει το κλειδί ονομάζεται πρωτεύον κλειδί (primary key)
Τι σημαίνει ο περιορισμός; Δύο διακριτές πλειάδες δε μπορεί να έχουν ίδιες τιμές στο σύνολο των πεδίων που ορίζει το κλειδί Κανένα υποσύνολο του συνόλου δεν παρέχει δυνατότητα μονοσήμαντου προσδιορισμού
CREATE TABLE student ( sid INTEGER, name VARCHAR(30), Ορισμός κλειδιού CREATE TABLE student ( sid INTEGER, name VARCHAR(30), login VARCHAR(30), age INTEGER, CONSTRAINT studentKey PRIMARY KEY (sid) )
Κάποια σχέση μπορεί να συνδυάζεται με μια τελείως διαφορετική σχέση Ξένο κλειδί Κάποια σχέση μπορεί να συνδυάζεται με μια τελείως διαφορετική σχέση Από πότε Αριθμός Μητρώου Όνομα Επίθετο Αναγνωριστικό Ονομασία σπουδάζει Φοιτητής Σχολή
Παραμένει διαρκώς σε συνεπή και συγχρονισμένη κατάσταση Ξένο κλειδί Παραμένει διαρκώς σε συνεπή και συγχρονισμένη κατάσταση Οι αυτοματισμοί προκύπτουν από τους περιορισμούς ακεραιότητας του DBMS
student (am, name, surname) department (identification, name) Φοιτητής Αριθμός Μητρώου Όνομα Επίθετο Σχολή Αναγνωριστικό Ονομασία σπουδάζει Από πότε Ξένο κλειδί student (am, name, surname) department (identification, name) studies ( “student”, “department”, fromWhen)
Ξένο κλειδί 123 John Doe 124 Jane A1 Computer Science A2 Economics ? Am Name surname 123 John Doe 124 Jane id Name A1 Computer Science A2 Economics Student Department FromWhen ?
Ξένο κλειδί 123 John Doe 124 Jane A1 Computer Science A2 Economics 123 Am Name surname 123 John Doe 124 Jane id Name A1 Computer Science A2 Economics Student Department FromWhen 123 A2 1/1/2014 124 A1 10/9/2013
am στον student: Πρωτεύον Κλειδί (PK) Κλειδιά am στον student: Πρωτεύον Κλειδί (PK) id στον department: Πρωτεύον Κλειδί (PK) am στον studies: Ξένο κλειδί (FK) id στον studies: Ξένο κλειδί (FK) Κλειδί του studies?
Ορισμός ξένου κλειδιού CREATE TABLE studies ( sid INTEGER, am INTEGER, id INTEGER, fromWhen DATE, PRIMARY KEY (sid), FOREIGN KEY (am) REFERENCES student FOREIGN KEY (id) REFERENCES department )
Γενικού τύπου περιορισμοί Περιορισμός σε επίπεδο πίνακα Περιορισμός σε επίπεδο ΒΔ
4 Επιβολή Των περιορισμών
Εφαρμογή των περιορισμών Περιορισμός σε επίπεδο πίνακα Περιορισμός σε επίπεδο ΒΔ
Παραβιάσεις των περιορισμών am name surname (null) John Doe 124
Αναφορική ακεραιότητα Η δυνατότητα που έχει το DBMS να επιβάλει συνέπεια και συγχρονισμό στο ξένο κλειδί
Τι πρέπει να γίνει αν διαγράψω μια εγγραφή από τον πίνακα student Ερωτήματα Τι πρέπει να γίνεται όταν εισάγεται μια νέα εγγραφή στον πίνακα studies η οποία έχει τιμή για τη στήλη am (student) η οποία δεν υπάρχει στον πίνακα student; Τι πρέπει να γίνει αν διαγράψω μια εγγραφή από τον πίνακα student Τι πρέπει να γίνει αν αλλάξω την τιμή ενός κλειδιού για τον πίνακα student
NOT NULL (δεν επιτρέπεται κενό) ON DELETE ON UPDATE Βασικοί περιορισμοί! NOT NULL (δεν επιτρέπεται κενό) ON DELETE ON UPDATE
5 ER σε σχήμα
Πως πρέπει να μετατρέπω κάθε ER σε ένα σχήμα;
Πως πρέπει να μετατρέπω κάθε ER σε ένα σχήμα;
Μετασχηματισμών οντοτήτων σε πίνακες Μετασχηματισμοί Μετασχηματισμών οντοτήτων σε πίνακες Μετασχηματισμός συσχετίσεων σε πίνακες (χωρίς περιορισμούς) Μετασχηματισμός συσχετίσεων σε πίνακες (με περιορισμό κλειδιού) Μετασχηματισμός συσχετίσεων σε πίνακες (με περιορισμό συμμετοχής)