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

άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Βάσεις ΔεδομένωνΕνότητα 6: Γλώσσα Structured Query Language -SQL

Πασχαλίδης Δημοσθένης

Τμήμα Ιερατικών σπουδών

Page 2: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Άδειες Χρήσης

• Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

• Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

2

Page 3: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Χρηματοδότηση• Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια

του εκπαιδευτικού έργου του διδάσκοντα.

• Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού.

• Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

3

Page 4: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Σκοποί ενότητας

• Ο σκοπός αυτής της ενότητας είναι η γνωριμία του φοιτητή με τις βασικές αρχές και λειτουργίες της γλώσσας SQL ώστε να μπορεί να κατανοήσει τον τρόπο χειρισμού και τις δυνατότητες της γλώσσας.

Πιο Συγκεκριμένα:• να γνωρίζουμε τα μέρη και τις βασικές εντολές της γλώσσας SQL,• να μπορούμε να δημιουργήσουμε και να μεταβάλουμε με τις εντολές

της SQL το σχήμα μιας ΒΔ,• να μπορούμε να συντάσσουμε εντολές της SQL που αντιστοιχούν σε

ερωτήσεις διατυπωμένες σε φυσική γλώσσα και αφορούν τα δεδομένα της ΒΔ.

• να μπορούμε, μέσω των εντολών της SQL, να μεταβάλλουμε τα δεδομένα της ΒΔ.

4

Page 5: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Περιεχόμενα ενότητας

• Ιστορική εξέλιξη της γλώσσας.

• Τύποι δεδομένων.

• Δημιουργία πίνακα.

• Τροποποίηση – διαγραφή πίνακα.

• Ακεραιότητα αναφορών.

• Δημιουργία και χρήση όψεων.

5

Page 6: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Εισαγωγή 1/2

• Η ανάπτυξη και διαχείριση μιας βάσης δεδομένων επιτυγχάνεται (και) με τη βοήθεια ειδικών γλωσσών προγραμματισμού, οι οποίες ονομάζονται γλώσσες ερωταπαντήσεων (query languages).

• Είναι γλώσσες μη διαδικαστικές, τέταρτης γενιάς, στις οποίες δεν απαιτείται να οριστεί η διαδικασία πρόσβασης στη βάση δεδομένων.

• Ο χρήστης απλώς διατυπώνει τις απαιτήσεις με απλές εντολές και το ΣΔΒΔ αναλαμβάνει να τις ικανοποιήσει.

• Η SQL (Structured Query Language) είναι η περισσότερο διαδεδομένη γλώσσα ανάπτυξης και διαχείρισης σχεσιακών βάσεων δεδομένων.

6

Page 7: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Εισαγωγή 2/2

Βασίζεται στο πρότυπο ANSI/ISO SQL-92 και χρησιμοποιείται από την πλειονότητα των εμπορικών συστημάτων διαχείρισης βάσεων δεδομένων.

Αρκετά όμως από αυτά τα συστήματα δεν υλοποιούν στο ακέραιο το πρότυπο της SQL-92 και σε ορισμένα σημεία δημιουργούν τις δικές τους επεκτάσεις.

Το νέο βιομηχανικό πρότυπο της SQL, η έκδοση SQL-3 που ονομάζεται και SQL-99, περιέχει νέες εντολές, και μπορεί να χρησιμοποιηθεί και σε αντικειμενοστραφή (object oriented) συστήματα.

7

Page 8: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Εξέλιξη της SQLΠίνακας 1. Εξέλιξη της SQL, πηγή: Διδάσκων (2015).

8

Page 9: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Γενικά για την SQL 1/2

Όπως κάθε γλώσσα προγραμματισμού, έτσι και η SQL αποτελείται από τις εντολές με τα ορίσματά τους τις οποίες χρησιμοποιεί ο χρήστης (προγραμματιστής) με καθορισμένους κανόνες σύνταξης, για να δημιουργήσει το πρόγραμμα του.Η SQL χρησιμοποιείται για να εξυπηρετήσει κάποιον από τους εξής σκοπούς:• τον ορισμό της δομής της βάσης δεδομένων,• τη μεταβολή του περιεχομένου της βάσης δεδομένων,• τον καθορισμό περιορισμών ακεραιότητας και• την αναζήτηση δεδομένων στη βάση.

