320 likes | 457 Views
Entity-Relationship Παραδείγματα. Πληροφοριακά Συστήματα και Βάσεις Δεδομένων Φροντιστήριο 1 Δαμιανός Χατζηαντωνίου. Επανάληψη. Επανάληψη. Παράδειγμα. Παράδειγμα.
E N D
Entity-Relationship Παραδείγματα Πληροφοριακά Συστήματα και Βάσεις Δεδομένων Φροντιστήριο 1 Δαμιανός Χατζηαντωνίου
Παράδειγμα Σκεφτείτε μία εφαρμογή πώλησης βιβλίων (π.χ. amazon.com). Θέλουμε να μοντελοποιήσουμε το πρόβλημα αυτό χρησιμοποιώντας το μοντέλο Ο-Σ. • Συγγραφείς βιβλίων (name, address, URL) • Βιβλία (title, year, price, ISBN) • Εκδοτικοί οίκοι (name, address, phone, URL) • Πελάτες (name, address, email, phone) • Αποθήκη βιβλίων (code, address, phone) • Καλάθια αγορών (basketID)
Δημιουργία πίνακα • Δημιουργία του πίνακα Students.Κάθε πεδίο ορίσμου δηλώνεται και επιβάλλεται από το ΣΔΒΔ κάθε φορά που εισάγουμε/ενημερώνουμε μία πλειάδα. • Enrolled πίνακας: κρατάει πληροφορίες για τα μαθήματα ενός φοιτητή. CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa: REAL) CREATE TABLE Enrolled (sid: CHAR(20), cid: CHAR(20), grade: CHAR(2))
Εισαγωγή/Διαγραφή • Μπορούμε να εισάγουμε μία πλειάδα: INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, ‘Smith’, ‘smith@ee’, 18, 3.2) • Διαγραφή πλειάδων που ικανοποιούν μία συνθήκη (e.g., name = Smith): DELETE FROM Students S WHERE S.name = ‘Smith’
Περιορισμοί ακεραιότητας CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid) ) • “For a given student and course, there is a single grade.” vs. “Students can take only one course, and receive a single grade for that course; further, no two students in a course receive the same grade.” • Used carelessly, an IC can prevent the storage of database instances that arise in practice! CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid), UNIQUE (cid, grade) )
Περιορισμοί ακεραιότητας • Μόνο φοιτητές του πίνακα Students επιτρέπεται να εγγραφούν για μαθήματα. CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCESStudents ) Enrolled Students
Περιορισμοί ακεραιότητας • Θεωρείστε τους πίνακες Students and Enrolled. Το sidστον Enrolled είναι ξένο κλειδί που αναφέρεται στον Students • Τι θα γίνει αν μία γραμμή με ανύπαρκτο student id εισαχθεί στον Enrolled? (Reject it!) • Τι θα γίνει αν μία γραμμή στον Students διαγραφεί? • Also delete all Enrolled tuples that refer to it. • Disallow deletion of a Students tuple that is referred to. • Set sid in Enrolled tuples that refer to it to a default sid. • (In SQL, also: Set sid in Enrolled tuples that refer to it to a special value null, denoting `unknown’ or `inapplicable’.) • Παρόμοια αν το primary key του Students ενημερωθεί
SQL/92 and SQL1999 υποστηρίζουν όλα τα 4 options όταν έχουμε deletes και updates NO ACTION [default] (delete/update is rejected) CASCADE (also delete all tuples that refer to deleted tuple) SET NULL / SET DEFAULT(sets foreign key value of referencing tuple) Περιορισμοί ακεραιότητας CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCESStudents ON DELETE CASCADE ON UPDATE SET DEFAULT )
Άσκηση 3.8 • Emp(eid:integer, ename:string, age:integer, salary: real) • Works(eid: integer, did: integer, pct_time: integer) • Dept(did: integer, dname: string, budget: real, managerid: integer)
Λύση - 6 DELETE