Académique Documents
Professionnel Documents
Culture Documents
Τόμος Γ’:
ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ
Στόχοι για την Τέταρτη Συνάντηση
2 8/7/2019
Γραπτή Εργασία 2, Γραπτή Εργασία 3 και άλλα…
ΓΕ-2:
Απολογισμός…
ΓΕ-3:
Για την εκπόνηση της ΓΕ3 θα πρέπει να χρησιμοποιήσετε την
SQLite (είτε σε command line είτε σε γραφικό περιβάλλον με το
εργαλείο DB Browser for SQLite).
Υπάρχει επιπλέον υλικό μελέτης για «Κανονικοποίηση Β.Δ.»
(εντός διδακτέας και εκτός εξεταστέας ύλης) και υπάρχει και
αντίστοιχο προαιρετικό θέμα στη ΓΕ3.
3 8/7/2019
Καλή Αρχή…
4 8/7/2019
Βάσεις Δεδομένων
Η ΓΛΩΣΣΑ SQL
TA ΒΑΣΙΚΑ
5 8/7/2019
Από πού ξεκίνησε…
6 8/7/2019
Τμήματα
7 8/7/2019
Αποτελείται από…
8 8/7/2019
Βάσεις Δεδομένων
ΓΛΩΣΣΑ ΧΕΙΡΙΣΜΟΥ
ΔΕΔΟΜΕΝΩΝ
9 8/7/2019
Βασική Δομή
11 8/7/2019
Βασική Δομή – SELECT
Το SELECT αντιστοιχεί
στην πράξη της π A1, A2, .., An (σ P (R1 x R2 x … Rm))
προβολής της
σχεσιακής άλγεβρας. SELECT Α1, Α2,..., ΑN
FROM R1, R2, … RM
Μας βοηθάει να WHERE P
ορίσουμε ποια
γνωρίσματα θέλουμε να
υπάρχουν στο
αποτέλεσμα της
ερώτησης.
12 8/7/2019
Βασική Δομή – FROM
Το FROM αντιστοιχεί
στην πράξη του π A1, A2, .., An (σ P (R1 x R2 x … Rm))
καρτεσιανού γινομένου
της σχεσιακής άλγεβρας. SELECT Α1, Α2,..., ΑN
FROM R1, R2, … RM
Μας βοηθάει να WHERE P
ορίσουμε ποιες σχέσεις
θα χρησιμοποιηθούν για
τον υπολογισμό του
αποτελέσματος.
13 8/7/2019
Βασική Δομή – WHERE
ΠΡΟΣΟΧΗ:
Δε γίνεται απαλοιφή των διπλών
εμφανίσεων.
14 8/7/2019
Στην Πράξη…
Ηθοποιός
15 8/7/2019
Τα πρώτα μας ερωτήματα
17 8/7/2019
SELECT : Αριθμητικές Πράξεις
18 8/7/2019
WHERE : Η Συνθήκη
Μπορούμε να έχουμε:
Λογικούς τελεστές: AND, OR, NOT
Τελεστές σύγκρισης: <, <=, >, >=, =, <>,
BETWEEN, NOT BETWEEN
ανάμεσα σε αριθμητικές εκφράσεις, συμβολοσειρές (strings), και
ειδικούς τύπους.
SELECT Τίτλος
Παράδειγμα: FROM Ταινία
WHERE Έτος BETWEEN 1990 AND 1995
αντί του
SELECT Τίτλος
FROM Ταινία
WHERE Έτος >= 1990 AND Έτος <= 1995
SELECT Τίτλος
FROM Ταινία
WHERE Έτος > 1995 AND Είδος = 'Ασπρόμαυρη'
20 8/7/2019
Περίπτωση Γνωρίσματος σε περισσότερες σχέσεις
22 8/7/2019
Πράξεις με συμβολοσειρές (%, _)
23 8/7/2019
Πράξεις με συμβολοσειρές – Παράδειγμα
24 8/7/2019
Διάταξη Πλειάδων – ORDER BY
26 8/7/2019
Αλλαγή Ονόματος Γνωρίσματος – AS
To AS μπορεί να εμφανίζεται
Στην SQLite μπορεί να
στο SELECT, ή στο FROM.
παραληφθεί το AS.
Για παράδειγμα:
SELECT Τίτλος, Έτος, Διάρκεια / 60 AS Ώρες-Διάρκεια,
Είδος
FROM Ταινία
Ταινία(Τίτλος, Έτος, Διάρκεια, Είδος)
Παίζει(Όνομα, Τίτλος, Έτος)
Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού)
27 8/7/2019
Αλλαγή Ονόματος Γνωρίσματος – Πότε
28 8/7/2019
Μεταβλητές Πλειάδων – AS
ΣΥΝΑΘΡΟΙΣΤΙΚΕΣ
ΣΥΝΑΡΤΗΣΕΙΣ
31 8/7/2019
Συναθροιστικές Συναρτήσεις
Οι συναρτήσεις μπορούν να
χρησιμοποιηθούν στο SELECT ή στο
HAVING (νέα εντολή)
Οι τιμές NULL αγνοούνται όταν οι
συναρτήσεις συνάθροισης εφαρμόζονται
σε κάποια στήλη 32 8/7/2019
Συναθροιστικές Συναρτήσεις – Στην Πράξη
Όνομα-Πελάτη Αριθμός-Λογαριασμού
Καταθέτης
33 8/7/2019
Συναθροιστικές Συναρτήσεις – Μέσος Όρος (AVG)
34 8/7/2019
Συναθροιστικές Συναρτήσεις – Μέγιστο (MAX)
35 8/7/2019
Συναθροιστικές Συναρτήσεις – COUNT
SELECT COUNT(*)
FROM Πελάτης
36 8/7/2019
Ομαδοποίηση: GROUP BY και HAVING
Η εντολή GROUP BY
καθορίζει τα γνωρίσματα ομαδοποίησης
Αν υπάρχουν ΝULL τιμές στο γνώρισμα
ομαδοποίησης
όλες οι πλειάδες με NULL φτιάχνουν χωριστή ομάδα
HAVING: Επιτρέπει παροχή συνθήκης στην
περιληπτική πληροφορία
37 8/7/2019
Συναθροιστικές Συναρτήσεις – GROUP BY
42 8/7/2019
Συναθροιστικές Συναρτήσεις – HAVING
Παράδειγμα: Ποιο είναι το μέσο ποσό για κάθε πελάτη που ζει
στα Ιωάννινα και έχει τουλάχιστον τρεις λογαριασμούς;
3
SELECT Καταθέτης.Όνομα-Πελάτη, AVG(Λογαριασμός.Ποσό)
FROM Καταθέτης, Λογαριασμός, Πελάτης
1 WHERE Καταθέτης.Αριθμός-Λογαριασμού =
Λογαριασμός.Αριθμός-Λογαριασμού AND Καταθέτης.Όνομα-
Πελάτη = Πελάτης.Όνομα-Πελάτη AND Πόλη = 'Ιωάννινα'
2 GROUP BY Καταθέτης.Όνομα-Πελάτη
4 HAVING COUNT (Καταθέτης.Αριθμός-Λογαριασμού)>=3
ΦΩΛΙΑΣΜΕΝΕΣ
ΥΠΟΕΡΩΤΗΣΕΙΣ
45 8/7/2019
Φωλιασμένες Υπο-ερωτήσεις
49 8/7/2019
Φωλιασμένες Υποερωτήσεις – Ο τελεστής IN
Επίσης:
< SOME
<= SOME
>= SOME
= SOME (ισοδ. του IN)
< > SOME (όχι ισοδ. του NOT IN)
0
(5 SOME 5 ) = true (αφού 0 5)
(= SOME) IN
Παρ΄ όλα αυτά, ( SOME) NOT IN
53 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων – ALL
55 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων – ALL
Επίσης:
< ALL
<= ALL
>= ALL
= ALL
<> ALL (ισοδ. του NOT IN)
0
(5< ALL 5 ) = false
6
6
(5< ALL 10 ) = true
4
(5 = ALL 5 ) = false
4
(5 ALL 6 ) = true (αφού 5 4 και 5 6)
( ALL) NOT IN
57 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων – ALL
58 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων –
Έλεγχος για Άδεια Σχέση - EXISTS
60 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων –
Έλεγχος για Άδεια Σχέση – NOT EXISTS
63 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων –
Έλεγχος για Διπλές Εμφανίσεις –UNIQUE
64 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων –
Έλεγχος για Διπλές Εμφανίσεις –UNIQUE
65 8/7/2019
Φωλιασμένες Υποερωτήσεις – Σύγκριση Συνόλων –
Έλεγχος για Διπλές Εμφανίσεις –ΝΟΤ UNIQUE
67 8/7/2019
Βάσεις Δεδομένων
ΠΡΑΞΕΙΣ
ΣΥΝΟΛΩΝ
68 8/7/2019
Πράξεις Συνόλων
Όνομα-Πελάτη Αριθμός-Λογαριασμού
Καταθέτης
70 8/7/2019
Πράξεις Συνόλων – UNION
Παράδειγμα UNION:
Ποια είναι τα ονόματα όλων των πελατών που έχουν
καταθέσεις ή/και έχουν πάρει δάνειο;
(SELECT Όνομα-Πελάτη
FROM Καταθέτης)
UNION
(SELECT Όνομα-Πελάτη
FROM Δανειζόμενος)
Παράδειγμα INTERSECT:
Ποια είναι τα ονόματα όλων των πελατών που
έχουν καταθέσεις και έχουν πάρει δάνειο;
(SELECT Όνομα-Πελάτη
FROM Καταθέτης)
INTERSECT
(SELECT Όνομα-Πελάτη
FROM Δανειζόμενος)
Παράδειγμα EXCEPT:
Ποια είναι τα ονόματα όλων των πελατών που
έχουν καταθέσεις και δεν έχουν πάρει δάνειο;
(SELECT Όνομα-Πελάτη
FROM Καταθέτης)
EXCEPT
(SELECT Όνομα-Πελάτη
FROM Δανειζόμενος)
76 8/7/2019
Πράξεις Συνόλων σε συνδυασμό με τη λέξη κλειδί ALL σε SQL ερωτήσεις
Σύνολα και Πολυσύνολα
77 8/7/2019
UNION και UNION ALL
78 8/7/2019
Παράδειγμα UNION [ALL]
ΛογαριασμόςΚαταθέσεων ΛογαριασμόςΌψεως
ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο
1155657 Γεωργίου 24000,0 2345690 Αντωνίου 747,0
1298098 Γεωργίου 7086,0 2677878 Αντωνίου 10747,0
2390200 Αντωνίου 25000,0 6767218 Πέτρου 10000,0
3209399 Αντωνίου 5353,0 6823782 Βασιλείου 100,0
4398760 Πέτρου 1000,0 7276526 Βασιλείου 9393,0
5678908 Βασιλείου 17,3 7882388 Νικολάου 10800,0
8283772 Νικολάου 10800,0
80 8/7/2019
Παράδειγμα INTERSECT [ALL]
ΛογαριασμόςΚαταθέσεων ΛογαριασμόςΌψεως
ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο
1155657 Γεωργίου 24000,0 2345690 Αντωνίου 747,0
1298098 Γεωργίου 7086,0 2677878 Αντωνίου 10747,0
2390200 Αντωνίου 25000,0 6767218 Πέτρου 10000,0
3209399 Αντωνίου 5353,0 6823782 Βασιλείου 100,0
4398760 Πέτρου 1000,0 7276526 Βασιλείου 9393,0
5678908 Βασιλείου 17,3 7882388 Νικολάου 10800,0
8283772 Νικολάου 10800,0
82 8/7/2019
Παράδειγμα EXCEPT [ALL]
ΛογαριασμόςΚαταθέσεων ΛογαριασμόςΌψεως
ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο ΑριθμόςΛογ ΌνομαΠελάτη Υπόλοιπο
1155657 Γεωργίου 24000,0 2345690 Αντωνίου 747,0
1298098 Γεωργίου 7086,0 2677878 Αντωνίου 10747,0
2390200 Αντωνίου 25000,0 6767218 Πέτρου 10000,0
3209399 Αντωνίου 5353,0 6823782 Βασιλείου 100,0
4398760 Πέτρου 1000,0 7276526 Βασιλείου 9393,0
5678908 Βασιλείου 17,3 7882388 Νικολάου 10800,0
8283772 Νικολάου 10800,0
ΣΥΝΕΝΩΣΕΙΣ
ΣΥΝΟΛΩΝ
84 8/7/2019
Συνενώσεις Συνόλων
Γενική σύνταξη:
<όνομα-σχέσης1> <τύπος-συνένωσης>
<όνομα-σχέσης2> <συνθήκη-συνένωσης>
ή
<όνομα-σχέσης1> natural <τύπος-συνένωσης>
<όνομα-σχέσης2>
85 8/7/2019
Συνενώσεις Συνόλων – Τύποι Συνένωσης
86 8/7/2019
Συνένωση (Σύνδεση) Σχέσεων - JOIN
Σχέση loan:
loan-number branch-name amount
L-170 Downtown 3000
L-230 Redwood 4000
L-260 Perryridge 1700
Σχέση borrower:
customer-name loan-number
Jones L-170
Smith L-230
Hayes L-155
Σημείωση: Λείπει πληροφορία στη σχέση borrower για το
L-260 και στη σχέση loan για το L-155
88 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 1/6
loan borrower
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 Hayes L-155
89 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 2/6
loan borrower
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 Hayes L-155
90 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 3/6
loan borrower
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 Hayes L-155
91 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 4/6
loan borrower
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 Hayes L-155
92 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 5/6
loan borrower
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 Hayes L-155
93 8/7/2019
Σύνδεση Σχέσεων – Παραδείγματα 6/6
SELECT customer-name
FROM (depositor NATURAL FULL OUTER JOIN borrower)
where account-number IS NULL OR loan-number IS NULL
94 8/7/2019
Συνενώσεις Συνόλων – Συνθήκες Συνένωσης
Συνθήκες Συνένωσης:
ON P
USING (A1, A2,..., An): γνωρίσματα που πρέπει
να ταιριάζουν στη συνένωση είναι τα Ai. Τα Ai πρέπει να
είναι γνωρίσματα κοινά και στις δυο σχέσεις και
εμφανίζονται στο αποτέλεσμα μόνο μια φορά.
95 8/7/2019
Συνενώσεις Συνόλων – inner, outer, natural
SELECT Όνομα-Πελάτη
FROM Καταθέτης NATURAL FULL OUTER JOIN Δανειζόμενος
WHERE Αριθμός-Λογαριασμού IS NULL
OR Αριθμός-Δανείου IS NULL
96 8/7/2019
Παραγόμενες Σχέσεις
97 8/7/2019
Παραγόμενες Σχέσεις
ΟΡΙΣΜΟΣ
ΟΨΕΩΝ
99 8/7/2019
Ορισμός Όψεων
100 8/7/2019
Ορισμός Όψεων - Παράδειγμα
101 8/7/2019
Ορισμός Όψεων
102 8/7/2019
Βάσεις Δεδομένων
ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ
ΔΕΔΟΜΕΝΩΝ
103 8/7/2019
Ορισμός & Τύποι Δεδομένων SQL
8/7/2019
Γλώσσα Ορισμού Δεδομένων
105 8/7/2019
Στην Πράξη
107 8/7/2019
Τύποι Πεδίου Ορισμού
109 8/7/2019
Περιορισμοί Ακεραιότητας
(1)
CREATE TABLE Πελάτης
(Όνομα-Πελάτη char(20) NOT NULL,
Οδός char(30),
Πόλη char(30),
PRIMARY KEY (Όνομα-Πελάτη))
(2)
CREATE TABLE Λογαριασμός
(Αριθμός-Λογαριασμού char(10) NOT NULL,
Όνομα-Υποκαταστήματος char(15),
Ποσό int,
PRIMARY KEY (Αριθμός-Λογαριασμού)
CHECK (Ποσό >= 0)
Λογαριασμός(Όνομα-Υποκαταστήματος, Αριθμός-Λογαριασμού, Ποσό)
Υποκατάστημα (Όνομα-Υποκαταστήματος, Πόλη, Σύνολο)
Δάνειο(Όνομα-Υποκαταστήματος, Αριθμός-Δανείου, Ποσό)
Δανειζόμενος(Όνομα-Πελάτη, Αριθμός-Δανείου)
Πελάτης(Όνομα-Πελάτη, Οδός, Πόλη)
Καταθέτης(Όνομα-Πελάτη, Αριθμός-Λογαριασμού) 111 8/7/2019
Ορισμός Σχήματος
112 8/7/2019
Περιορισμοί Ακεραιότητας – Περιορισμοί Αναφορικής Ακεραιότητας
Σύνταξη:
113 8/7/2019
Περιορισμοί Ακεραιότητας – Παράδειγμα
CREATE TABLE
..
FOREIGN KEY (Όνομα-Υποκαταστήματος) REFERENCES
Υποκατάστημα
ON DELETE CASCADE
ON UPDATE CASCADE
…
Λογαριασμός(Όνομα-Υποκαταστήματος, Αριθμός-Λογαριασμού, Ποσό)
Υποκατάστημα (Όνομα-Υποκαταστήματος, Πόλη, Σύνολο)
Δάνειο(Όνομα-Υποκαταστήματος, Αριθμός-Δανείου, Ποσό)
Δανειζόμενος(Όνομα-Πελάτη, Αριθμός-Δανείου)
Πελάτης(Όνομα-Πελάτη, Οδός, Πόλη)
Καταθέτης(Όνομα-Πελάτη, Αριθμός-Λογαριασμού)
114 8/7/2019
Ξένα Κλειδιά (Περιορισμοί Αναφορικής Ακεραιότητας)
115 8/7/2019
Στην Πράξη
116 8/7/2019
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα
117 8/7/2019
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…
118 8/7/2019
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…
119 8/7/2019
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…
120 8/7/2019
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…
121 8/7/2019
Περιορισμοί Ακεραιότητας – Πεδίου Ορισμού
123 8/7/2019
Τροποποίηση Σχήματος
Διαγραφή γνωρίσματος:
ALTER TABLE R DROP A
DROP TABLE R
Διαφορά από
DELETE FROM R
125 8/7/2019
Βάσεις Δεδομένων
ΓΛΩΣΣΑ ΧΕΙΡΙΣΜΟΥ
ΔΕΔΟΜΕΝΩΝ
126 8/7/2019
Τροποποιήσεις - Γλώσσα Χειρισμού Δεδομένων (ΓΧΔ)
128 8/7/2019
Εισαγωγή Πλειάδας
Σε περίπτωση παραβίασης:
Απόρριψη εισαγωγής
129 8/7/2019
Εισαγωγή - Παράδειγμα
Παράδειγμα για το (β): Για κάθε πελάτη που έχει πάρει δάνειο
από το υποκατάστημα Ψηλά Αλώνια προστίθεται ως δώρο
ένας λογαριασμός των 200€.
INSERT INTO Λογαριασμός
SELECT Όνομα-Υποκαταστήματος, Αριθμός-
Δανείου, 200
FROM Δάνειο
WHERE Όνομα-Υποκαταστήματος = 'Ψηλά Αλώνια'
131 8/7/2019
Εισαγωγή
133 8/7/2019
Συνθήκη WHERE
<Όνομα_Γνωρίσματος> <τελεστής>
<Όνομα_Γνωρίσματος> ή <Τιμή>
134 8/7/2019
Διαγραφή – Παραδείγματα
137 8/7/2019
Διαγραφή - Παράδειγμα
139 8/7/2019
Διαγραφή Πλειάδας και Αναφορική Ακεραιότητα
140 8/7/2019
Διαγραφή
Υποκατάστημα Λογαριασμός
Πόλη Όνομα_Υποκ Όνομα_Υποκ Όνομα-Πελάτη Υπόλοιπο
Καστοριά Κ1 Κ1 ΚΩΣΤΗΣ 350.000
Καστοριά Κ3 Κ2 ΑΠΟΣΤΟΛΙΔΗΣ 230.000
Θεσσαλονίκη Θ1 Θ1 ΣΤΕΦΑΝΟΥ 670.000
Θεσσαλονίκη Θ2 Θ2 ΠΑΠΑΝΙΚΟΛΑΟΥ 256.000
Αθήνα Α1 Κ3 ΧΑΤΖΟΠΟΥΛΟΣ 410.000
141 8/7/2019
Τροποποίηση Πλειάδας
UPDATE R
SET Attr = New_Value
WHERE P
142 8/7/2019
Τροποποίηση Πλειάδας και Αναφορική Ακεραιότητα
143 8/7/2019
Τροποποίηση Πλειάδας και Αναφορική Ακεραιότητα
144 8/7/2019
Ενημερώσεις
Παράδειγμα:
στους πελάτες που έχουν υπόλοιπο < 1.000.000 η τράπεζα
δίνει 5% και στους πελάτες που έχουν υπόλοιπο > 1.000.000
δίνει 9%:
UPDATE Λογαριασμός
SET Ποσό = Ποσό * 1.05
WHERE Ποσό < 1.000.000
UPDATE Λογαριασμός
SET Ποσό = Ποσό * 1.09
WHERE Ποσό > 1.000.000
145 8/7/2019
Ενημερώσεις
UPDATE Λογαριασμός
SET Υπόλοιπο = Υπόλοιπο * 1.05
WHERE Υπόλοιπο > SELECT AVG(Υπόλοιπο)
FROM Λογαριασμός
146 8/7/2019
Συμπληρωματικό Υλικό
147 8/7/2019
Βάσεις Δεδομένων
ΕΙΣΑΓΩΓΗ ΣΤΗΝ
ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ
ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ
148 8/7/2019
Το πρόβλημα του πλεονασμού
ΓΕΩΡΓΙΟΥ ΤΕΧΝΟΛΟΓΙΑ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ11 ΔΕΛΗΣ del@eap.gr
ΝΙΚΟΣ ΛΟΓΙΣΜΙΚΟΥ
ΓΕΩΡΓΙΟΥ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ12 ΜΑΘΗΜΑΤΙΚΑ Ι ΡΑΜΦΟΣ ram@eap.gr
ΝΙΚΟΣ
ΛΕΚΑΣ ΤΕΧΝΟΛΟΓΙΑ
134 ΜΑΡΑΘΩΝΟΣ 2 ΠΛΗ11 ΔΕΛΗΣ del@eap.gr
ΜΑΡΙΟΣ ΛΟΓΙΣΜΙΚΟΥ
149 8/7/2019
Το πρόβλημα του πλεονασμού – Δυσλειτουργίες
Επανάληψη πληροφορίας
Δυσλειτουργία ενημέρωσης
Δυσλειτουργία εισαγωγής
Δυσλειτουργία διαγραφής
ΑΜ Ονομ/μο Διεύθυνση Κωδ-ΘΕ ΘΕ ΣΕΠ ΣΕΠ-email
ΓΕΩΡΓΙΟΥ ΤΕΧΝΟΛΟΓΙΑ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ11 ΔΕΛΗΣ del@eap.gr
ΝΙΚΟΣ ΛΟΓΙΣΜΙΚΟΥ
ΓΕΩΡΓΙΟΥ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ12 ΜΑΘΗΜΑΤΙΚΑ Ι ΡΑΜΦΟΣ ram@eap.gr
ΝΙΚΟΣ
ΛΕΚΑΣ ΤΕΧΝΟΛΟΓΙΑ
134 ΜΑΡΑΘΩΝΟΣ 2 ΠΛΗ11 ΔΕΛΗΣ del@eap.gr
ΜΑΡΙΟΣ ΛΟΓΙΣΜΙΚΟΥ
150 8/7/2019
Το πρόβλημα του πλεονασμού – Λύση
Αποδόμηση
ΓΕΩΡΓΙΟΥ ΤΕΧΝΟΛΟΓΙΑ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ11 ΔΕΛΗΣ del@eap.gr
ΝΙΚΟΣ ΛΟΓΙΣΜΙΚΟΥ
ΓΕΩΡΓΙΟΥ
123 ΦΙΛΟΛΑΟΥ 12 ΠΛΗ12 ΜΑΘΗΜΑΤΙΚΑ Ι ΡΑΜΦΟΣ ram@eap.gr
ΝΙΚΟΣ
151 8/7/2019
Κανονικές Μορφές
1NF
2NF
3NF
BCNF (Boyce Codd)
4NF
5NF
152 8/7/2019
Κανονικοποίηση μέσω αποδόμησης
153 8/7/2019
Πλεονασμός ή επανάληψη;
154 8/7/2019
Πλεονασμός και Επιχειρησιακή Λογική
Έχουμε πλεονασμό;
155 8/7/2019
Κανονικές Μορφές 1NF
Κωδ-ΣΕΠ Επώνυμο ΘΕ
13 ΝΙΚΟΛΑΟΥ ΠΛΗ21
Κωδ-ΣΕΠ Επώνυμο ΘΕ
12 ΓΕΩΡΓΙΟΥ ΠΛΗ11
12 ΓΕΩΡΓΙΟΥ ΠΛΗ10
12 ΓΕΩΡΓΙΟΥ ΠΛΗ12
13 ΝΙΚΟΛΑΟΥ ΠΛΗ21
Μια σχέση βρίσκεται στην πρώτη κανονική μορφή (1NF) αν και μόνο αν
τα πεδία της περιέχουν μόνο ατομικές τιμές.
156 8/7/2019
Συναρτησιακές Εξαρτήσεις (Functional Dependencies)
Α→Β A B
(C, D) → (E, F) C E
D F
158 8/7/2019
Κανονική Μορφή 3NF
Αποδόμηση:
160 8/7/2019
Κανονική Μορφή BCNF
161 8/7/2019
Κανονική Μορφή BCNF – Συνέχεια…
Ημ/νια-
ΑΜ Ονομ/μο Κωδ-ΘΕ ΘΕ
εγγραφής
ΓΕΩΡΓΙΟΥ ΤΕΧΝΟΛΟΓΙΑ
123 ΠΛΗ11 2/9/2008
ΝΙΚΟΣ ΛΟΓΙΣΜΙΚΟΥ
ΓΕΩΡΓΙΟΥ
123 ΠΛΗ12 ΜΑΘΗΜΑΤΙΚΑ Ι 2/9/2008
ΝΙΚΟΣ
ΝΙΚΟΛΑΟΥ ΤΕΧΝΟΛΟΓΙΑ
134 ΠΛΗ11 1/9/2008
ΓΙΩΡΓΟΣ ΛΟΓΙΣΜΙΚΟΥ
ΝΙΚΟΛΑΟΥ
134 ΠΛΗ12 ΜΑΘΗΜΑΤΙΚΑ Ι 1/9/2008
ΓΙΩΡΓΟΣ
Υπάρχει πλεονασμός;
162 8/7/2019
Κανονική Μορφή BCNF – Συνέχεια…
Αποδόμηση
163 8/7/2019
Ιδιότητες Αποδόμησης
Διατήρηση κατηγορημάτων
Άρση πλεονασμού
Αποφυγή απώλειας σύνδεσης
Διατήρηση εξαρτήσεων (όχι πάντα επιτεύξιμη)
Έστω η σχέση
164 8/7/2019
Ιδιότητες Αποδόμησης – Συνέχεια…
165 8/7/2019
Ιδιότητες Αποδόμησης – Συνέχεια…
167 8/7/2019
Αποδόμηση σε BCNF – Μέθοδος A’
168 8/7/2019
Αποδόμηση σε BCNF – Μέθοδος A’ – Συνέχεια…
R(Α,B,C,D,Ε,F,G) A C E
B F G
R1(Α,B,F) A
D
A
C D
R2(Α,C) F A C E
F C E
B
R3(C,D,Ε) G
B
G
R4(F,G)
C D
A F A
F F C E
B G B
D F
A C E G
A C
A
F
B
D
F G C E
169 8/7/2019
Αποδόμηση σε BCNF – Μέθοδος Β’
Για κάθε σχέση R και για κάθε εξάρτηση της μορφής (μάλιστα
προσθέτουμε στο δεξί μέρος όλα τα Βi, i = 1...ν, τα οποία εξαρτώνται
από το (Α1, Α2, ..., Αν))
η οποία παραβιάζει τη BCNF μορφή (δηλαδή το (Α1, Α2, ..., Αν) δεν
είναι υποψήφιο κλειδί) δημιουργούμε νέα σχέση R’ με τα
κατηγορήματα Α1, Α2, ... Αν, Β1, Β2, ... Βν.
Τα Αi, αποτελούν το κλειδί της νέας σχέσης. Στη σχέση R πλέον
παραμένουν τα αρχικά κατηγορήματα πλην των Βi.
λοιπά
πεδία Αi Bi
170 8/7/2019
Έλεγχος για lossless Αποδόμηση
1. Έστω η σχέση R
R1 ∩ R2 → R1
R1 ∩ R2 → R2
171 8/7/2019
Ερωτήσεις
Επιμέλεια Υλικού:
Γ. Τζήμας, Μ. Παρασκευάς, Γ. Οικονόμου
μέλη Σ.Ε.Π. Θ.Ε. ΠΛΗ11
Το σύνολο των διαφανειών προήλθε από το υλικό και τις διαφάνειες του Δρ. Β. Δελή, από
διαφάνειες της Δρ. Ε. Πιτουρά και του Δρ. Χ. Γκουμόπουλου και από το βιβλίο “Database
System Concepts”, Silberschatz et al. 172 8/7/2019