9

Page 10: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Γενικά για την SQL 2/2

Για την υλοποίηση των χρήσεων, η SQL διαθέτει τα εξής:Τη Γλώσσα Ορισμού Δεδομένων (Data Definition Language, DDL) που περιέχει τις εντολές για τον ορισμό και τη μεταβολή του σχεσιακού σχήματος, για τη δημιουργία και τη διαγραφή πινάκων. Επίσης, στη DDL της SQL ανήκουν και οι εντολές δημιουργίας όψεων (views) και ορισμού περιορισμών ακεραιότητας.Τη Γλώσσα Χειρισμού Δεδομένων (Data Manipulation Language, DML) που περιέχει τις εντολές ανάκλησης των δεδομένων και τις εντολές ενημέρωσης της ΒΔ οι οποίες αφορούν την εισαγωγή, διαγραφή και ενημέρωση των πλειάδων στους πίνακες.Τέλος, περιέχει εντολές για τον ορισμό και την επεξεργασία συναλλαγών (transactions).

10

Page 11: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τύποι δεδομένων της SQL για τα πεδία ενός πίνακα 1/2

• char(n): δηλώνει ένα αλφαριθμητικό (string) με σταθερό μήκος από n χαρακτήρες.

• varchar(n): δηλώνει ένα αλφαριθμητικό με μεταβλητό μήκος, με μέγιστο αριθμό χαρακτήρων η.

• int: δηλώνει ακέραιο αριθμό με ακρίβεια καθορισμένη από το σύστημα (machine-dependent).

• smallint: δηλώνει ένα μικρό ακέραιο αριθμό με ακρίβεια καθορισμένη από το σύστημα.

• Numeric(p,d): δηλώνει αριθμό με p συνολικά ψηφία, από τα οποία d είναι δεκαδικά. Για παράδειγμα, η δήλωση numeric(4,2) είναι έγκυρη για τον αριθμό 24.18 αλλά όχι για τον 365.11888.

11

Page 12: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τύποι δεδομένων της SQL για τα πεδία ενός πίνακα 2/2

• real, double precision: δηλώνουν έναν αριθμό κινητής υποδιαστολής, απλής και διπλής ακρίβειας αντίστοιχα. Η ακρίβεια είναι καθορισμένη από το σύστημα.

• float(n): δηλώνει έναν αριθμό κινητής υποδιαστολής με ακρίβεια n ψηφίων.

• date: δηλώνει την ημερομηνία που περιέχει το έτος (4 ψηφία), το μήνα και την ημέρα.

• time: δηλώνει το χρόνο και περιέχει την ώρα, τα λεπτά και τα δευτερόλεπτα.

12

Page 13: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τύποι δεδομένων της SQL 1/2

• Η ακρίβεια ορισμένων τύπων είναι καθορισμένη από το σύστημα, διότι αυτή εξαρτάται από το αν το σύστημα είναι των32 ή των 64 bit, κάτι που μεταβάλει τη μέγιστη δυνατή τιμή των τύπων.

• Σύγκριση και πράξη μεταξύ τιμών επιτρέπεται, μόνο αν αυτές ανήκουν σε συμβατούς τύπους. Ειδικότερα, για τους αριθμητικούς τύπους γίνεται αυτόματα μετατροπή (casting). Για παράδειγμα, κατά την πρόσθεση ενός ακέραιου και ενός πραγματικού αριθμού κινητής υποδιαστολής ο ακέραιος μετατρέπεται σε πραγματικό και το αποτέλεσμα είναι πραγματικός αριθμός. Η διαδικασία της μετατροπής χρησιμοποιείται και από τις γλώσσες προγραμματισμού.

13

Page 14: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τύποι δεδομένων της SQL 2/2

Η τιμή null ανήκει σε όλα τα προηγούμενα πεδία τιμών. Όμως, σε ορισμένες περιπτώσεις δεν έχει νόημα μία τιμή null για ένα πεδίο. Για παράδειγμα, έστω ότι κατά την εισαγωγή των στοιχείων ενός σχολείου δίνεται η τιμή null στο πεδίο ΌνομαΣχολείου'.

