Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης varlamis@hua.gr



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

Τα δεδοµένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο Για να επεξεργαστούµε τα δεδοµένα θα πρέπει αυτά να βρίσκονται στη

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

PL/SQL. Κώστας Στεφανίδης

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

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

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. Επίπεδα Αφαίρεσης Σ Β. Αποθήκευση Εγγραφών - Ευρετήρια. ρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, Επίπεδο Όψεων.

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

Βάσεις δεδομένων. Ηρακλής Βαρλάμης

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

Εργαστήριο βάσεων δεδομένων. MySQL Stored Procedures

MySQL stored procedures

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

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

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

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

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

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

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

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

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

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

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

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

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

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

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Επεξεργασία Ερωτήσεων

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

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

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

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

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

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Ευρετήρια. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια. Ευρετήρια. Ευρετήρια

Ευρετήρια. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια. Ευρετήρια. Ευρετήρια

ΖΗΤΗΜΑ 1 Ο : (Μονάδες 3) Να χαρακτηριστούν οι παρακάτω προτάσεις ως σωστές ή εσφαλμένες :

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ)

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

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

Επεξεργασία Ερωτήσεων

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

Ευρετήρια. Το ευρετήριο αρχείου είναι ένα διατεταγµένο αρχείο µε σταθερού µήκους εγγραφές

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

Επεξεργασία Ερωτήσεων

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

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

Κεφάλαιο 12 Υλοποίηση Stored Procedures, Χρήση Ευρετηρίων

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

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

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

Το εσωτερικό ενός Σ Β

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

Ευρετήρια. Ευρετήρια. Βάσεις εδοµένων :ευρετήρια 1

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαβλος, Επιμέλεια Μ.Χατζόπουλος Διαφάνεια 14-1

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

Προσοµοίωση τροχιάς σε Oracle Spatial 8i DBMS

Επεξεργασία Ερωτήσεων

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρα 1. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια.

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Έχουµε την βάση της σχολής που αποτελείται από τους παρακάτω πίνακες.

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

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

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

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

Αποθήκευση και Οργάνωση αρχείων. Βάσεις Δεδομένων Μάθημα 2ο Διδάσκων: Μαρία Χαλκίδη

Εισαγωγή στην. Εισαγωγή Σ Β. Αρχεία ευρετηρίου Κατάλογος. συστήματος. Αρχεία δεδομένων

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

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

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

Φροντιστήριο Αποθήκευση σε δίσκο, βασικές οργανώσεις αρχείων κατακερματισμός και δομές ευρετηρίων για αρχεία

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

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

DELETE, UPDATE, INSERT.

Τα δεδομένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο

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

DELETE, UPDATE, INSERT

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Βάσεις δεδομένων. (8 ο μάθημα) Ηρακλής Βαρλάμης

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

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

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

Ευρετήρια. Το ευρετήριο αρχείου είναι ένα διατεταγµένο αρχείο µε σταθερού µήκους εγγραφές

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

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

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

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

Κεφάλαιο 14. Δομές Ευρετηρίων για Αρχεία. Copyright 2007 Ramez Elmasri and Shamkant B. Navathe Ελληνική Έκδοση,

Επεξεργασία ερωτημάτων

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

Ανάκτηση Δεδομένων (Information Retrieval)

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

Transcript:

Βάσεις δεδομένων (10 ο μάθημα) Ηρακλής Βαρλάμης varlamis@hua.gr

Περιεχόμενα Ευρετήρια Σκανδάλες PL/SQL Δείκτες/Δρομείς 2

Αποθήκευση δεδομένων Πρωτεύουσα αποθήκευση Κύρια μνήμη (main memory) ή κρυφή μνήμη (cache) Άμεση προσπέλαση, περιορισμένος χώρος Δευτερεύουσα αποθήκευση μαγνητικοί δίσκοι, ταινίες, δισκέτες για την επεξεργασία των δεδομένων απαιτείται η μεταφορά των δεδομένων στην πρωτεύουσα αποθήκευση πιο αργή προσπέλαση, μεγάλη χωρητικότητα, μικρότερο κόστος 3

