Κεφ 4: Προχωρημένες Εντολές SQL

Σχετικά έγγραφα
Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

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

Kεφ.2: Σχεσιακό Μοντέλο (επανάληψη) Κεφ.6.1: Σχεσιακή Άλγεβρα

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

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


Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

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

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

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

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

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

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

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

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

Τμήμα Διοίκησης Επιχειρήσεων

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

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

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

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

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

Εισαγωγή στην πληροφορική

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

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

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

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

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

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

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

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

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

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

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

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

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

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

DELETE, UPDATE, INSERT.

DELETE, UPDATE, INSERT

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

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

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

Τελεστής Προβολής - Παράδειγμα. Π Πόλη, Εξάμηνο (Φοιτητές)

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

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

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

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

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

Δυναμικός Κατακερματισμός

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Department of Computer Science University of Cyprus. EPL342 Databases. Lecture 8: RM II. Relational Model. (Chapter )

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #6

H Γλώσσα SQL Σχεδιασμός Βάσεων Δεδομένων

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

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

ΕΠΛ 342 Βάσεις εδοµένων

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


ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

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

Η SQL ως γλώσσα τροποποίησης Δεδομένων

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

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

Η Γλώσσα SQL. Παράδειγμα ΒΔ (Τράπεζα)

Θεωρία Κανονικοποίησης

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

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

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

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

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


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

Κεφ.11: Ευρετήρια και Κατακερματισμός

Διαχείριση χρηστών και δικαιωμάτων

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

10 η Διάλεξη Python Βάσεις δεδομένων στη python

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

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

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

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

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

Βάσεις Δεδομένων. Ενότητα 7.2: Structured Query Language - 2 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Σχεσιακή Άλγεβρα Σχεδιασμός Βάσεων Δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Transcript:

Κεφ 4: Προχωρημένες Εντολές SQL Database System Concepts, 6 th Ed. See www.db-book.com for conditions on re-use

Σύνδεση σχέσεων (join) Οι λειτουργίες Join παίρνουν ως είσοδο δυο σχέσεις και επιστρέφουν ως αποτέλεσμα μια άλλη σχέση. Αυτές οι πράξεις χρησιμοποιούνται συνήθως ως εκφράσεις υποερωτημάτων στο τμήμα from. Συνθήκη Join: καθορίζει ποιες πλειάδες στις δυο σχέσεις ταιριάζουν και ποια γνωρίσματα εμφανίζονται στο αποτέλεσμα του join. Τύπος Join: καθορίζει πώς επεξεργαζόμαστε τις πλειάδες κάθε σχέσης, οι οποίες δε ταιριάζουν με κάποια πλειάδα της άλλης σχέσης (βάσει της συνθήκης του join). Τύποι συνδέσμου inner join left outer join right outer join full outer join Συνθήκες Συνδέσμου natural on <predicate> using (A 1, A 2,..., A n ) 4.2

Συνδέσεις Συνθήκες Συνδέσμου: on P (Ρ είναι κατηγόρημα) using (A 1, A 2,..., A n ): γνωρίσματα που πρέπει να ταιριάζουν στη συνένωση είναι τα A i. Τα A i πρέπει να είναι γνωρίσματα κοινά και στις δυο σχέσεις και εμφανίζονται στο αποτέλεσμα μόνο μια φορά. Για την εσωτερική συνένωση η συνθήκη δεν είναι υποχρεωτική, όταν λείπει ισοδυναμεί με καρτεσιανό γινόμενο. 4.3

Συνενώσεις Συνόλων Οι λέξεις κλειδιά inner και outer είναι προαιρετικές. natural: φυσική συνένωση, τα γνωρίσματα εμφανίζονται στο αποτέλεσμα με την εξής διάταξη: πρώτα αυτά με τα οποία έγινε η συνένωση (δηλ., αυτά που είναι κοινά και στις δύο σχέσεις), μετά τα υπόλοιπα της πρώτης σχέσης, και τέλος τα υπόλοιπα της δεύτερης σχέσης. Παράδειγμα: Τα ονόματα των πελατών που είτε έχουν καταθέσεις είτε έχουν πάρει δάνεια (αλλά όχι και τα δυο) select Όνομα-Πελάτη from Καταθέτης natural full outer join Δανειζόμενος where Αριθμός-Λογαριασμού is null or Αριθμός-Δανείου is null 4.4