Αυτό στις περισσότερες περιπτώσεις δεν είναι επιθυμητό. Για το λόγο αυτό, η SQL περιέχει τον όρο not null για τη ρητή δήλωση ότι σε ένα πεδίο δεν επιτρέπεται η εισαγωγή της null τιμής.

14

Page 15: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Γλώσσα Ορισμού Δεδομένων (Data Definition Language, DDL)

• Η γλώσσα ορισμού δεδομένων περιέχει τις εντολές που αφορούν τη δημιουργία της βάσης και την τροποποίησή της. Βέβαια, η αρχική δημιουργία της βάσης γίνεται συνήθως με εντολή εκτός SQL και έχει ιδιαίτερα χαρακτηριστικά για κάθε Σύστημα διαχείρησης βάσης δεδομένων (ΣΔΒΔ). Μετά την αρχική δημιουργία της ΒΔ πρέπει να συνεχίζουμε, όπως είναι φυσικό, με τη δημιουργία των πινάκων και των συνδέσεών τους που συνιστούν το σχήμα της βάσης στο φυσικό επίπεδο.

• Όλα πλέον τα ΣΔΒΔ προσφέρουν ισχυρά εργαλεία στο γραφικό τους περιβάλλον για αυτή την εργασία. Όμως, είναι πολύ σημαντικό και πολύ χρήσιμο στον προγραμματιστή να γνωρίζει πώς μπορεί να δημιουργήσει το σχήμα μιας βάσης με τη SQL.

15

Page 16: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Δημιουργία πίνακα 1/5Το σχήμα της σχεσιακής βάσης ορίζεται από τους πίνακες που περιέχει. Η δημιουργία ενός πίνακα γίνεται με την εντολή create table. Για παράδειγμα:Η εντολή της SQL για τη δημιουργία του πίνακα ΣΧΟΛΕΙΟ είναι:

16

Page 17: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Δημιουργία πίνακα 2/5

• Μέσα σε παρενθέσεις δίνεται η λίστα με τα πεδία του πίνακα και τα πεδία τιμών τους, χωρισμένα με κόμμα. Όπου είναι απαραίτητο, υπάρχει η δήλωση not null.

• Ο πίνακας ΣΧΟΛΕΙΟ έχει για κύριο κλειδί (primary key) το πεδίο ΚωδΣχολείου. Αν το κύριο κλειδί είναι σύνθετο, τότε αυτά δηλώνονται μέσα στην παρένθεση, χωρισμένα με κόμμα. Οι τιμές του κύριου κλειδιού σε κάθε πλειάδα δεν πρέπει να είναι null και πρέπει να είναι μοναδικές.

17

Page 18: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Δημιουργία πίνακα 3/5

• Όταν εισάγεται μία νέα τιμή σε μία πλειάδα στο πεδίο (ή σε συνδυασμό πεδίων) που είναι κύριο κλειδί, αν υπάρχει άλλη πλειάδα με την ίδια τιμή σ' αυτό το πεδίο ή αν η τιμή που θα εισαχθεί είναι η null, τότε το σύστημα προειδοποιεί με μήνυμα λάθους.

• Αν και η δήλωση ενός πεδίου (ή συνδυασμού πεδίων) ως κύριου κλειδιού με τον όρο primary key υποδηλώνει αυτόματα ότι στο πεδίο αυτό δεν επιτρέπεται η εισαγωγή της τιμής null, ο όρος not null χρησιμοποιείται για να δηλώσει ρητά αυτή την ιδιότητα του πεδίου.

18

Page 19: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Δημιουργία πίνακα 4/5

• Ο όρος check χρησιμοποιείται για να δηλώσει μία συνθήκη για τις τιμές ενός πεδίου. Στο προηγούμενο παράδειγμα χρησιμοποιήθηκε για να ελεγχθεί ότι οι τιμές του πεδίου 'ΚωδΣχολείου' είναι μεγαλύτερες από μία προκαθορισμένη τιμή. Ο έλεγχος γίνεται κάθε φορά που εισάγεται ή μεταβάλλεται η τιμή του αντίστοιχου πεδίου σε μία πλειάδα.

19

Page 20: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Δημιουργία πίνακα 5/5

