Entity-Relationship Παραδείγματα

Post on 03-Jan-2016

44 views 0 download

description

Entity-Relationship Παραδείγματα. Πληροφοριακά Συστήματα και Βάσεις Δεδομένων Φροντιστήριο 1 Δαμιανός Χατζηαντωνίου. Επανάληψη. Επανάληψη. Παράδειγμα. Παράδειγμα. - PowerPoint PPT Presentation

Transcript of Entity-Relationship Παραδείγματα

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 SWHERE 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) REFERENCES Students )

sid name login age gpa

53666 Jones jones@cs 18 3.453688 Smith smith@eecs 18 3.253650 Smith smith@math 19 3.8

sid cid grade53666 Carnatic101 C53666 Reggae203 B53650 Topology112 A53666 History105 B

EnrolledStudents

Περιορισμοί ακεραιότητας

• Θεωρείστε τους πίνακες 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 SQL 1999

υποστηρίζουν όλα τα 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) REFERENCES Students

ON DELETE CASCADEON 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)

Λύση - 1

Λύση - 2

Λύση – 3,4,5

Λύση - 6

DELETE

Άσκηση 3.12 – Λύση

Άσκηση 3.12 - Λύση

Άσκηση 3.12 - Λύση

Άσκηση 3.12 - Λύση