Join παράδειγμα Σχέση course Σχέση prereq Παρατηρείστε ότι πληροφορία prereq λείπει για το CS-315 και πληροφορία course λείπει για το CS-437 4.5

Outer Join Επέκταση του join που αποφεύγει την απώλεια πληροφορίας. Υπολογίζει το join και μετά προσθέτει πλειάδες από μια σχέση που ΔΕΝ ταιριάζουν με πλειάδες της άλλης στο αποτέλεσμα Χρησιμοποιεί null τιμές. 4.6

Left Outer Join course natural left outer join prereq 4.7

Right Outer Join course natural right outer join prereq 4.8

Full Outer Join course natural full outer join prereq 4.9

Συνδεδεμένες Σχέσεις Παραδείγματα course inner join prereq on course.course_id = prereq.course_id Ποια η διαφορά του παραπάνω με ένα natural join? course left outer join prereq on course.course_id = prereq.course_id 4.10

Συνδεδεμένες Σχέσεις Παραδείγματα course natural right outer join prereq course full outer join prereq using (course_id) 4.11

Views (Προβολές ή Όψεις) Σε ορισμένες περιπτώσεις, δεν είναι επιθυμητό όλοι οι χρήστες να βλέπουν ολόκληρο το λογικό μοντέλο (δηλαδή όλες τις πραγματικές σχέσεις που είναι αποθηκευμένες στη βάση δεδομένων). Π.χ. Έστω ότι χρειάζεται κάποιος να ξέρει το όνομα ενός instructor και το department του, αλλά όχι τον μισθό του (salary). Αυτό το άτομο πρέπει να δει μια σχέση που με SQL περιγράφεται ως: select ID, name, dept_name from instructor Μια προβολή παρέχει το μηχανισμό για να αποκρύψουμε δεδομένα από κάποιους χρήστες Οποιαδήποτε σχέση δεν βρίσκεται στο σχήμα αλλά είναι ορατή σε ένα χρήστη ονομάζεται προβολή (ή όψη). 4.12

Ορισμός Όψεων Μπορούμε να ορίσουμε μια όψη χρησιμοποιώντας την εντολή: view definition create view <όνομα--όψης> as <select-from-where ερώτηση> Επίσης, μπορούν να προσδιοριστούν τα ονόματα των γνωρισμάτων άμεσα create view <όνομα--όψης> (<λίστα ονομάτων-γνωρισμάτων>) as <select-from-where ερώτηση> 4.13

Ορισμός Όψεων Παράδειγμα: Μια όψη που περιλαμβάνει τα ονόματα όλων των υποκαταστημάτων και το άθροισμα του ποσού των δανείων που έχουν γίνει από αυτά create view Υποκατάστημα-Σύνολο-Δανείων (Όνομα- Υποκαταστήματος, Σύνολο-Δανείων) as select Όνομα-Υποκαταστήματος, sum(ποσό) from Δάνειο group by Όνομα-Υποκαταστήματος 4.14

Ορισμός Όψεων Τα ονόματα όψεων μπορεί να χρησιμοποιηθούν οπουδήποτε μπορεί να χρησιμοποιηθεί το όνομα μιας σχέσης. Ο ορισμός της προβολής δεν είναι ο ίδιος με τη δημιουργία μιας νέας σχέσης Αντίθετα, ένας ορισμός προβολής προκαλεί την αποθήκευση μιας έκφρασης. Η έκφραση αντικαθίσταται στα ερωτήματα χρησιμοποιώντας την προβολή. Ο ορισμός της όψης παραμένει στην βάση δεδομένων, εκτός αν σβηστεί: drop view <όνομα-όψης> 4.15