Ένα άλλο παράδειγμα χρήσης του όρου check, που συναντάται συχνά στην πράξη, είναι κατά τον έλεγχο μίας τιμής για το αν ανήκει σε μία προεπιλεγμένη λίστα τιμών. Έστω ότι τα σχολεία που θα περιέχονται στον πίνακα ΣΧΟΛΕΙΟ θα ανήκουν σε μία από τις δύο Δ/νσεις Β/θμιας Εκπαίδευσης της Θεσ/νίκης. Σ' αυτή την περίπτωση, το πεδίο 'ΔνσηΒθμιας' θα πρέπει να είναι αλφαριθμητικό που να μπορεί να πάρει τις τιμές Ά'Θεσ/νίκης', ή 'Β'Θεσ/νίκης'. Αυτός ο έλεγχος γίνεται ως εξής:

check (ΟνομΒθμιας in ('Α'Θεσ/νίκης', 'Β'Θεσ/νίκης')).

20

Page 21: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τροποποίηση πίνακα

Για την προσθήκη ή διαγραφή πεδίων από έναν πίνακα υπάρχει η εντολή alter table.Για την προσθήκη ενός πεδίου 'Νομός' στον πίνακα ΣΧΟΛΕΙΟ η εντολή SQL είναι:Alter table ΣΧΟΛΕΙΟ add (Νομός char(50));Οι τιμές του πεδίου 'Νομός' είναι αρχικά null για όλες τις πλειάδες.Η αντίστοιχη εντολή για τη διαγραφή του πεδίου Νομός είναι:Alter table ΣΧΟΛΕΙΟ drop Νομός;

21

Page 22: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Διαγραφή πίνακα 1/2

Για τη διαγραφή ενός πίνακα από τη βάση δεδομένων υπάρχει η εντολή drop table.

Η διαγραφή του πίνακα ΣΧΟΛΕΙΟ γίνεται ως εξής:

Drop table ΣΧΟΛΕΙΟ;

22

Page 23: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Διαγραφή πίνακα 2/2

• Είναι σημαντικό να σημειωθεί ότι η εντολή αυτή διαγράφει όλες τις πλειάδες του πίνακα αλλά και τον ίδιο τον πίνακα. Έτσι, στη συνέχεια δεν είναι δυνατή η αναφορά στο συγκεκριμένο πίνακα, για παράδειγμα, στην εισαγωγή πλειάδων. Αντιθέτως, η εντολή delete from ΣΧΟΛΕΙΟ, που θα αναφερθεί αργότερα, θα διαγράψει όλες τις πλειάδες αλλά όχι τον πίνακα.

23

Page 24: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών

• Ακεραιότητα αναφορών είναι η ιδιότητα βάσει της οποίας οι τιμές που εμφανίζονται για ορισμένα πεδία σε έναν πίνακα, εμφανίζονται και σε αντίστοιχα πεδία σε άλλο πίνακα.

24

Page 25: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 1/14

Για παράδειγμα, δίνονται οι πίνακες ΤΑΞΗ και ΜΟΥΣΕΙΟ και η μεταξύ τους συσχέτιση η οποία υλοποιείται με τον πίνακα ΕΠΙΣΚΕΨΗ. Το κύριο κλειδί του πίνακα ΤΑΞΗ είναι ο συνδυασμός των πεδίων 'ΚωδΣχολείου, ΟνομΤάξης, ΣχολΕτος', ενώ το κύριο κλειδί του πίνακα ΜΟΥΣΕΙΟ είναι το πεδίο ΌνομΜουσείου'. Ο πίνακας ΕΠΙΣΚΕΨΗ έχει και αυτός τα πεδία 'ΚωδΣχολείου, ΟνομΤάξης, ΣχολΈτος, ΟνομΜουσείου' τα οποία υλοποιούν τη συσχέτιση μεταξύ των δύο πινάκων ΤΑΞΗ και ΜΟΥΣΕΙΟ.

Ο πίνακας ΕΠΙΣΚΕΨΗ έχει και ένα επιπλέον πεδίο: ΗμερομΕπίσκεψης.

25

Page 26: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 2/14

Σχήμα 2. Ακεραιότητα αναφορών 2/14, πηγή: Διδάσκων (2015).

26

Page 27: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 3/14