Οργάνωση αρχείων Τα δεδομένα αποθηκεύονται σε αρχεία στο δίσκο Κάθε αρχείο χωρίζεται σε τμήματα (block) και έχει και μια επικεφαλίδα (file header) με πληροφορίες για την αρχή του κάθε block. Σε μια επερώτηση, πλειάδες (εγγραφές) ανακτώνται από τα αρχεία έρχονται στην κύρια μνήμη και επεξεργάζονται Τι γίνεται αν η κύρια μνήμη δεν επαρκεί για να αποθηκεύσει όλες τις πλειάδες; Οι πλειάδες έρχονται ομαδοποιημένες σε μονάδες block (σελίδες pages) π.χ. μια σελίδα χωρά 5 ακριβώς πλειάδες, η επερώτηση χρειάζεται 12 άρα θα ανακτηθούν 3 σελίδες από το αρχείο. Μόλις τελειώνει η επεξεργασία μιας σελίδας (πεντάδας πλειάδων) αρχίζει η επόμενη 4

Ευρετήριο - Index Βοηθητική δομή αρχείου που κάνει πιο αποδοτική την αναζήτηση μιας εγγραφής σε ένα αρχείο Καθορίζεται (συνήθως) σε ένα γνώρισμα του αρχείου που καλείται πεδίο ευρετηρίασης (indexing field) Τι αποθηκεύεται στο κανονικό αρχείο: Οι εγγραφές σε blocks στο αρχείο ευρετήριο: Η τιμή του πεδίου ευρετηρίασης και ένας δείκτης στο block της εγγραφής Κέρδος; Σε μία αναζήτηση με τιμή στο πεδίο ευρετηρίασης Δε φέρνουμε στη μνήμη όλα τα περιεχόμενα του κανονικού αρχείου - Φέρνουμε μόνο τα ζεύγη <τιμή,δείκτης> από το αρχείο ευρετήριο Με μία ανάγνωση έχουμε στη μνήμη περισσότερες πλειάδες για σύγκριση Εντοπίζουμε πιο γρήγορα τα σωστά block Ανακτούμε μόνο τα σωστά block από το κανονικό αρχείο 5

Εγγραφές ευρετηρίου Ανάλογα με τον τύπο του πεδίου ευρετηρίασης (κλειδί, πεδίο σε διάταξη, ύπαρξη διπλότυπων) έχουν και διαφορετικό τύπο Πυκνό ευρετήριο: μία καταχώρηση για κάθε εγγραφή του αρχείου Δευτερεύον ευρετήριο Αραιό ευρετήριο: μια καταχώρηση για κάθε block του αρχείου δεδομένων Πρωτεύον ευρετήριο Ευρετήριο συστάδων Κάνοντας δυαδική αναζήτηση στο ευρετήριο (γιατί το ευρετήριο είναι διατεταγμένο αρχείο!) βρίσκουμε τον δείκτη στο block όπου αποθηκεύεται η εγγραφή που θέλουμε Εφόσον βρεθεί το block ακολουθείται σειριακή αναζήτηση 6

1. Πρωτεύον ευρετήριο primary index Στο πρωτεύον κλειδί (πεδίο κλειδιού διάταξης) ενός διατεταγμένου αρχείου Το ευρετήριο είναι επίσης διατεταγμένο αρχείο με εγγραφές σταθερού μήκους (κλειδί, δείκτης σε block) Στο ευρετήριο υπάρχουν τόσες εγγραφές όσα είναι τα block στα οποία αποθηκεύεται το κανονικό αρχείο Αναγνώστου 1 Γεωργίου 2 Θεοδώρου Νικήτας Πέτρου 15 Σαρρής Ψαράς Αναγνώστου Γιώργος 33 Βασιλείου Μαρία 23 Βερόπουλου Μαρία 22 Γάκης Κώστας 31 Γεωργίου Γιώργος 42 Δημητρίου Γιάννης 22 Ζάχαρη Μαρία 24 Ηλιάδης Κώστας 51 Πέτρου Χάρης 31 Ράλλης Γιάννης 22 Ράλλη Μαρία 24 Σάββας Μάριος 22 7