Παραδείγματα instructors χωρίς salary: create view faculty as select ID, name, dept_name from instructor Όλοι οι instructors στο τμήμα Biology: select name from faculty where dept_name = Biology Μια προβολή από σύνολα department - salary: create view departments_total_salary(dept_name, total_salary) as select dept_name, sum (salary) from instructor group by dept_name; 4.16

Προβολές μέσω άλλων προβολών create view physics_fall_2009 as select course.course_id, sec_id, building, room_number from course, section where course.course_id = section.course_id and course.dept_name = Physics and section.semester = Fall and section.year = 2009 ; create view physics_fall_2009_watson as select course_id, room_number from physics_fall_2009 where building= Watson ; 4.17

Ενημέρωση Προβολής Προσθέτουμε μια νέα πλειάδα στην προβολή faculty που ορίσαμε προηγουμένως: insert into faculty values ( 30765, Green, Music ); Αυτή η εισαγωγή πρέπει να αντιπροσωπεύεται από την εισαγωγή της πλειάδας στη σχέση instructor ( 30765, Green, Music, null) Όμως γιατί να προσθέσουμε το null και να μην απορρίψουμε την εισαγωγή; 4.18

Ορισμένες ενημερώσεις δεν μπορούν να μεταφραστούν Μοναδικά create view instructor_info as select ID, name, building from instructor, department where instructor.dept_name= department.dept_name; insert into instructor_info values ( 69987, White, Taylor ); Ποιο department αν ο Taylor είναι σε πολλαπλά? Αν δεν είναι σε κανένα? Οι πιο πολλές υλοποιήσεις SQL επιτρέπουν ενημερώσεις μόνο σε «απλές» όψεις Το from περιέχει μόνο μια σχέση Το select περιέχει μόνο στήλες της σχέσης και δεν περιέχει εκφράσεις, συναθροίσεις ή distinct. Ό,τι στήλη δεν υπάρχει στο select μπορεί να τεθεί σε null Tο ερώτημα δεν περιέχει group by ή having. 4.19

Και κάποιο άλλο πρόβλημα create view history_instructors as select * from instructor where dept_name= History ; Αν θέλουμε να εισάγουμε το ( 25566, Brown, Biology, 100000) στην history_instructors τι θα γίνει; 4.20

Materialized (αντικειμενικές) Views Materializing a view: δημιουργία ενός φυσικού πίνακα που περιέχει όλες τις πλειάδες στο αποτέλεσμα του ερωτήματος που καθορίζει την προβολή Εάν οι σχέσεις που χρησιμοποιούνται στο ερώτημα ενημερώνονται, το αποτέλεσμα της αντικειμενικής προβολής καθίσταται ξεπερασμένο Πρέπει να διατηρηθεί η όψη, ενημερώνοντάς την όποτε ενημερώνονται οι υποκείμενες σχέσεις. 4.21

Transactions (Συναλλαγές) Μια σειρά ερωτημάτων ή/και ενημερώσεων Ατομική συναλλαγή είτε εκτελείται πλήρως είτε αναιρείται σαν να μην συνέβη ποτέ Απομόνωση από ταυτόχρονες συναλλαγές Οι συναλλαγές ξεκινούν σιωπηρά Τελειώνουν με commit work ή rollback work Στις πιο πολλές ΒΔ: κάθε εντολή SQL κάνει commit αυτόματα Μπορεί να αλλάξει (π.χ. Με χρήση του API) Στην SQL:1999, χρησιμοποιούμε: begin atomic. end 4.22