• Κατά τη διαγραφή μιας πλειάδας από τον πίνακα ΜΟΥΣΕΙΟ διαγράφεται και η τιμή του πεδίου ΟνομΜουσείου από την αντίστοιχη πλειάδα. Όμως, ο πίνακας ΕΠΙΣΚΕΨΗ θα συνεχίσει να περιέχει τη συγκεκριμένη τιμή για το όνομα μουσείου που διαγράφηκε από τον πίνακα ΜΟΥΣΕΙΟ (δηλαδή συνεχίζει να υπάρχει μόνο στον πίνακα ΕΠΙΣΚΕΨΗ).

27

Page 28: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 4/14

• Επομένως, για τις αντίστοιχες επισκέψεις δε θα αντιστοιχεί κανένα μουσείο. Η ίδια κατάσταση προκύπτει και μετά από μεταβολή της τιμής του πεδίου ΌνομΜουσείου' σε κάποια πλειάδα του πίνακα ΜΟΥΣΕΙΟ. Η νέα τιμή δε θα υπάρχει στο αντίστοιχο πεδίο του πίνακα ΕΠΙΣΚΕΨΗ. Αυτή η κατάσταση στην οποία περιέρχεται η βάση δεδομένων δεν είναι επιθυμητή, επειδή αφήνει εκκρεμή και μη έγκυρα δεδομένα σε ορισμένους πίνακες μετά από διαγραφή πλειάδων από άλλες.

28

Page 29: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 5/14

• Για να αποφεύγουμε την προηγούμενη κατάσταση, χρησιμοποιούμε την έννοια του ξένου κλειδιού. Έτσι, στον πίνακα ΕΠΙΣΚΕΨΗ το πεδίο ΌνομΜουσείου' είναι ξένο κλειδί και αναφέρεται στο αντίστοιχο πεδίο στον πίνακα ΜΟΥΣΕΙΟ, που είναι κύριο κλειδί. Επίσης, ο συνδυασμός πεδίων 'ΚωδΣχολείου, ΟνομΤάξης ΣχολΕτος' του πίνακα ΕΠΙΣΚΕΨΗ είναι ξένο κλειδί που αναφέρεται στο αντίστοιχο κύριο κλειδί του πίνακα ΤΑΞΗ.

• Προβλήματα ακεραιότητας μετά από διαγραφή και ενημέρωση πλειάδων παρατηρούνται μόνο μετά από διαγραφή ή ενημέρωση πεδίων στα οποία αναφέρονται τα ξένα κλειδιά. Επομένως, με τη δήλωση της αναφοράς, το σύστημα διαχείρισης της βάσης δεδομένων μπορεί να αντιμετωπίσει το πρόβλημα αποτρέποντας με αυτό τον τρόπο την παραβίαση της ακεραιότητας.

29

Page 30: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 6/14

Η δήλωση ενός ξένου κλειδιού και της αναφοράς του γίνεται κατά τη δημιουργία του πίνακα με τους όρους:

foreign key

και

references

30

Page 31: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 7/14Για τον πίνακα ΕΠΙΣΚΕΨΗ του προηγούμενου παραδείγματος είναι:

31

Page 32: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 8/14

• Όπως φαίνεται στο παράδειγμα, ο όρος foreign key περιέχει το πεδίο που αποτελεί το ξένο κλειδί και ο όρος references τον πίνακα στον οποίο αυτό αναφέρεται. Κατά την παραβίαση της ακεραιότητας αναφοράς μεταξύ δύο πινάκων, το σύστημα εξ ορισμού αποτρέπει την ενέργεια. Επομένως, μία διαγραφή πλειάδας από τον πίνακα ΜΟΥΣΕΙΟ δεν γίνεται δυνατή, διότι παραβιάζει την ακεραιότητα αναφοράς του πίνακα ΕΠΙΣΚΕΨΗ.

32

Page 33: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 9/14

Σε αρκετές περιπτώσεις δημιουργείται πρακτικά η ανάγκη να μας δίνεται η δυνατότητα διαγραφής μίας πλειάδας από τον πίνακα ΜΟΥΣΕΙΟ, ή να είναι δυνατή η αλλαγή στην ονομασία ενός μουσείου.