Παράδειγμα Έστω ένα αρχείο με: r A = 10000 διατεταγμένες εγγραφές, σταθερού μεγέθους S A = 250 bytes, μέγεθος block S B = 1024 bytes με μη εκτεινόμενη καταχώρηση (ολόκληρες πλειάδες σε κάθε block) Σε κάθε block χωράνε S B = 4 πλειάδες S A Μέγεθος αρχείου δεδομένων S F = 10000/4=2500 blocks Κατασκευάζουμε πρωτεύον ευρετήριο (μη εκτεινόμενη καταχώρηση): Έστω ότι το μέγεθος του πεδίου κλειδιού είναι S K = 10 bytes Και το μέγεθος δείκτη block P = 6 bytes Σε κάθε block ευρετηρίου S εγγραφές B /(SK + P) = 1024/16 = 64 Μέγεθος αρχείου ευρετηρίου S I = 40 blocks 2500 / 64 = 8

Κόστος αναζήτησης Αν θεωρήσουμε ότι το αρχείο δεδομένων είναι διατεταγμένο ως προς το πεδίο αναζήτησης μπορούμε να εφαρμόσουμε δυαδική αναζήτηση Χωρίς το ευρετήριο: Θα πρέπει να φορτώσουμε log 2 (S F ) blocks = log2(2500)=11,28 12 blocks αρχείου και να συγκρίνουμε τις πλειάδες Αν υπάρχει ευρετήριο: Θα πρέπει να φορτώσουμε log 2 (S Ι ) blocks = log2(40)=5,32 6 blocks ευρετηρίου και 1 block αρχείου (αυτό που θα μας υποδείξει η αναζήτηση στο ευρετήριο Χωρίς ευρετήριο: log2(2500)=12 Με ευρετήριο: log2(40)+1=7 9

Κόστος ενημέρωσης Εισαγωγή εγγραφής Συνεπάγεται αλλαγές στο αρχείο άρα και στο ευρετήριο Οι αλλαγές μπορούν να αποθηκεύονται σε ξεχωριστό αρχείο υπερχείλισης (χωρίς διάταξη) ή σε συνδεδεμένη λίστα εγγραφών υπερχείλισης και το ευρετήριο να ενημερώνεται περιοδικά Διαγραφή εγγραφής Συνεπάγεται αλλαγές στο ευρετήριο Συνήθως αντιμετωπίζεται με σημάδια διαγραφής 10

2. Ευρετήριο συστάδων Clustering index Ορίζεται στο πεδίο διάταξης το οποίο όμως δεν είναι κλειδί Υπάρχει μια εγγραφή για κάθε διακεκριμένη τιμή του πεδίου διάταξης (συστάδας) του αρχείου που περιέχει: την τιμή αυτή ένα δείκτη προς το πρώτο block του αρχείου δεδομένων που περιέχει μια εγγραφή με την τιμή αυτή στο πεδίο συστάδας Γιάννης 1 Γιώργος 1 Κώστας 2 Μαρία 2 Μάριος 3 Χάρης 3 Δημητρίου Γιάννης 22 Ράλλης Γιάννης 22 Αναγνώστου Γιώργος 33 Γεωργίου Γιώργος 42 Γάκης Κώστας 31 Ηλιάδης Κώστας 51 Βασιλείου Μαρία 23 Βερόπουλου Μαρία 22 Ζάχαρη Μαρία 24 Ράλλη Μαρία 24 Σάββας Μάριος 22 Πέτρου Χάρης 31 11

Δημητρίου Γιάννης 22 Εναλλακτικά Ράλλης Γιάννης 22 null Αναγνώστου Γιώργος 33 Με ξεχωριστά block για κάθε ομάδα εγγραφών Γιάννης 1 Γιώργος 2 Κώστας 3 Μαρία 4 Μάριος 5 Χάρης 6 Γεωργίου Γιώργος 42 null Γάκης Κώστας 31 Ηλιάδης Κώστας 51 null Βασιλείου Μαρία 23 Βερόπουλου Μαρία 22 Ζάχαρη Μαρία 24 Ράλλη Μαρία 24 null Σάββας Μάριος 22 null Πέτρου Χάρης 31 null 12

Παράδειγμα Έστω ένα αρχείο με: r A = 10000 διατεταγμένες εγγραφές, σταθερού μεγέθους S A = 250 bytes, μέγεθος block S B = 1024 bytes με μη εκτεινόμενη καταχώρηση (ολόκληρες πλειάδες σε κάθε block) Σε κάθε block χωράνε 1024/250= 4 πλειάδες Μέγεθος αρχείου δεδομένων S F = 10000/4=2500 blocks Κατασκευάζουμε ευρετήριο συστάδων (μη εκτεινόμενη καταχώρηση): Έστω μέγεθος του πεδίου ευρετηρίασης είναι S K = 10 bytes Μέγεθος δείκτη block P = 6 bytes Και 500 διαφορετικές τιμές στο πεδίο ευρετηρίασης με ομοιόμορφη κατανομή των πλειάδων σε αυτές Σε κάθε block ευρετηρίου χωράνε όπως πριν 1024/16=64 εγγραφές Μέγεθος αρχείου ευρετηρίου S I = 500/64 =7,81 8 blocks 13

Κόστος αναζήτησης Θεωρούμε ότι το αρχείο δεδομένων είναι διατεταγμένο ως προς το πεδίο αναζήτησης μπορούμε να εφαρμόσουμε δυαδική αναζήτηση 500 διαφορετικές τιμές 10000/500=20 πλειάδες με την ίδια τιμή πεδίου αναζήτησης 20/4=5 block αντιστοιχούν σε κάθε τιμή Χωρίς το ευρετήριο: Θα πρέπει να φορτώσουμε log 2 (S F ) blocks = log2(2500)=11,28 12 blocks αρχείου και 5 block για τις πλειάδες που έχουν την τιμή αναζήτησης Αν υπάρχει ευρετήριο: Θα πρέπει να φορτώσουμε log 2 (S Ι ) blocks = log2(8)=3 3 blocks ευρετηρίου και 5 block αρχείου (για τις πλειάδες που έχουν την τιμή αναζήτησης) Χωρίς ευρετήριο: log2(2500)+5=17 Με ευρετήριο: log2(8)+5=8 14

3. Δευτερεύον ευρετήριο Secondary index Διατεταγμένο αρχείο με δύο πεδία (το πεδίο ευρετηρίασης και ένα δείκτη είτε προς το μπλοκ όπου αποθηκεύεται η εγγραφή είτε προς την εγγραφή) Το ευρετήριο ορίζεται σε μη διατεταγμένο πεδίο κλειδί (δευτερεύον κλειδί) Το ευρετήριο ορίζεται σε μη διατεταγμένο πεδίο που δεν είναι κλειδί Πυκνό ευρετήριο: μία καταχώρηση για κάθε εγγραφή Μεταβλητού μήκους εγγραφές με ένα επαναλαμβανόμενο πεδίο για το δείκτη Μία εγγραφή ευρετηρίου για κάθε τιμή του πεδίου ευρετηρίασης + ένα ενδιάμεσο επίπεδο για την διαχείριση των πολλαπλών δεικτών 15

Δημιουργία ευρετηρίου CREATE INDEX idxempfname on employee(fname) CREATE UNIQUE index idxemp on employee(lname) To primary key κάθε πίνακα έχει ήδη ευρετήριο UNIQUE ευρετήρια μόνο σε πεδία που δεν έχουν διπλότυπα Το ευρετήριο μπορεί να περιλαμβάνει περισσότερα από ένα πεδία, δεν είναι όμως τόσο αποτελεσματικό 15/5/2014 Βάσεις Δεδομένων 16

Διαχείριση ευρετηρίου Ενημέρωση: Μετά από πολλές εισαγωγές και διαγραφές το ευρετήριο μπορεί να πρέπει να ξαναδημιουργηθεί: ALTER INDEX όνομαευρετηρίου REBUILD; Διαγραφή: DROP INDEX όνομαευρετηρίου; 15/5/2014 Βάσεις Δεδομένων 17

Σκανδάλη - trigger Διαδικαστικός (procedural) κώδικας που εκτελείται ως συνέπεια κάποιων γεγονότων στη ΒΔ: INSERT, UPDATE, DELETE Ο κώδικας μπορεί να πυροδοτηθεί πρίν (BEFORE) ή μετά (AFTER) το γεγονός Με τη χρήση triggers μπορούμε να ελέγξουμε σύνθετους περιορισμούς πριν από μια εισαγωγή ή ενημέρωση και να κάνουμε τις κατάλληλες διορθώσεις Χρησιμοποιούνται επίσης όταν η σχεδίαση της ΒΔ δεν καλύπτει όλες τις συναρτησιακές εξαρτήσεις 18

Παράδειγμα trigger Set serveroutput on CREATE OR REPLACE TRIGGER firstemployee ΓΕΓΟΝΟΣ BEFORE INSERT ON employee ΠΥΡΟΔΟΤΗΣΗΣ FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE('INSERTING: ' :NEW.LNAME); IF (:NEW.dno >5 ) THEN insert into department(dname,dnumber,mgrssn) values ('neo',:new.dno,123456789); ΑΠΟΤΕΛΕΣΜΑ END IF; END; ΑΝΑΦΟΡΑ ΣΤΗ ΝΕΑ ΠΛΕΙΑΔΑ ΣΥΝΘΗΚΗ ΠΥΡΟΔΟΤΗΣΗΣ 19

Εναλλακτικά CREATE OR REPLACE TRIGGER firstemployee BEFORE INSERT ON employee FOR EACH ROW declare found boolean; BEGIN found:=false; DBMS_OUTPUT.PUT_LINE('INSERTING PERSON: ' :NEW.LNAME); for dnum in (select dnumber from department where dnumber=:new.dno) loop found:=true; end loop; IF (found) THEN insert into department(dname, dnumber, mgrssn) values ('neo',:new.dno,123456789); END IF; END; 15/5/2014 Βάσεις Δεδομένων 20

Εισαγωγή στην PL/SQL 15/5/2014 Βάσεις Δεδομένων 21

Η δομή μιας εντολής PL/SQL DECLARE /* Δηλώσεις (προαιρετικά): Μεταβλητές, τύποι και τοπικά υποπρογράμματα. */ BEGIN /* Εκτελέσιμο (υποχρεωτικό): διαδικασίες και οι εντολές PL/SQL. */ EXCEPTION /* Χειρισμός εξαιρέσεων (προαιρετικό): εντολές χειρισμού λαθών*/ END; 22

Εκτέλεση Για να εκτελέσουμε ένα πρόγραμμα PL/SQL γράφουμε μετά τον κώδικα: Μια γραμμή που περιέχει μόνο μία τελεία(. ). Μια γραμμή με την λέξη run; Η εκτέλεση γίνεται: Γράφοντας τις εντολές στην γραμμή εντολών της sqlplus. Γράφοντας τον κώδικα σε ένα αρχείο και καλώντας το από την sqlplus (@codefile.sql). 23

Μεταβλητές και τύποι Τύποι μεταβλητών: Ακέραιοι: PLS_INTEGER, NUMBER(length) Αλφαριθμητικά: CHAR(length), VARCHAR2(max length) Πραγματικοί: NUMBER(precision, scale), REAL, FLOAT(binary precision) Ίδιος με τον τύπο μίας στήλης ενός πίνακα. Ίδιος με τον τύπο μίας εγγραφής με πολλά πεδία (tuple). Η αρχική τιμή μεταβλητών είναι NULL. Οι μεταβλητές δεν πρέπει να έχουν ίδιο όνομα με στήλες πινάκων. Στις μεταβλητές ανατίθεται τιμή με τον τελεστή :=. 24

Τμήμα δηλώσεων DECLARE name [CONSTANT] datatype [(constraint)] [:= value]; π.χ. v_empno Number(4) ; xyz VARCHAR2(200) :='Hello World'; myvariable INTEGER DEFAULT 1; does_dept_exist Boolean ; --true, false, null pi constant Number(6,4) := 3.1421 ; next_checkup Date Not Null := '2-Dec-92'; yoursalary employee.salary%type; temp_emp employee%rowtype ; 25

Τμήμα εντολών BEGIN /* Εκτελέσιμο (υποχρεωτικό): διαδικασίες και οι εντολές PL/SQL. */ DBMS_OUTPUT.PUT_LINE(myvariable); DBMS_OUTPUT.PUT_LINE(xyz); myvariable := 15; DBMS_OUTPUT.PUT_LINE(myvariable); EXCEPTION WHEN exc_name THEN εντολές χειρισμού;... [WHEN OTHERS εντολές χειρισμού;] END; / 26

Περιπτώσεις χρήσης Συχνές ερωτήσεις: Θέλουμε να εκτελούμε μια ερώτηση που να εμφανίζει όλους τους υπαλλήλους CREATE OR REPLACE PROCEDURE p1 ( ) AS e_fname VARCHAR2(50) ; BEGIN SELECT fname INTO e_fname FROM employee; END; CALL p1 (); Παραμετρικές ερωτήσεις Θέλουμε να εκτελούμε μια ερώτηση που να εμφανίζει όλους τους υπαλλήλους ενός τμήματος CREATE OR REPLACE PROCEDURE p2 (IN k INT) SELECT * FROM employee WHERE dno=k; CALL p2(8); 27

Περιπτώσεις χρήσης Συνθήκες CREATE OR REPLACE PROCEDURE p3 (IN k INT) DECLARE v1 INT; BEGIN SET v1 = k % 2; IF v1 = 0 THEN INSERT INTO month VALUES ( mono ); ELSE INSERT INTO month VALUES ( zygo ); END IF; END; CALL p3 (30) ; 28

Ένα πρόγραμμα περιέχει Μεμονωμένες εντολές ή σύνολα εντολών (blocks) Ανώνυμα blocks Επώνυμα blocks Procedures Functions 29

Αποθηκευμένη διαδικασία Stored procedure Συνήθως: Κάνουμε μία ή περισσότερες ερωτήσεις στη ΒΔ Ανακτούμε τις πλειάδες και τις μεταφέρουμε σε μια εφαρμογή Επεξεργαζόμαστε τις απαντήσεις και κάνουμε νέες ερωτήσεις Με τις αποθηκευμένες διαδικασίες Εκτελούμε ερωτήσεις στη ΒΔ Ανακτούμε πλειάδες και τις επεξεργαζόμαστε στο ΣΔΒΔ Μεταφέρουν μέρος των υπολογισμών (της λογικής) από την εφαρμογή στο ΣΔΒΔ Μια διαδικασία έχει όνομα, λίστα ορισμάτων και μια η περισσότερες εντολές SQL 30

Σε ένα PL/SQL block Συνθήκες και έλεγχος ακολουθίας ροής IF THEN, IF THEN ELSE GOTO CASE δηλώσεις Βρόχοι (loops) FOR (αριθμητικά και με χρήση δείκτη), WHILE απλά LOOP Τελεστές ανάθεσης, σύγκρισης κλπ. 31

Δείκτες - Cursors Μας επιτρέπουν να διατρέχουμε τις επιλεγμένες πλειάδες και να τις χειριζόμαστε προγραμματιστικά με αποθηκευμένες διαδικασίες Δηλώνουμε το δείκτη DECLARE cursor-name CURSOR FOR SELECT...; Τον δημιουργούμε OPEN cursor-name; Ανακτούμε τις πλειάδες FETCH cursor-name INTO variable [, variable]; Κλείνουμε το δείκτη CLOSE cursor-name; 32

Παράδειγμα CREATE OR REPLACE PROCEDURE findtotal (return_sum OUT NUMBER) IS misthos employee.salary%type; total employee.salary%type; CURSOR curmisth IS SELECT salary FROM employee; BEGIN total:=0; OPEN curmisth; LOOP FETCH curmisth INTO misthos; EXIT WHEN curmisth%notfound; IF misthos is not NULL THEN total:=total+misthos; END IF; END LOOP; CLOSE curmisth; return_sum:=total; END; DECLARE total employee.salary%type; BEGIN total:=0; findtotal(total); DBMS_OUTPUT.PUT_LINE('Total salary:' total); END; 33