Περιορισμοί Ακεραιότητας Οι περιορισμοί ακεραιότητας προστατεύουν από την τυχαία ζημία τη βάση δεδομένων, διασφαλίζοντας ότι οι εγκεκριμένες αλλαγές στη βάση δεδομένων δεν οδηγούν σε απώλεια της συνέπειας των δεδομένων. Ένας λογαριασμός πρέπει να έχει υπόλοιπο > $10,000.00 Μισθός υπαλλήλου τουλάχιστον $4.00/ hour Πελάτης δεν πρέπει να έχει τηλ.αριθμό null 4.23

περιορισμοί ακεραιότητας σε μια μόνο σχέση not null primary key unique check (P), P κατηγόρημα 4.24

Not Null και Unique not null Τα name και budget να είναι not null name varchar(20) not null budget numeric(12,2) not null unique ( A 1, A 2,, A m ) Η προδιαγραφή unique ορίζει ότι οι ιδιότητες A1, A2, Am σχηματίζουν ένα υποψήφιο κλειδί. Τα υποψήφια κλειδιά μπορούν να είναι null (σε αντίθεση με τα πρωτεύοντα κλειδιά). 4.25

Ο όρος check check (P), P κατηγόρημα Π.χ.: να βεβαιωθούμε ότι το semester είναι είτε fall, winter, spring ή summer: create table section ( course_id varchar (8), sec_id varchar (8), semester varchar (6), year numeric (4,0), building varchar (15), room_number varchar (7), time slot id varchar (4), primary key (course_id, sec_id, semester, year), check (semester in ( Fall, Winter, Spring, Summer )) ); 4.26

Referential Integrity (ακεραιότητα αναφορών) Εξασφαλίζει ότι μια τιμή που εμφανίζεται σε μία σχέση για ένα δεδομένο σύνολο ιδιοτήτων εμφανίζεται επίσης για ένα ορισμένο σύνολο ιδιοτήτων σε άλλη σχέση. Π.χ.: Εάν η "Βιολογία" είναι ένα όνομα τμήματος που εμφανίζεται σε μία από τις πλειάδες στη σχέση εκπαιδευτή, τότε υπάρχει μια πλειάδα στη σχέση τμήματος για τη "Βιολογία". Έστω A ένα σύνολο από ιδιότητες. Έστω R και S δύο σχέσεις που περιέχουν τις ιδιότητες A και το A είναι πρωτεύον κλειδί της S. Το A είναι foreign key(ξένο κλειδί) της R αν για όλες τις τιμές του Α που εμφανίζονται στην R αυτές υπάρχουν και στην S. 4.27

Διαδοχικές Δράσεις ακεραιότητας αναφορών create table course ( course_id char(5) primary key, title varchar(20), dept_name varchar(20) references department ) create table course ( dept_name varchar(20), foreign key (dept_name) references department on delete cascade on update cascade,... ) Εναλλακτικές δράσεις: set null, set default 4.28

Παραβίαση ακεραιότητας κατά τις συναλλαγές Π.χ. create table person ( ID char(10), name char(40), mother char(10), father char(10), primary key ID, foreign key father references person, foreign key mother references person) Πώς να κάνουμε εισαγωγή χωρίς να παραβιάσουμε τη συνθήκη; Εισαγωγή πατέρα και μητέρας πριν το άτομο Η, θέτουμε father και mother σε null αρχικά, update αφού εισάγουμε όλα τα άτομα (δεν γίνεται αν οι ιδιότητες αυτές είναι not null) Ή καθυστερούμε τον έλεγχο 4.29

Περίπλοκες συνθήκες Ελέγχου check (time_slot_id in (select time_slot_id from time_slot)) Γιατί όχι με ξένο κλειδί? Κάθε section έχει τουλάχιστον έναν instructor. Πώς το εκφράζουμε αυτό? Δυστυχώς: στο check δεν υποστηρίζονται υπο ερωτήματα εναλλακτικά: triggers create assertion <assertion-name> check <predicate>; Επίσης δεν υποστηρίζονται 4.30