Αυτό μπορεί να γίνει, αν μετά από μία ενέργεια διαγραφής ή ενημέρωσης σε κάποιο αρχικό πίνακα γίνει το αντίστοιχο σε όλους τους πίνακες που έχουν ξένα κλειδιά τα οποία αναφέρονται στον αρχικό αυτόν πίνακα. Αυτός ο τρόπος χειρισμού δηλώνεται με τους όρους on delete cascade και on update cascade, όπως φαίνεται στο παρακάτω παράδειγμα.

33

Page 34: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 10/14

34

Page 35: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 11/14

• Η διαγραφή μίας πλειάδας από τον πίνακα ΜΟΥΣΕΙΟ θα έχει ως αποτέλεσμα τη διαγραφή και από τον πίνακα ΕΠΙΣΚΕΨΗ των πλειάδων με την αντίστοιχη τιμή στο πεδίο Ονομ_Μουσείου, δηλαδή τη διαγραφή των αντίστοιχων επισκέψεων για τις οποίες δεν υπάρχει μουσείο.

35

Page 36: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 12/14

Σχήμα 3. Ακεραιότητα αναφορών 12/14, πηγή: Διδάσκων (2015).

36

Page 37: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 13/14

• Εκτός από το γεγονός ότι η ενέργεια που γίνεται σε έναν πίνακα μεταβιβάζεται και σε όλους τους πίνακες που αναφέρονται σ' αυτόν, ο χειρισμός μίας παραβίασης ακεραιότητας μπορεί να γίνει και με άλλους τρόπους, όπως με το να τεθεί η τιμή του πεδίου του οποίου παραβιάζεται η ακεραιότητα ίση με null ή ίση με μία εξ ορισμού τιμή.

37

Page 38: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Ακεραιότητα αναφορών 14/14

Στο προηγούμενο παράδειγμα η διαγραφή ενός μουσείου θα μπορούσε να έχει ως αποτέλεσμα να παραμείνουν αποθηκευμένες, στον πίνακα ΕΠΙΣΚΕΨΗ οι επισκέψεις σ' αυτό το μουσείο, αλλά το αντίστοιχο πεδίο ΌνομΜουσείου' να πάρει την τιμή null, δείχνοντας ότι δεν υπάρχει μουσείο.

Ο τρόπος χειρισμού της παραβίασης της ακεραιότητας αναφοράς εξαρτάται από τη συγκεκριμένη εφαρμογή και λαμβάνεται υπόψη κατά τη δημιουργία του σχήματος της βάσης δεδομένων.

38

Page 39: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις 1/2 • Για όλα τα προηγούμενα παραδείγματα ίσχυε η υπόθεση

ότι όλοι οι πίνακες ανήκουν στο λογικό μοντέλο της βάσης δεδομένων και ότι βρίσκονται αποθηκευμένες σ' αυτή. Δηλαδή, χρησιμοποιήθηκαν πίνακες οι οποίοι δημιουργήθηκαν με την εντολή create table. Αυτοί οι πίνακες ονομάζονται βασικοί πίνακες.

• Για λόγους ασφάλειας των δεδομένων είναι χρήσιμη η απόκρυψη ορισμένων πεδίων από τους χρήστες. Επίσης, για λόγους διευκόλυνσης και καλύτερης κατανόησης των περιεχομένων της βάσης δεδομένων είναι επιθυμητό οι χρήστες να μπορούν να δουν τους πίνακες με βάση τα δικά τους κριτήρια.

39

Page 40: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις 2/2

Για την ένταξη τέτοιου είδους πινάκων στη βάση δεδομένων χρησιμοποιούνται οι όψεις.

Όψη (view) είναι κάθε πίνακας της βάσης δεδομένων που δεν ανήκει στο λογικό μοντέλο (δεν δημιουργήθηκε με μία εντολή create table). Επομένως, οι όψεις προσφέρουν εναλλακτικούς τρόπους, για να βλέπουν οι χρήστες τους πίνακες μίας βάσης δεδομένων.

Για το σχηματισμό μίας όψης χρησιμοποιείται η εντολή.

create view as

40

Page 41: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις 1/3