Ενσωματωμένοι τύποι δεδομένων στην SQL date: ημερομηνίες, με 4-ψήφιο χρόνο, μήνα και ημέρα Example: date 2005-7-27 time: Example: time 09:00:30 time 09:00:30.75 timestamp: Example: timestamp 2005-7-27 09:00:30.75 interval: περίοδος χρόνου Π.χ.: interval 1 day Αφαιρώντας μια τιμή date/time/timestamp από μια άλλη επιστρέφει interval Τιμές interval μπορούν να προστεθούν σε τιμές date/time/timestamp 4.31

Δημιουργία Ευρετηρίων create table student (ID varchar (5), name varchar (20) not null, dept_name varchar (20), tot_cred numeric (3,0) default 0, primary key (ID)) create index studentname_index on student(name) Τα ευρετήρια είναι δομές δεδομένων που χρησιμοποιούνται για την επιτάχυνση της πρόσβασης σε αρχεία με καθορισμένες τιμές για τα χαρακτηριστικά ευρετηρίου e.g. select * from student where name like TS% Μπορεί να εκτελεστεί με χρήση του ευρετηρίου για να βρούμε τις απαραίτητες γραμμές, χωρίς να προσπελάσουμε όλες τις εγγραφές της σχέσης student 4.32

Τύποι Μεγάλων Αντικειμένων Μεγάλα αντικείμενα (photos, videos, αρχεία CAD files, κλπ) αποθηκεύονται σαν τύπος large object: blob: binary large object -- είναι μια μεγάλη συλλογή μη ερμηνευμένων δυαδικών δεδομένων (η ερμηνεία των οποίων αφήνεται σε εφαρμογή εκτός του συστήματος βάσης δεδομένων) clob: character large object -- είναι μια μεγάλη συλλογή δεδομένων χαρακτήρα Όταν ένα ερώτημα επιστρέφει ένα μεγάλο αντικείμενο, επιστρέφεται ένας δείκτης αντί του ίδιου του μεγάλου αντικειμένου. 4.33

Εξουσιοδότηση Τύποι εξουσιοδότησης σε μέρη της βάσης: Read επιτρέπει ανάγνωση αλλά όχι αλλαγή στα δεδομένα Insert επιτρέπει εισαγωγή νέων δεδομένων αλλά όχι αλλαγή στα υπάρχοντα δεδομένα Update - επιτρέπει αλλαγή αλλά όχι διαγραφή δεδομένων Delete επιτρέπει διαγραφή δεδομένων. Τύποι εξουσιοδότησης στο σχήμα της βάσης: Index επιτρέπει δημιουργία και διαγραφή ευρετηρίων. Resources - επιτρέπει δημιουργία νέων σχέσεων. Alteration επιτρέπει πρoσθήκη και διαγραφή στηλών από σχέση Drop επιτρέπει διαγραφή σχέσης. 4.34

Εξουσιοδοτήσεις στην SQL Η εντολή grant μεταφέρει την εξουσιοδότηση: grant <privilege list> on <relation name or view name> to <user list> Το <user list> είναι: ένα user-id public, που δίνει σε όλους τους χρήστες το προνόμιο της εντολής Ένας ρόλος (role) Η παροχή ενός προνομίου σε μια όψη δεν συνεπάγεται τη χορήγηση οποιωνδήποτε προνομίων στις υποκείμενες σχέσεις Ο παραχωρητής του προνομίου πρέπει να έχει ήδη το προνόμιο στο συγκεκριμένο στοιχείο (ή να είναι ο διαχειριστής της βάσης δεδομένων). 4.35

Προνόμια (Privileges) στην SQL select: επιτρέπει προσπέλαση για διάβασμα σε μία σχέση Παράδειγμα: δίνουμε στους χρήστες U 1, U 2, and U 3 select προνόμιο στη σχέση branch: grant select on branch to U 1, U 2, U 3 insert: Δυνατότητα για εισαγωγή εγγραφών update: Δυνατότητα για ενημέρωση χρησιμοποιώντας SQL update εντολές delete: Δυνατότητα για διαγραφή εγγραφών all privileges: Δυνατότητα όλων των επιτρεπτών προνομίων 4.36

Ανακαλώντας προνόμια στην SQL Η εντολή revoke χρησιμοποιείται για να ανακαλέσει προνόμια. revoke <privilege list> on <relation name or view name> from <user list> Παράδειγμα: revoke select on branch from U 1, U 2, U 3 <privilege-list> μπορεί να είναι η δεσμευμένη λέξη all. Αν το ίδιο προνόμιο έχει δοθεί εις διπλούν στον ίδιο user από διαφορετικούς grantees, ο χρήστης διατηρεί το προνόμιο μετά την ανάκληση. Όλα τα προνόμια που παράγονται από το ανακληθέν προνόμιο, ανακαλούνται και αυτά επίσης. 4.37

Ρόλοι create role instructor; grant instructor to Amit; Τα προνόμια μπορούν να χορηγηθούν σε ρόλους: grant select on takes to instructor; Ρόλοι χορηγούνται σε χρήστες αλλά και σε άλλους ρόλους create role teaching_assistant grant teaching_assistant to instructor; Ο ρόλος Instructor κληρονομεί όλα τα προνόμια του teaching_assistant Αλυσσίδα ρόλων create role dean; grant instructor to dean; grant dean to Satoshi; 4.38

Εξουσιοδοτήσεις σε Προβολές create view geo_instructor as (select * from instructor where dept_name = Geology ); grant select on geo_instructor to geo_staff Έστω ότι ένα μέλος του geo_staff τρέχει την ακόλουθη εντολή select * from geo_instructor; Τι θα συμβέι εάν Ο geo_staff δεν έχει δικαιώματα στην instructor? Ο δημιουργός της όψης δεν έιχε κάποια δικαιώματα στη σχέση instructor? 4.39

End of Chapter 4 Database System Concepts, 6 th Ed. See www.db-book.com for conditions on re-use

Σύνδεση σχέσεων Σύνολα δεδομένων για τα παραδείγματα Σχέση loan loan-number L-170 L-230 L-260 Σχέση borrower customer-name branch-name Downtown Redwood Perryridge loan-number amount 3000 4000 1700 Jones Smith Hayes L-170 L-230 L-155 Σημείωση: Λείπει πληροφορία στη σχέση borrower για το L-260 και στη σχέση loan για το L-155 ΒΔ Ι : SQL 41

Σύνδεση σχέσεων Παραδείγματα (1) loan inner join borrower on loan.loan-number = borrower.loan-number loan-number branch-name amount customer-name loan-number L-170 Downtown 3000 Jones L-170 L-230 Redwood 4000 Smith L-230 loan left inner join borrower on loan.loan-number = borrower.loan-number loan-number branch-name amount customer-name loan-number L-170 Downtown 3000 Jones L-170 L-230 Redwood 4000 Smith L-230 L-260 Perryridge 1700 null null ΒΔ Ι : SQL 42

Σύνδεση σχέσεων Παραδείγματα (2) loan natural inner join borrower loan-number branch-name amount customer-name L-170 Downtown 3000 Jones L-230 Redwood 4000 Smith loan natural right outer join borrower loan-number branch-name amount customer-name L-170 Downtown 3000 Jones L-230 Redwood 4000 Smith L-155 null null Hayes ΒΔ Ι : SQL 43

Σύνδεση σχέσεων Παραδείγματα (3) loan full outer join borrower using (loan-number) loan-number branch-name amount customer-name L-170 Downtown 3000 Jones L-230 Redwood 4000 Smith L-260 L-155 Perryridge null 1700 null null Hayes Παράδειγμα:Βρείτε όλους τους πελάτες που είτε έχουν ένα λογαριασμό είτε έχουν πάρει ένα δάνειο (αλλά όχι και τα δυο) στην / από την τράπεζα. select customer-name from (depositor natural full outer join borrower) where account-number is null or loan-number is null ΒΔ Ι : SQL 44