• Είναι επιθυμητό το πεδίο 'ΜαθητέςΤάξης' στον πίνακα ΤΑΞΗ να είναι ορατό μόνο από τον υπεύθυνο καθηγητή της τάξης. Ένας πίνακας που δεν περιέχει το πεδίο 'ΜαθητέςΤάξης' μπορεί να προκύψει με την πράξη της προβολής (projection) στον πίνακα ΤΑΞΗ.

• Επίσης, στο διευθυντή του σχολείου θα είναι χρήσιμο να βλέπει έναν πίνακα που να περιέχει το μέσο όρο μαθητών ανά τάξη. Όπως θα αναφερθεί στη συνέχεια, αυτός ο πίνακας μπορεί να προκύψει ως αποτέλεσμα ενός ερωτήματος ομαδοποίησης. Για το διευθυντή του σχολείου όμως θα ήταν επιθυμητό να εμφανίζεται αυτός ο πίνακας ως βασικό μέρος της βάσης δεδομένων.

41

Page 42: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις 2/3Έστω ότι θέλουμε το σχηματισμό μίας όψης με όνομα ΤΑΞΗ_V1 για την απόκρυψη του πεδίου 'Μαθητές_Τάξης' από τον πίνακα ΤΑΞΗ.

Η αντίστοιχη εντολή είναι:

Μετά τον όρο as δίνεται μέσα σε παρενθέσεις η εντολή SQL της οποίας ο πίνακας - αποτέλεσμα θα αποτελέσει την όψη.

42

Page 43: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις 3/3

Έστω ότι θέλουμε τη δημιουργία όψης με το όνομα TAΞH_V2 η οποία θα περιέχει το μέσο όρο μαθητών ανά τάξη για κάθε σχολείο.

Αυτό γίνεται με την εξής εντολή (χρησιμοποιώντας την αντίστοιχη εντολή ομαδοποίησης):

Create view TAΞH_V2 as

( Select ΚωδΣχολείου, avg (ΜαθητέςΤάξης)

From ΤΑΞΗ;)

43

Page 44: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Όψεις (διαγραφή)

Τέλος, μια όψη διαγράφεται με την εντολή drop view.

Η διαγραφή της όψης TAΞH_V2 γίνεται με την εντολή:

Drop view TAΞH_V2;

Με τις όψεις παριστάνεται το εξωτερικό επίπεδο της βάσης δεδομένων.

44

Page 45: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Βιβλιογραφία

• Ταμπακάς, Β.Τ. (2009) Εισαγωγή στις Βάσεις Δεδομένων, Εκδότης ΒΑΣΙΛΕΙΟΣ ΤΑΜΠΑΚΑΣ, ISBN: 978-960-931217-2.

• Βάσεις δεδομένων. Ζαχαρής Κωνσταντίνος, Κουνιάκης Χριστόφορος, Οικονόμου Θεόδωρος, Κασιμάτης Νικόλαος, Μανωλόπουλος, Ιωάννης. Αθήνα: ΙΤΥΕ Διόφαντος, Τομέας Πληροφορικής - Δικτύων Η/Υ.Διαθέσιμο διαδικτυακά: http://ebooks.edu.gr/new/books-pdf.php?course=DSEPAL-B140.

45

Page 46: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Τέλος Ενότητας

Page 47: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Σημείωμα Αναφοράς

Copyright Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης, Δημοσθένης Πασχαλίδης. «Βάσεις Δεδομένων». Έκδοση: 1.0. Θεσσαλονίκη 2015.

47

Page 48: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Σημείωμα Αδειοδότησης

Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative CommonsΑναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων».

[1] http://creativecommons.org/licenses/by-nc-sa/4.0/

Ως Μη Εμπορική ορίζεται η χρήση:

• που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο.

• που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο.

• που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο.

Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

48

Page 49: άσις xομένφν...νικά ια νην sql 1/2 Όπως κάθε γλώσσα προγραμματισμού, έτσι και η sql αποτελείται από τις εντολές

Διατήρηση Σημειωμάτων

Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει:

το Σημείωμα Αναφοράς.

το Σημείωμα Αδειοδότησης.

τη δήλωση Διατήρησης Σημειωμάτων.

το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει).

μαζί με τους συνοδευόμενους υπερσυνδέσμους.

49