You are on page 1of 459

ΣΥΝΟΠΤΙΚΟΣ Ο∆ΗΓΟΣ ΧΡΗΣΗΣ ΤΗΣ MICROSOFT ACCESS 2000

ΣΥΝ∆ΥΑΣΜΟΙ ΠΛΗΚΤΡΩΝ
ΓΕΝΙΚΗΣ ΧΡΗΣΕΩΣ ΤΟ ΚΕΝΤΡΙΚΟ ΠΑΡΑΘΥΡΟ ∆ΙΑΧΕΙΡΙΣΗΣ ΤΗΣ ΒΑΣΗΣ
Άνοιγµα Βάσης ∆εδοµένων Ctrl + O ∆Ε∆ΟΜΕΝΩΝ (DATABASE WINDOW)
Κλείσιµο Βάσης ∆εδοµένων Ctrl + W
Εκτύπωση Τρέχουσας Όψης Ctrl + P
∆ιαγραφή Delete
Αναίρεση Ctrl + Z
Λήψη Βοήθειας F1
Ορθογραφικός Έλεγχος F7
Εισαγωγή Εγγραφής Ctrl + +
∆ιαγραφή Εγγραφής Ctrl + -
Αποθήκευση Εγγραφής Shift + Enter
Αναίρεση Μεταβολών Esc
Εισαγωγή Ηµεροµηνίας Ctrl + ;
Εισαγωγή Ώρας Ctrl + :
Μετακίνηση σε Εφαρµογή Alt + Tab
ΕΠΕΞΕΡΓΑΣΙΑΣ ΚΕΙΜΕΝΟΥ
Αποκοπή Κειµένου Ctrl + X
Αντιγραφή Κειµένου Ctrl + C
Επικόλληση Κειµένου Ctrl + V
Αναζήτηση Κειµένου Ctrl + F
Αντικατάσταση Κειµένου Ctrl + H
Επιλογή Όλου του Κειµένου Ctrl + A
ΠΛΟΗΓΗΣΗΣ ΣΕ ΕΓΓΡΑΦΕΣ
Επόµενο Πεδίο Tab
Προηγούµενο Πεδίο Shift + Tab ΤΥΠΟΙ ΑΝΤΙΚΕΙΜΕΝΩΝ ΤΗΣ ΒΑΣΗΣ ∆Ε∆ΟΜΕΝΩΝ
Επόµενη Οθόνη Page Down
Προηγούµενη Οθόνη Page Up
Πρώτη Εγγραφή Ctrl + ↑ Πίνακες (Tables): χρησιµοποιούνται για την αποθήκευση
Τελευταία Εγγραφή Ctrl + ↓ των δεδοµένων της βάσης.
Ερωτήµατα (Queries): επιτρέπουν την ανάκτηση, µετα-
ΠΡΟΒΟΛΗΣ ΣΧΕ∆ΙΑΣΗΣ
βολή και ταξινόµηση των δεδοµένων της βάσης.
Φύλλο Ιδιοτήτων Alt + Enter
Αποθήκευση Αντικειµένου Ctrl + S Φόρµες (Forms): χρησιµοποιούνται για την αλληλεπί-
Έντονη Γραφή (Bold) Ctrl + B δραση του χρήση µε την εφαρµογή.
Πλάγια Γραφή (Italics) Ctrl + I Αναφορές (Reports): επιτρέπουν την προεπισκόπηση και
Υπογράµµιση (Underline) Ctrl + U την εκτύπωση των δεδοµένων της βάσης.
ΛΕΙΤΟΥΡΓΙΕΣ ΜΕ ΑΝΤΙΚΕΙΜΕΝΑ Σελίδες (Pages): επιτρέπουν την προσπέλαση των δεδοµέ-
Ενεργοποίηση και χρήση του νων δια της χρήσης του παγκοσµίου διαδικτύου.
αντικειµένου της βάσης. Μακροεντολές (Macros): χρησιµοποιούνται για την αυτο-
µατοποίηση ορισµένων διαδικασιών.
Μεταφορά του αντικειµένου
σε προβολή σχεδίασης Λειτουργικές µονάδες (Modules): επιτρέπουν την ανά-
πτυξη εφαρµογών σε γλώσσα VBA.
∆ηµιουργία νέου αντικειµένου
της βάσης δεδοµένων
Συνοπτικός Οδηγός Χρήσης της Microsoft Access 2000 2

∆ΗΜΙΟΥΡΓΙΑ ΚΑΙ ΣΧΕ∆ΙΑΣΗ ΠΙΝΑΚΩΝ ΓΡΑΜΜΗ ΠΛΟΗΓΗΣΗΣ (NAVIGATION BAR)

∆ηµιουργία νέου πίνακα σε προβολή σχεδίασης: από το κε-


ντρικό παράθυρο διαχείρισης της βάσης δεδοµένων µεταφερό-
µαστε στους πίνακες της βάσης και χρησιµοποιούµε την οµώ-
νυµη επιλογή από το αριστερό τµήµα του παραθύρου.

ΦΟΡΜΕΣ ΚΑΙ ΕΚΘΕΣΕΙΣ

Η δηµιουργία φορµών και εκθέσεων στη Microsoft Ac-


cess, γίνεται κατά τα γνωστά δια της µεταφοράς του χρήστη
στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων
και την επιλογή του πλήκτρου «∆ηµιουργία». Εναλλακτικά
ο χρήστης µπορεί να χρησιµοποιήσει κάποια από τις επιλο-
γές «∆ηµιουργία Φόρµας / Έκθεσης σε Προβολή Σχεδί-
ασης» και «∆ηµιουργία Φόρµας / Έκθεσης µε τη χρήση
Για κάθε πεδίο του πίνακα καταχωρούµε το όνοµά του, τον Οδηγού», για να κατασκευάσει µία φόρµα ή έκθεση µε µία
τύπο δεδοµένων του, και προαιρετικά, µια περιγραφή του από αυτές τις δύο µεθόδους.
ρόλου του µέσα στον πίνακα. Μετά την καταχώρηση όλων
των πεδίων, ορίζουµε το πρωτεύον κλειδί του πίνακα, και τον
αποθηκεύουµε, αποδίδοντας σε αυτόν κάποιο όνοµα. ΣΥΣΧΕΤΙΣΕΙΣ (RELATIONSHIPS)

ΤΥΠΟΙ ∆Ε∆ΟΜΕΝΩΝ ΓΙΑ ΤΑ ΠΕ∆ΙΑ ΤΩΝ ΠΙΝΑΚΩΝ

Κείµενο ∆έχεται συµβολοσειρές ή αλφαριθµητικά


µε µέγιστο µήκος 255 χαρακτήρες.
Υπόµνηµα ∆έχεται συµβολοσειρές ή αλφαριθµητικά
µε µέγιστο µήκος 64000 χαρακτήρες.
Αριθµός ∆έχεται αριθµητικές τιµές, ακέραιες ή
πραγµατικές.
Νοµισµατική ∆έχεται αριθµητικές τιµές που αναπαρι-
Μονάδα στούν χρηµατικά ποσά.
Αυτόµατη Το πεδίο αυτό συµπληρώνεται αυτόµατα
Αρίθµηση από την Access µε διαδοχικές ή τυχαίες
τιµές.
Ηµεροµηνία ∆έχεται συµβολοσειρές ή αριθµητικές τιµές
Ώρα που αναπαριστούν ηµεροµηνία και ώρα.
Ναι-Όχι Μπορεί να λάβει µια από τις τιµές Ναι ή Η δηµιουργία συσχετίσεων ανάµεσα στους πίνακες της βά-
Όχι. σης επιτρέπει την ανάκτηση συνδυασµένης πληροφορίας
Αντικείµενο ∆έχεται ως τιµή το στιγµιότυπο κάποιου από πολλούς πίνακες ταυτόχρονα και απαιτεί την ύπαρξη
OLE αντικειµένου. ενός κοινού πεδίου στους πίνακες που θέλουµε να συσχετί-
Υπερσύνδεση ∆έχεται κείµενα υπερσυνδέσµων που πα- σουµε, έτσι ώστε να είναι δυνατή η πραγµατοποίηση της
ραπέµπουν σε διευθύνσεις του παγκόσµιου πράξης ης σύζευξης ανάµεσά τους. Στο παράδειγµα του
διαδικτύου. παραπάνω σχήµατος παρουσιάζεται παράδειγµα συσχέτισης
LookUp Επιτρέπει την απόδοση τιµής δια της χρή- M:N ανάµεσα στους πίνακες AUTHOR και BOOK δια της
Wizard σης του κατάλληλου οδηγού. χρήσης του ενδιάµεσου πίνακα WRITING.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Συνοπτικός Οδηγός Χρήσης της Microsoft Access 2000 3

∆ΗΜΙΟΥΡΓΙΑ ΕΡΩΤΗΜΑΤΩΝ (QUERIES) ΜΑΚΡΟΕΝΤΟΛΕΣ (MACROS)

Η δηµιουργία ενός ερωτήµατος στη Microsoft Access µπορεί Οι µακροεντολές ορίζονται ως ειδικές οµάδες ενεργειών
να γίνει τόσο σε προβολή σχεδίασης όσο και δια της χρήσης της Microsoft Access οι οποίες εκτελούνται σε ένα και
του οδηγού δηµιουργίας ερωτηµάτων. Το παράδειγµα του µόνο βήµα, σαν µια απλή εντολή. Με τον τρόπο αυτό εί-
ερωτήµατος που παρουσιάζεται στο παραπάνω σχήµα, αφορά ναι δυνατή η εύκολη και γρήγορη υλοποίηση συγκεκριµέ-
την προεπισκόπηση του ερωτήµατος σε προβολή σχεδία- νου τύπου λειτουργιών. Παράδειγµα σχεδίασης µακροε-
σης. Από το σχήµα διαπιστώνουµε πως η κατασκευή ενός ντολής παρουσιάζεται στο επόµενο σχήµα.
ερωτήµατος, περιλαµβάνει τον καθορισµό τόσο των πινάκων
που συµµετέχουν σε αυτό, όσο και των πεδίων αυτών των
πινάκων των οποίων τις τιµές επιθυµούµε να ανακτήσουµε.
Στην περίπτωση κατά την οποία δεν έχουν ορισθεί ακόµη οι
συσχετίσεις που υφίστανται ανάµεσα στους πίνακες, θα πρέπει
να καθορίσουµε και το πλήθος και τη µορφή αυτών των συ-
σχετίσεων. Τέλος για κάποια από τα πεδία που συµµετέχουν
στο νέο ερώτηµα, µπορούµε προαιρετικά να καθορίσουµε και
κάποια κριτήρια, τα οποία θα πρέπει να ικανοποιούνται από Στο παράδειγµα του παραπάνω σχήµατος, η νέα µακροε-
τις εγγραφές που επιστρέφονται από αυτό. Στο παράδειγµα ντολή επιλέγει κάποιο αντικείµενο, εφαρµόζει κατάλληλο
του παραπάνω ερωτήµατος, οι επιστρεφόµενες εγγραφές περι- φίλτρο πάνω στα δεδοµένα που περιλαµβάνονται σε αυτό,
λαµβάνουν τα ονοµατεπώνυµα των προσώπων που έχουν και στη συνέχεια προχωρεί στην εκτύπωση του περιεχο-
δανειστεί βιβλία του συγγραφέα Johnson. µένου του.

ΠΡΟΒΟΛΕΣ ΕΡΩΤΗΜΑΤΟΣ Η χρήση των ενεργειών στις µακροεντολές της Microsoft


Access, απαιτεί τον καθορισµό κάποιων παραµέτρων
για αυτές τις ενέργειες. Τυπικό παράδειγµα καθορισµού
τέτοιων παραµέτρων για τη διαδικασία της εκτύπωσης,
παρουσιάζεται στο επόµενο σχήµα:

• Προβολή Σχεδίασης: επιτρέπει την κατασκευή του


ερωτήµατος και τη µεταβολή της δοµής του
• Προβολή Φύλλου ∆εδοµένων: επιτρέπει την προεπισκό-
πηση των εγγραφών που επιστρέφονται από το ερώτηµα Από το παραπάνω σχήµα διαπιστώνουµε πως οι παράµε-
• Προβολή SQL: επιτρέπει την προεπισκόπηση του κώδικα τροι που θα πρέπει να καθορίσουµε για αυτή τη διαδικα-
SQL που αντιστοιχεί στο τρέχον ερώτηµα και ο οποίος σία, αφορούν την περιοχή σελίδων εκτύπωσης, την ποιό-
δηµιουργείται αυτόµατα από την Access κατά τη διάρκεια τητα εκτύπωσης και τον αριθµό των αντιτύπων που επι-
της σχεδίασης του ερωτήµατος. θυµούµε να εκτυπώσουµε.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Συνοπτικός Οδηγός Χρήσης της Microsoft Access 2000 4

ΛΕΙΤΟΥΡΓΙΚΕΣ ΜΟΝΑ∆ΕΣ (MODULES) STRUCTURED QUERY LANGUAGE (SQL)

Οι λειτουργικές µονάδες ορίζονται ως τµήµατα κώδικα Η τυπική δοµή µιας πρότασης SQL έχει τη µορφή
γραµµένα σε γλώσσα VBA (Visual Basic for Applications)
δια της χρήσης των οποίων µπορούµε να υλοποιήσουµε πολύ- SELECT [FIELD LIST] FROM [TABLE LIST]
πλοκες διαδικασίες που δεν µπορούν να υλοποιηθούν µε άλ- WHERE [CRITERIA]
λους τρόπους. Τυπικό παράδειγµα συνάρτησης που αποτελεί
µέρος λειτουργικής µονάδας, παρουσιάζεται στο ακόλουθο Για παράδειγµα για να ανακτήσουµε τα ονοµατεπώνυµα
σχήµα: όλων των µαθητών της Β Λυκείου που έχουν ηλικία µε-
γαλύτερη των 18 ετών, θα πρέπει να χρησιµοποιήσουµε
την πρόταση SQL

SELECT FNAME, LNAME FROM STUDENTS


WHERE CLASS=B AND AGE>18.

Τα πιο σηµαντικά από τα κριτήρια που µπορούµε να θέ-


σουµε για ένα πεδίο είναι τα ακόλουθα:

Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η


“Paris” τιµή του θεωρούµενου πεδίου είναι η συµβολοσειρά
“Paris”.
Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
NOT
τιµή του θεωρούµενου πεδίου δεν περιέχει τη συµβο-
Από το παράδειγµα αυτό διαπιστώνουµε πως η δηµιουργία “GR”
λοσειρά “GR”.
των λειτουργικών µονάδων χαρακτηρίζεται από τους Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
Like
ίδιους κανόνες που περιγράφουν τον τρόπο σύνταξης ενός “S*”
τιµή του θεωρούµενου πεδίου ξεκινά µε το γράµµα
προγράµµατος σε µια τυπική γλώσσα προγραµµατισµού – “S”.
Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
αυτό σηµαίνει πως µέσα σε µια λειτουργική µονάδα µπορούν Like
τιµή του θεωρούµενου πεδίου τερµατίζεται µε το
να δηλωθούν µεταβλητές και σταθερές, να ορισθούν διαδι- “*S”
γράµµα “S”.
κασίες και συναρτήσεις και να χρησιµοποιηθούν δοµές Like
Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
βρόγχων και εντολών διακλάδωσης του προγράµµατος τιµή του θεωρούµενου πεδίου ξεκινά µε κάποιο από
“[A-F]*”
τα γράµµατα A έως F.
IS Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
Η σύνταξη του κώδικα µιας λειτουργικής µονάδας ακολουθεί NULL τιµή του θεωρούµενου πεδίου είναι η τιµή NULL
τις αρχές του αντικειµενοστραφούς προγραµµατισµού. Εάν IS NOT Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
για παράδειγµα AUTHOR_LIST είναι το όνοµα ενός πλαι- NULL τιµή του θεωρούµενου πεδίου δεν είναι NULL.
Εµφανίζει τις εγγραφές του πίνακα για τις οποίες η
σίου λίστας, η απενεργοποίηση αυτού του πλαισίου κάθε φορά >100 τιµή του θεωρούµενου πεδίου είναι µεγαλύτερη από
που αυτό είναι αναγκαίο, µπορεί να γίνει µε µια εντολή της 100.
µορφής AUTHOR_LIST.Enabled = False.

ΑΣΦΑΛΕΙΑ ΒΑΣΕΩΝ ∆Ε∆ΟΜΕΝΩΝ

Οι µοντέρνες εκδόσεις της Microsoft Access επιτρέπουν την


προστασία των δεδοµένων της βάσης δεδοµένων από
ανεπιθύµητες προσπελάσεις, δια του καθορισµού χρηστών
και οµάδων χρηστών κάθε ένας από τους οποίους διατηρεί
το δικό του κωδικό χρήστη και τα δικά του δικαιώµατα
πρόσβασης. Τυπικές διαδικασίες καθορισµού δικαιωµάτων
πρόσβασης για την τρέχουσα βάση δεδοµένων, παρουσιάζο-
νται στο menu επιλογών που βρίσκεται στο δεξί µέρος της
σελίδας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 1
Εισαγωγή
Στο κεφάλαιο αυτό παρουσιάζεται µια συνοπτική εισαγωγή
στη θεωρία των βάσεων δεδοµένων και των συστηµάτων
διαχείρισης βάσεων δεδοµένων, προκειµένου ο αναγνώστης
να κατανοήσει τις βασικές αρχές λειτουργίας τους και τους
λόγους για τους οποίους αυτά χρησιµοποιούνται

Η ΕΝΝΟΙΑ ΤΟΥ ∆Ε∆ΟΜΕΝΟΥ ΚΑΙ ΤΟΥ ΤΥΠΟΥ ∆Ε∆ΟΜΕΝΩΝ

Όπως είναι σε όλους µας γνωστό, ο άνθρωπος κατά τη διάρκεια της ζωής του
βρίσκεται σε µια συνεχή επικοινωνία µε το περιβάλλον του. Η επικοινωνία αυτή
µπορεί να γίνει µε πολλούς τρόπους, όπως είναι η οµιλία, ο γραπτός λόγος και κυρίως
τα αισθητήρια όργανά του. Το κύριο χαρακτηριστικό αυτής της επικοινωνίας, είναι η
ανταλλαγή πληροφοριών που λαµβάνει χώρα ανάµεσα στον κάθε άνθρωπο και το
χώρο µέσα στον οποίο ζει και κινείται. Ο άνθρωπος είναι τόσο ποµπός όσο και
αποδέκτης της πληροφορίας, δηλαδή, µπορεί τόσο να µεταδώσει, όσο και να λάβει
πληροφορίες. Οι πληροφορίες αυτές µπορεί να είναι οποιασδήποτε µορφής, και να
αφορούν σκέψεις, περιγραφές, ή ακόµη και συναισθήµατα. Μπορούν να παραµένουν
οι ίδιες ή να αλλάζουν µε την πάροδο του χρόνου. Σε όλες όµως τις περιπτώσεις
έχουν ένα κοινό χαρακτηριστικό: µεταφέρουν κάποιο περιεχόµενο. Το περιεχόµενο
αυτό, εξαρτάται άµεσα από το φυσικό σύστηµα στο οποίο αναφέρεται: µπορεί να
είναι η αξία κάποιας µετοχής στο χρηµατιστήριο, το αποτέλεσµα µιας ποδοσφαιρικής
αναµέτρησης, η θερµοκρασία ενός καταψύκτη, αλλά και το όνοµα κάποιου φίλου
µας, ο αριθµός της τηλεφωνικής µας σύνδεσης, και η χωρητικότητα του σκληρού
δίσκου που βρίσκεται στον υπολογιστή µας.

Από τα όσα αναφέρονται παραπάνω, είναι προφανές πως η πληροφορία


αποτελεί απαραίτητο συστατικό κάθε φυσικού συστήµατος. Στην επιστήµη της
Πληροφορικής, όλες αυτές οι πληροφορίες χαρακτηρίζονται ως δεδοµένα (data). Τα
δεδοµένα λοιπόν µπορούν να οριστούν ως τρόποι αναπαράστασης εννοιών και
γεγονότων που δύνανται να υποστούν διαχείριση και επεξεργασία από τον
άνθρωπο, ή από ένα αυτοµατοποιηµένο υπολογιστικό σύστηµα. Αυτοί οι τρόποι
αναπαράστασης, συσχετίζονται άµεσα µε τη φύση της πληροφορίας που µεταφέρεται
από τα δεδοµένα.

Στην επιστήµη της Πληροφορικής, τα δεδοµένα αναπαρίστανται και


µοντελοποιούνται µε εντελώς συγκεκριµένο τρόπο. Είναι σε όλους µας γνωστό πως
Κεφάλαιο 1 : Εισαγωγή στις βάσεις δεδοµένων 2

το αριθµητικό σύστηµα που χρησιµοποιούν οι ηλεκτρονικοί υπολογιστές, είναι το


δυαδικό αριθµητικό σύστηµα. Στο σύστηµα αυτό υπάρχουν µόνο δύο αριθµοί, το 0
και το 1. Ο κάθε ένας από αυτούς τους αριθµούς, αποτελεί τη στοιχειώδη ποσότητα
πληροφορίας που µπορεί να αποθηκευτεί στον υπολογιστή, και ονοµάζεται bit. Η
αµέσως µεγαλύτερη µονάδα πληροφορίας, είναι το byte. Ένα byte είναι ίσο µε 8 bits.
Πώς όµως όλα αυτά συσχετίζονται µε την αναπαράσταση των δεδοµένων στον
υπολογιστή? Πολύ απλά, µε το να ορίσουµε ειδικούς τύπους δεδοµένων, οι οποίοι
θα περιγράφουν τα δεδοµένα µας µε ένα και µοναδικό τρόπο. Εάν ξαναγυρίσουµε στα
παραδείγµατα των δεδοµένων που αναφέραµε στην προηγούµενη παράγραφο, δεν
είναι δύσκολο να καταλάβουµε, ότι εφόσον η αξία της µετοχής στο χρηµατιστήριο
είναι ένας αριθµός, θα πρέπει να χρησιµοποιήσουµε ένα τύπο δεδοµένων που να
περιγράφει τους αριθµούς. Ένας αριθµός όµως µπορεί να είναι ακέραιος, δεκαδικός,
ή ακόµη και µιγαδικός, οπότε θα πρέπει να ορίσουµε αντίστοιχους τύπους
δεδοµένων. Το όνοµα του φίλου µας είναι µία λέξη, πρέπει συνεπώς να υπάρχει
κάποιος τύπος δεδοµένων που να περιγράφει τις λέξεις, κ.ο.κ. ∆ιαπιστώνουµε
εποµένως, ότι υπάρχει µια αντιστοιχία ανάµεσα στα δεδοµένα του πραγµατικού
µας κόσµου, και στην αναπαράστασή τους, στον ηλεκτρονικό υπολογιστή.

Οι πιο συνηθισµένοι τύποι δεδοµένων που χρησιµοποιούνται στα σύγχρονα


πληροφοριακά συστήµατα, είναι οι ακόλουθοι:

Ονοµασία Περιγραφή Μέγεθος σε bytes

Integer Ακέραιοι αριθµοί 2


Real Πραγµατικοί αριθµοί 4
Char Χαρακτήρες 1
String Λέξεις και φράσεις Μεταβλητό
Date Ηµεροµηνία 8

Πίνακας 1: Τύποι δεδοµένων που χρησιµοποιούνται στους Ηλεκτρονικούς Υπολογιστές

Σύνθετοι τύποι δεδοµένων: Είναι προφανές, πως τα όσα έχουν αναφερθεί


µέχρι τώρα, αφορούν στοιχειώδεις µορφές δεδοµένων. Τα δεδοµένα αυτά
συσχετίζονται µε µια και µοναδική τιµή, και δεν µπορούν να αναλυθούν σε
µικρότερες µονάδες, µε κανένα τρόπο. Στις πιο συνηθισµένες όµως περιπτώσεις, τα
δεδοµένα υφίστανται ευκολότερη και αποτελεσµατικότερη διαχείριση εάν
οµαδοποιηθούν σε µεγαλύτερες οντότητες, τις οποίες διαπραγµατευόµαστε όπως
ακριβώς και τα απλά δεδοµένα. Ας πάρουµε για παράδειγµα την περίπτωση ενός
νοσοκοµείου. Εάν θελήσουµε να δηµιουργήσουµε ένα πρόγραµµα στο οποίο θα
καταχωρούµε τα στοιχεία των ασθενών, τότε τα στοιχεία εκείνα που θα κρατάµε για
κάθε ασθενή, θα είναι το όνοµά του, το επώνυµό του, η ηλικία του, και ο κωδικός
του – ας περιοριστούµε µόνο σε αυτά. Στην περίπτωση αυτή, ο προγραµµατιστής έχει
δυο επιλογές: είτε να δηµιουργήσει τέσσερα διαφορετικά πεδία στα οποία θα
καταχωρεί τα στοιχεία του ασθενούς, είτε να δηµιουργήσει ένα σύνθετο τύπο
δεδοµένων – τον οποίο ας ονοµάσουµε Patient – που θα περιέχει τα τέσσερα
πεδία που περιγράψαµε παραπάνω. Οι δύο αυτές προσεγγίσεις παρουσιάζονται στο
επόµενο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 3

Όνοµα ΑΣΘΕΝΗΣ

Επώνυµο Όνοµα
Επώνυµο
Ηλικία Ηλικία
Κωδικός
Κωδικός

Σχήµα 1: Περιγραφή οντότητας µε απλούς και σύνθετους τύπους δεδοµένων

Είναι προφανές, ότι η δεύτερη προσέγγιση είναι πιο αποτελεσµατική σε σχέση µε


την πρώτη, διότι τα τέσσερα δεδοµένα που σχηµατίζουν τον σύνθετο τύπο δεδοµένων
Patient, υφίστανται διαχείριση, σαν να ήταν ένας απλός τύπος δεδοµένων. Αυτό
όπως θα δούµε, είναι πολύ σηµαντικό, διότι µας επιτρέπει να ανακτούµε πληροφορίες
από την εφαρµογή µε απλό και εύκολο τρόπο.

Στις συµβατικές γλώσσες προγραµµατισµού, αυτοί οι σύνθετοι τύποι


δεδοµένων ονοµάζονται δοµές δεδοµένων (data structures). Στην τεχνολογία των
βάσεων δεδοµένων, οι δοµές αυτές ονοµάζονται εγγραφές (records).

ΒΑΣΕΙΣ ∆Ε∆ΟΜΕΝΩΝ

Στις προηγούµενες παραγράφους ορίσαµε την έννοια του δεδοµένου, και


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

Στην παράγραφο αυτή, θα προχωρήσουµε ένα βήµα παραπέρα και θα δούµε


µε ποιο τρόπο µπορούµε να µοντελοποιήσουµε ένα σύστηµα, χρησιµοποιώντας
σύνθετους τύπους δεδοµένων. Θα στηριχθούµε ξανά στο παράδειγµα του
νοσοκοµείου που περιγράψαµε παραπάνω. Ένα νοσοκοµείο είναι γενικά ένα
πολύπλοκο σύστηµα. Περιλαµβάνει γιατρούς, νοσοκόµες, ασθενείς, και ένα σωρό
άλλα πράγµατα. Κάθε γιατρός έχει µια ειδικότητα, και εργάζεται σε κάποια από
τις κλινικές του νοσοκοµείου. Το ίδιο ισχύει και για τις νοσοκόµες. Κάθε ασθενής
έχει κάποια πάθηση, του γίνεται κάποια διάγνωση, και ακολουθεί κάποια
θεραπεία. Εάν περιγράψουµε σε πλήρη έκταση τη λειτουργία του νοσοκοµείου, θα
βρεθούµε αντιµέτωποι µε ένα τεράστιο και πολύπλοκο σύστηµα, το οποίο θα πρέπει
να µηχανογραφήσουµε. Τι θα πρέπει να κάνουµε στην περίπτωση αυτή?

Η απάντηση στο ερώτηµα αυτό είναι απλή. Αρχικά θα πρέπει να


ταυτοποιήσουµε τις οντότητες που συµµετέχουν στο σύστηµα. Όπως θα δούµε σε
επόµενη ενότητα, οι οντότητες (entities) είναι αυτόνοµες µονάδες που κινούνται
µέσα στο σύστηµα, και ο ρόλος τους είναι εντελώς συγκεκριµένος. Στην
προκειµένη περίπτωση, ως οντότητες του συστήµατος µπορούµε να χαρακτηρίσουµε
για παράδειγµα τους γιατρούς, τις νοσοκόµες, και τους ασθενείς. Εφ’ όσον

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 1 : Εισαγωγή στις βάσεις δεδοµένων 4

ταυτοποιήσουµε τις οντότητες του συστήµατος, στο επόµενο βήµα θα πρέπει να


δούµε, ποιες πληροφορίες θα πρέπει να κρατάµε για κάθε οντότητα.
Ταυτοποιώντας και αυτές τις πληροφορίες, µπορούµε στη συνέχεια να
δηµιουργήσουµε ένα σύνθετο τύπο δεδοµένων για κάθε µια από αυτές τις οντότητες.
Ένα παράδειγµα αυτής της προσέγγισης, απεικονίζεται παρακάτω:

ΑΣΘΕΝΗΣ ΙΑΤΡΟΣ ΝΟΣΟΚΟΜΑ

Όνοµα Όνοµα Όνοµα


Επώνυµο Επώνυµο Επώνυµο
Ηλικία Ειδικότητα Κλινική
Κωδικός Κωδικός Κωδικός

Σχήµα 2: Σύνθετοι τύποι δεδοµένων για τις οντότητες ενός νοσοκοµείου

Μετά τη δηµιουργία αυτών των τύπων δεδοµένων – και όσων άλλων


χρειαστεί – µπορεί στη συνέχεια να αρχίσει η διαδικασία καταχώρησης των στοιχείων
που συσχετίζονται µε τη λειτουργία του νοσοκοµείου. Στην πραγµατικότητα
υπάρχουν και κάποια άλλα πράγµατα που θα πρέπει να γίνουν, αλλά για την ώρα ας
περιοριστούµε µόνο σε αυτή την απλή περιγραφή. Το σύνολο όλων αυτών των
πληροφοριών που καταχωρούνται στο σύστηµα, αποτελούν µια βάση δεδοµένων
(data base).

Η βάση δεδοµένων ορίζεται λοιπόν ως ένα σύνολο δεδοµένων που


χαρακτηρίζονται από κάποια λογική οργάνωση και οµαδοποίηση έτσι ώστε να
είναι εύκολη και αποτελεσµατική η διαχείρισή τους.

Οι βάσεις δεδοµένων κατέχουν κεντρική θέση στην επιστήµη της


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

ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΗΣ ΒΑΣΗΣ ∆Ε∆ΟΜΕΝΩΝ

Μια βάση δεδοµένων για να θεωρηθεί σωστά σχεδιασµένη και να µπορεί να


λειτουργήσει µε αποτελεσµατικό τρόπο, θα πρέπει να διαθέτει ένα πλήθος
χαρακτηριστικών τα πιο σηµαντικά εκ των οποίων, είναι τα ακόλουθα:

1) ∆εν θα πρέπει να περιλαµβάνει περιττά δεδοµένα (reduntant data).


Αυτό σηµαίνει ότι τα ίδια δεδοµένα δεν θα πρέπει να καταχωρούνται στη βάση
δύο φορές. Εάν συµβαίνει κάτι τέτοιο, τότε ανακύπτουν δυο σοβαρά προβλήµατα. Το

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 5

πρώτο και προφανές πρόβληµα, είναι ότι σπαταλούµε άσκοπα αποθηκευτικό χώρο
στο σκληρό δίσκο, αφού την ίδια πληροφορία την αποθηκεύουµε δύο φορές. Το
δεύτερο και σοβαρότερο πρόβληµα, είναι ότι υπάρχει ο κίνδυνος δηµιουργίας
ασυνεπών δεδοµένων (inconsistent data). Πράγµατι, εάν κρατάµε δύο φορές την
ίδια πληροφορία και η πληροφορία αυτή σε κάποια χρονική στιγµή υποστεί κάποιο
είδος επεξεργασίας – για παράδειγµα την τροποποιήσουµε ή τη διαγράψουµε – τότε η
επεξεργασία αυτή θα πρέπει να εφαρµοσθεί και στις δύο καταχωρήσεις που αφορούν
το ίδιο δεδοµένο, διότι διαφορετικά, η βάση θα περιέχει δεδοµένα που δεν είναι
συνεπή. Για το λόγο αυτό, ένας από τους πρώτους ελέγχους που πραγµατοποιούµε
στη βάση αµέσως µετά το σχεδιασµό της, είναι ο έλεγχος παρουσίας
επαναλαµβανόµενων πεδίων, και η αποµάκρυνσή τους, εφ όσον υπάρχουν.

2) Η βάση θα πρέπει να είναι σχεδιασµένη έτσι ώστε τα δεδοµένα που


περιλαµβάνει να ανακτώνται εύκολα και γρήγορα. Μια κακή σχεδίαση της δοµής
της βάσης, οδηγεί στη δηµιουργία µιας βάσης η οποία είναι εξαιρετικά δυσκίνητη και
αναποτελεσµατική. Η σωστή σχεδίαση µιας βάσης δεδοµένων, επιτυγχάνεται µε
εφαρµογή επί της δοµής της βάσης, µιας τεχνικής, η οποία ονοµάζεται
κανονικοποίηση (normalization). Η περιγραφή αυτής της τεχνικής παρουσιάζεται
διεξοδικά σε επόµενη ενότητα.

3) Η βάση θα πρέπει να χαρακτηρίζεται από σύστηµα ασφάλειας (security


system) που να απαγορεύει την πρόσβαση στα δεδοµένα µη εξουσιοδοτηµένων
ατόµων. Αυτό ισχύει κυρίως όπως θα δούµε, σε µεγάλες βάσεις δεδοµένων µε
πολλούς χρήστες, και η τεχνική που συνήθως εφαρµόζεται, συνίσταται στον
καθορισµό οµάδων χρηστών (user groups) µε διαφορετικά δικαιώµατα πρόσβασης
στον καθένα από αυτούς. Ο κάθε χρήστης λαµβάνει ένα κωδικό πρόσβασης
(password) και τα καθήκοντα που µπορεί να επιτελέσει είναι εντελώς συγκεκριµένα
και καθορισµένα εκ των προτέρων.

4) Η βάση θα πρέπει να µπορεί να διαχειρίζεται ταυτόχρονες


προσπελάσεις πάνω στα ίδια δεδοµένα (concurrency control). Ένα σύστηµα
κράτησης αεροπορικών εισιτηρίων που δέχεται ταυτόχρονες κλήσεις για κρατήσεις
θέσεων, θα πρέπει να έχει τη δυνατότητα να αποτρέψει την καταχώρηση της ίδιας
θέσης σε δύο άτοµα που την έχουν ζητήσει ταυτόχρονα.

5) Η βάση θα πρέπει να διαθέτει σύστηµα δηµιουργίας αντιγράφων


ασφαλείας των δεδοµένων που είναι καταχωρηµένα σε αυτή (backups). Η
ταυτόχρονη αποθήκευση των δεδοµένων σε περισσότερους από ένα δίσκους, είναι
µια εργασία επιβεβληµένη, προκειµένου να είναι δυνατή η ανάκτησή τους σε
περιπτώσεις κατάρρευσης της βάσης για οποιοδήποτε λόγο.

ΣΥΣΤΗΜΑΤΑ ∆ΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ ∆Ε∆ΟΜΕΝΩΝ

Η διαχείριση µιας βάσης δεδοµένων πραγµατοποιείται µε τη βοήθεια ειδικών


προγραµµάτων, που ονοµάζονται συστήµατα διαχείρισης βάσεων δεδοµένων
(Database Management Systems, DBMS). Ο ρόλος αυτών των συστηµάτων είναι η
αποτελεσµατική επεξεργασία των δεδοµένων της βάσης. Πιο συγκεκριµένα, µέσω
των συστηµάτων διαχείρισης βάσεων δεδοµένων, µπορούµε να υλοποιήσουµε και να
διαχειριστούµε οποιαδήποτε βάση. ∆ιακρίνουµε τρία στάδια:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 1 : Εισαγωγή στις βάσεις δεδοµένων 6

Τη σχεδίαση και υλοποίηση της βάσης. Το στάδιο αυτό πραγµατοποιείται


από ειδικό προγραµµατιστή ο οποίος αφού αναλύσει τις απαιτήσεις που έχουµε από
τη βάση δεδοµένων, προχωρεί στο σχεδιασµό και την υλοποίησή της,
χρησιµοποιώντας τα κατάλληλα εργαλεία ανάπτυξης. Το στάδιο αυτό
πραγµατοποιείται µόνο µια φορά και απαιτεί ιδιαίτερη προσοχή, καθώς µια
εσφαλµένη σχεδίαση, είναι δυνατόν να οδηγήσει σε αναποτελεσµατική διαχείριση
των δεδοµένων, κάτι που µακροπρόθεσµα θα κοστίσει, τόσο χρόνο, όσο και χρήµα.

Την καταχώρηση των δεδοµένων στη βάση του συστήµατος. Μετά τη


σωστή σχεδίαση και υλοποίηση της βάσης, µπορούµε πλέον να καταχωρήσουµε σε
αυτή τα δεδοµένα του συστήµατος για το οποίο υλοποιήθηκε. Η διαδικασία της
καταχώρησης γίνεται µε τη βοήθεια κατάλληλα σχεδιασµένων φορµών, και µπορεί να
πραγµατοποιηθεί από οποιονδήποτε.

Τη διαχείριση των δεδοµένων της βάσης. Η διαχείριση αυτή περιλαµβάνει


µια σειρά από δραστηριότητες όπως την ανάκτηση δεδοµένων που πληρούν
συγκεκριµένα κριτήρια αναζήτησης, τη δηµιουργία αντιγράφων ασφαλείας, και τη
µέριµνα για τη σωστή συντήρηση της βάσης εφ’ όσον η δυνατότητα αυτή παρέχεται
από το σύστηµα διαχείρισης βάσεων δεδοµένων που χρησιµοποιούµε.

Κατά καιρούς έχουν εµφανιστεί στην αγορά πολλά συστήµατα διαχείρισης


βάσεων δεδοµένων, από πολλές εταιρείες, τα οποία ποικίλλουν, τόσο στη σχεδίαση
και διαχείριση της βάσης, όσο και στις δυνατότητες που προσφέρουν. Τα πιο γνωστά
και ευρέως χρησιµοποιούµενα συστήµατα διαχείρισης βάσεων δεδοµένων είναι η
Microsoft Access, η Oracle, η Informix, η Sybase, και παλαιότερα η dBase III plus
και η dBase IV. Από τα µοντέρνα συστήµατα διαχείρισης, η Microsoft Access
χρησιµοποιείται κυρίως για την ανάπτυξη και διαχείριση βάσεων δεδοµένων σε
προσωπικούς υπολογιστές και σε επιχειρήσεις µεσσαίου µεγέθους, ενώ η Oracle και
η Sybase, χρησιµοποιούνται σε µεγάλες επιχειρήσεις, και υποστηρίζουν πολλούς
χρήστες, πολλές ταυτόχρονες προσπελάσεις πάνω στα ίδια δεδοµένα, καθώς και
αποµακρυσµένη πρόσβαση µέσω δικτύου.

Ας περάσουµε τώρα στην περιγραφή των παραπάνω τριών σταδίων, που


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

Στάδιο 1: Σχεδίαση και υλοποίηση της βάσης

Η σχεδίαση µιας βάσης δεδοµένων περιλαµβάνει τον καθορισµό της δοµής


της βάσης, των τύπων δεδοµένων που θα καταχωρούνται στη βάση, και του
πλήθους και του είδους των διαδικασιών που θα εφαρµόζονται στα δεδοµένα της
βάσης. Στο σηµείο αυτό θα πρέπει να αναφέρουµε ότι πριν το σχεδιασµό της βάσης,
προηγείται πλήρης ανάλυση της συµπεριφοράς και των απαιτήσεων του
συστήµατος που πρόκειται να υλοποιήσουµε. Οι τεχνικές λεπτοµέρειες που
αφορούν αυτή την ανάλυση είναι αδύνατο να αναφερθούν εδώ, και αποτελούν
αντικείµενο µιας ολόκληρης θεµατικής ενότητας, µε τίτλο Ανάλυση και Σχεδιασµός
Συστηµάτων. Στην ενότητα αυτή θα περιοριστούµε µόνο σε µια συνοπτική
περιγραφή της µεθοδολογίας που ακολουθείται.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 7

Μιλώντας γενικά, η σχεδίαση µιας βάσης δεδοµένων, µπορεί να ορισθεί ως


µια διεργασία τριών επιπέδων. Τα επίπεδα αυτά είναι, το φυσικό επίπεδο (physical
level), το λογικό επίπεδο (logical level), και το επίπεδο όψης (view level).

Στο φυσικό επίπεδο, η κύρια µέριµνά µας είναι ο καθορισµός του τρόπου µε
τον οποίο τα δεδοµένα της βάσης θα αποθηκεύονται στο σύστηµα. Στο επίπεδο
αυτό, καθορίζουµε τους τύπους των δεδοµένων της βάσης, τους αλγόριθµους
διαχείρισης των δεδοµένων, και γενικά, ασχολούµαστε µε διαδικασίες οι οποίες
χαρακτηρίζονται από µεγάλο βαθµό πολυπλοκότητας.

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

Τέλος, στο επίπεδο όψης, καθορίζουµε εκείνο το τµήµα της βάσης που θα
είναι ορατό σε κάθε χρήστη. Αυτό κυρίως βρίσκει εφαρµογή σε µεγάλες βάσεις
δεδοµένων µε πολύπλοκη σχεδάση και µεγάλο αριθµό χρηστών. Ας πάρουµε ξανά για
παράδειγµα τη βάση δεδοµένων του νοσοκοµείου. Τα δεδοµένα που καταχωρούνται
στη βάση αυτή, είναι κάθε είδους, και γενικά µη συσχετιζόµενα µεταξύ τους. Για
παράδειγµα, για κάθε ασθενή, καταχωρούµε τα προσωπικά και οικονοµικά του
στοιχεία, το ιατρικό ιστορικό του, και την εξέλιξη της υγείας του. Τα στοιχεία
αυτά, τα χειρίζονται εν γένει, διαφορετικοί χρήστες: τα οικονοµικά στοιχεία τα
επεξεργάζεται η γραµµατεία του νοσοκοµείου, ενώ τα ιατρικά στοιχεία, οι
θεράποντες ιατροί του ασθενούς. Αυτό σηµαίνει ότι το πρόγραµµα που θα
χρησιµοποιείται στη γραµµατεία του νοσοκοµείου, θα εµφανίζει µόνο τα οικονοµικά
στοιχεία, ενώ τα προγράµµατα που χρησιµοποιούν οι ιατροί, θα εµφανίζουν µόνο τα
ιατρικά στοιχεία. Τα δεδοµένα λοιπόν που θα διαχειρίζονται οι δυο αυτές κατηγορίες
χρηστών, θα είναι εντελώς ξένα µεταξύ τους, και µάλιστα σε τέτοιο σηµείο, ώστε να
δηµιουργείται η ψευδαίσθηση ότι πρόκειται για δυο διαφορετικές βάσεις, ενώ στην
πραγµατικότητα, η βάση είναι µια και µοναδική. Ένας άλλος λόγος για τον οποίο
συµβαίνει αυτός ο διαχωρισµός, είναι ζητήµατα ασφαλείας. Για παράδειγµα, ένας
υπάλληλος της γραµµατείας, δεν θα πρέπει να µπορεί να διαβάζει τον ιατρικό
φάκελλο του ασθενούς, διότι παραβιάζει το ιατρικό απόρρητο. Όπως δε, θα δούµε
στη συνέχεια, είναι κοινή πρακτική, κυρίως στις περιπτώσεις των µεγάλων βάσεων
δεδοµένων, να ορίζονται οµάδες χρηστών στους οποίους να καταχωρούνται
διαφορετικά δικαιώµατα πρόσβασης, και διαφορετικά δεδοµένα προς
διαχείριση.

Στο επόµενο σχήµα απεικονίζονται τα επίπεδα σχεδιασµού της βάσης για το


παράδειγµα του νοσοκοµείου που περιγράψαµε παραπάνω.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 1 : Εισαγωγή στις βάσεις δεδοµένων 8

Επίπεδο όψης Επίπεδο όψης Επίπεδο όψης


Ιατρικού Νοσηλευτικού Γραµµατείας
Προσωπικού Προσωπικού

Λογικό
Επίπεδο

Φυσικό
Επίπεδο

Σχήµα 3: Επίπεδα Σχεδιασµού Βάσεων ∆εδοµένων

Η µοντελοποίηση του συστήµατος που υλοποιεί η βάση δεδοµένων,


πραγµατοποιείται µε τη βοήθεια ειδικών εργαλείων, και µε την εφαρµογή γνωστών
και καλά δοκιµασµένων τεχνικών. Αυτό γίνεται κυρίως στο λογικό επίπεδο
σχεδιασµού της βάσης, όπου ταυτοποιούνται τα δεδοµένα που θα καταχωρούνται
σε αυτή, καθώς και οι σχέσεις που υφίστανται ανάµεσά τους. Η λογική σχεδίαση
της βάσης, στηρίζεται και αυτή στη χρήση κάποιων µοντέλων που περιγράφουν τη
δοµή και τη λειτουργία της, Τα τελευταία χρόνια, που η τεχνολογία των βάσεων
δεδοµένων έχει γνωρίσει αλµατώδη ανάπτυξη, αναπτύχθηκαν πολλά τέτοια µοντέλα,
που στηρίζονται σε διαφορετικές εν γένει προσεγγίσεις. Τα τρια πιο γνωστά από αυτά
τα µοντέλα, είναι το ιεραρχικό µοντέλο (hierarchical model), το δικτυωτό µοντέλο
(network model) και το σχεσιακό µοντέλο (relational model). Στα κεφάλαια που
ακολουθούν, θα περιγραφεί µόνο το σχεσιακό µοντέλο, που χρησιµοποιείται κατά
κύριο λόγο στις µοντέρνες βάσεις δεδοµένων. Ο βασικός λόγος για τη διάδοση αυτού
του µοντέλου και τη χρησιµοποίησή του έναντι των δύο άλλων, είναι, όπως θα δούµε
σε επόµενα κεφάλαια, η χρήση πινάκων, για την περιγραφή του συστήµατος που
θέλουµε να µοντελοποιήσουµε.

Ο καθορισµός και η διαχείριση της δοµής της βάσης πραγµατοποιούνται µε τη


βοήθεια ειδικών γλωσσών προγραµµατισµού. Οι γλώσσες αυτές, χαρακτηρίζονται ως
γλώσσες τέταρτης γεννεάς (4th Generation Languages, 4GL), διότι σε αντίθεση µε
τις συµβατικές γλώσσες προγραµµατισµού – όπως είναι η Pascal και η Basic – δεν
υλοποιούν πολύπλοκες λειτουργίες χαµηλού επιπέδου, αλλα το µόνο που κάνουν
είναι να ανακτούν δεδοµένα από τη βάση του συστήµατος, χωρις ο χρήστης να
γνωρίζει πως λαµβάνει χώρα αυτή η διαδικασία. Εκτός από την ανάκτηση των
δεδοµένων, οι γλώσσες αυτές προσφέρουν και πιο προχωρηµένες λειτουργίες, όπως
είναι η δηµιουργία νέων δοµών δεδοµένων µέσα στη βάση, η διαγραφή και η

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 9

τροποποίηση αυτών, και ο ορισµός συσχετίσεων µεταξύ των στοιχείων της


βάσης.

Μια απαραίτητη διευκρίνιση που πρέπει να γίνει στο σηµείο αυτό, αφορά το
είδος των λειτουργιών που εφαρµόζονται στη βάση δεδοµένων. Οι λειτουργίες αυτές
µπορούν να διαχωριστούν σε δύο κατηγορίες: σ’ αυτές που τροποποιούν τη δοµή
της βάσης, και σ’ εκείνες που τροποποιούν το περιεχόµενο της βάσης, δηλαδή τα
δεδοµένα που αποθηκεύονται σε αυτή. Η διαγραφή ενός ασθενούς από το µητρώο
των ασθενών της κλινικής, δεν µεταβάλλει τη δοµή της βάσης, απλώς ελαττώνει τον
αριθµό των εγγεγραµµένων ασθενών κατά ένα. Αντίθετα η προσθήκη κάποιας
καινούριας πληροφορίας στο φάκελο του ασθενή, όπως για παράδειγµα η οµάδα
αίµατός του, µεταβάλλει τη δοµή της βάσης, αφού τα δεδοµένα που καταχωρούνται
σε αυτή, έχουν πλέον αλλάξει. Είναι προφανές, ότι οι απλοί χρήστες που
χρησιµοποιούνται για τη διαχείριση των δεδοµένων του συστήµατος, δεν πρέπει να
µπορούν σε καµιά περίπτωση να αλλάξουν τη δοµή της βάσης, κάτι που µπορεί να
γίνει µόνο από τον διαχειριστή της βάσης δεδοµένων (Database Administrator,
DBA). Αυτό σηµαίνει ότι για τα δύο αυτά επίπεδα διαχείρισης, χρησιµοποιούνται
διαφορετικές γλώσσες προγραµµατισµού: µια γλώσσα που είναι υπεύθυνη για τον
ορισµό και την τροποποίηση της δοµής της βάσης και η οποία ονοµάζεται
γλώσσα ορισµού δεδοµένων (Data Definition Language, DDL), και µια γλώσσα
που είναι υπεύθυνη για τη διαχείριση των δεδοµένων της βάσης, και η οποία
ονοµάζεται γλώσσα διαχείρισης δεδοµένων (Data Manipulation Language,
DML). Περισσότερες λεπτοµέρειες πάνω στον τρόπο χρησιµοποίησης αυτών των
γλωσσών, θα παρουσιαστούν σε επόµενο κεφάλαιο.

Στάδιο 2: Καταχώρηση δεδοµένων στη βάση

Στο στάδιο αυτό, η σχεδίαση και υλοποίηση της βάσης έχει πλέον
ολοκληρωθεί, και η βάση είναι έτοιµη να χρησιµοποιηθεί για την καταχώρηση των
δεδοµένων. Η καταχώρηση αυτή δεν απαιτεί ειδικές γνώσεις πληροφορικής, και
µπορεί να γίνει από οποιοδήποτε χρήστη, µε µικρή σχετικα εκπαίδευση πάνω στη
λειτουργία του προγράµµατος. Για την καταχώρηση των δεδοµένων
χρησιµοποιούνται ειδικές φόρµες που περιλαµβάνουν πλαίδια εισαγωγής δεδοµένων,
συνοδευόµενα από κάποιο τίτλο, που να περιγράφει τη λειτουργία τους. Μια τυπική
φόρµα καταχώρησης, φαίνεται στο επόµενο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 1 : Εισαγωγή στις βάσεις δεδοµένων 10

Σχήµα 4: Φόρµα Εισαγωγής ∆εδοµένων

Όπως φαίνεται από το σχήµα αυτό, τα δεδοµένα που καταχωρούνται στη


βάση, περιγράφονται από ετικέτες που συνήθως βρίσκονται πάνω, αριστερά ή δεξιά
από τα πλαίσια εισαγωγής των δεδοµένων. Εκτός όµως από τα πλαίσια εισαγωγής,
χρησιµοποιούµε και άλλα στοιχεία καταχώρησης δεδοµένων, όπως list boxes, combo
boxes, check boxes και radio buttons.

Η διαδικασία καταχώρησης δεδοµένων στη βάση του συστήµατος,


διευκολύνεται σε πολύ µεγάλο βαθµό, εάν οι φόρµες µέσα από τις οποίες ο χρήστης
καταχωρεί αυτά τα δεδοµένα, είναι λειτουργικές, έξυπνα σχεδιασµένες, και κυρίως,
χωρίς περιττά στοιχεία. Μια εφαρµογή η οποία δεν χαρακτηρίζεται από απλότητα
όσον αφορά τη λειτουργία της, είναι σίγουρο ότι θα τροµάξει τον απλό χρήστη και θα
µειώσει σηµαντικά την αποδοτικότητά του. Αντίθετα µια σωστά σχεδιασµένη
εφαρµογή που ανα πάσα στιγµή θα δίνει στο χρήστη να καταλάβει τι ακριβώς πρέπει
να κάνει, θα του επιτρέψει να ολοκληρώσει την εργασία του εύκολα και γρήγορα. Ο
σχεδιασµός της αλληλεπίδρασης του προγράµµατος µε τους χρήστες (User
Interface, UI), αποτελεί αναπόσπαστο στοιχείο κάθε εφαρµογής, και απαιτεί
πολύ µεγάλη προσοχή.

Στάδιο 3 : ∆ιαχείριση των δεδοµένων της βάσης

Η διαχείριση των δεδοµένων της βάσης, πραγµατοποιείται ανά πάσα στιγµή


µετά την υλοποίηση αυτής, και εφαρµόζεται στα δεδοµένα εκείνα που έχουν ήδη
καταχωρηθεί. Η κυριότερη µορφή διαχείρισης των δεδοµένων της εφαρµογής, έχει να
κάνει µε την επιλογή όσων από αυτά πληρούν κάποια κριτήρια αναζήτησης ή
έχουν κάποια συγκεκριµένη τιµή. Ας πάρουµε για παράδειγµα την περίπτωση µιας
βιβλιοθήκης, για την οποία έχουµε αναπτύξει µια βάση δεδοµένων. Έστω ότι θέλουµε
να µάθουµε ποια βιβλία είναι γραµµένα στην Ελληνική γλώσσα, αναφέρονται
στην Ιστορία του Βυζαντινού Πολιτισµού, και έχουν εκδοθεί στη δεκαετία του
1990. Είναι προφανές ότι χωρίς τη βάση δεδοµένων, η ανάκτηση αυτής της

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 11

πληροφορίας, θα απαιτούσε πολλές ώρες δουλειάς και πολύ µεγάλη προσπάθεια. Με


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

Μετά την ανάκτηση των δεδοµένων από τη βάση του συστήµατος, µπορούµε
να εφαρµόσουµε πάνω σε αυτά πολλούς τρόπους διαχείρισης, όπως για παράδειγµα,
να τα εκτυπώσουµε. Οι µηχανογραφικές καταστάσεις µε τις βαθµολογίες των
µαθητών που αναρτώνται στα Γυµνάσια και στα Λύκεια στο τέλος κάθε εξεταστικής
περιόδου, δεν αποτελούν παρά τέτοιου είδους εκτυπώσεις, οι οποίες δηµιουργούνται
από τα προγράµµατα που διαχειρίζονται τα δεδοµένα αυτού του είδους. Ένα άλλο
είδος διαχείρισης είναι η ταξινόµησή τους µε βάση κάποια κριτήρια, όπως για
παράδειγµα, µε αλφαβητική σειρά. Τέλος µπορούµε να παρέµβουµε στα ίδια τα
δεδοµένα και να αλλάξουµε τις τιµές τους, ή ακόµη και να τα διαγράψουµε από τη
βάση.

Όπως είναι λοιπόν εύκολο να διαπιστωθεί, οι διαδικασίες που εφαρµόζονται


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

Σε όλα τα συστήµατα διαχείρισης βάσεων δεδοµένων, η διαχείριση των


δεδοµένων γίνεται µε τη βοήθεια ειδικών εργαλείων. Τα εργαλεία αυτά είναι όπως
έχουµε ήδη περιγράψει η γλώσσα ορισµού δεδοµένων και η γλώσσα χειρισµού
δεδοµένων. Υπάρχουν πολλές εκδόσεις και πολλές µορφές για αυτές τις γλώσσες, τα
τελευταία όµως χρόνια έχει επικρατήσει ένα κοινό πρότυπο που φέρει το όνοµα
δοµηµένη γλώσσα ερωτοαποκρίσεων (Structured Query Language, SQL). Η
γλώσσα αυτή απαντάται σε όλα ανεξαιρέτως τα συστήµατα διαχείρισης βάσεων
δεδοµένων, και παρά το γεγονός ότι εµφανίζεται σε πολλές παραλλαγές, η βασική
ιδέα που περιγράφει τη λειτουργία της, είναι ουσιαστικά η ίδια.

Η σύνταξη και χρήση της γλώσσας SQL θα περιγραφεί µε µεγάλη


λεπτοµέρεια σε επόµενο κεφάλαιο. Στο σηµείο όµως αυτό µπορούµε να αναφέρουµε,
πως οι βασικές λειτουργίες που αυτή η γλώσσα επιτελεί, διαχωρίζονται σε τέσσερις
µεγάλες κατηγορίες, που είναι η εισαγωγή δεδοµένων (data insertion), η διαγραφή
δεδοµένων (data deletion), η ανάκτηση δεδοµένων (data retrieval) και η
τροποποίηση δεδοµένων (data update).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2
Μοντέλο Οντοτήτων
Συσχετίσεων
Στο κεφάλαιο αυτό παρουσιάζεται το µοντέλο οντοτήτων συ-
σχετίσεων, µια από τις πιο σηµαντικές διαγραµµατικές τεχνι-
κές που µας επιτρέπουν να καθορίσουµε τη δοµή της βάσης
δεδοµένων. Το κεφάλαιο περιλαµβάνει τόσο τη βασική θεωρία
που περιγράφει τη λειτουργία του µοντέλου όσο και αναλυτικά
παραδείγµατα που θα επιτρέψουν στον αναγνώστη να κατα-
νοήσει πλήρως τον τρόπο χρήσης του.

Το µοντέλο οντοτήτων συσχετίσεων (Entity Relationship model, ER


model) είναι µια διαγραµµατική αναπαράσταση της δοµής της βάσης δεδοµένων, και
ως εκ τούτου χρησιµοποιείται κατά το στάδιο του λογικού ή εννοιολογικού σχεδια-
σµού (conceptual design) της βάσης. Αυτό σηµαίνει πως η κεντρική λειτουργία του
δεν συνίσταται στον καθορισµό του τρόπου µε τον οποίο τα δεδοµένα της βάσης θα
αποθηκευθούν στο σύστηµα, αλλά µάλλον στην ταυτοποίηση των δεδοµένων της ε-
φαρµογής και του τρόπου µε τον οποίο αυτά συσχετίζονται µεταξύ τους.

Η παρουσίαση της δοµής του µοντέλου οντοτήτων συσχετίσεων που ακολου-


θεί στις επόµενες σελίδες, θα γίνει µέσα από ένα παράδειγµα προκειµένου ο τρόπος
χρήσης του να γίνει άµεσα κατανοητός. Το παράδειγµα αυτό αφορά τη βάση δεδο-
µένων µιας εταιρείας (Company Database), η οποία περιέχει δεδοµένα που αφο-
ρούν τους υπαλλήλους της εταιρείας (employees), τα τµήµατα στα οποία αυτή
υποδιαιρείται (departments) και τα έργα (projects) που ανατίθενται σε αυτά τα
τµήµατα. Πιο συγκεκριµένα, η δοµή και η λειτουργία της εταιρείας, φέρουν τα ακό-
λουθα χαρακτηριστικά :

Η εταιρεία (company) είναι χωρισµένη σε τµήµατα (departments). Κάθε


τµήµα φέρει ένα όνοµα, ταυτοποιείται από ένα κωδικό αριθµό, και εποπτεύεται από
κάποιο υπάλληλο (manager). Η βάση δεδοµένων επιτρέπει την καταχώρηση όχι µόνο
του κωδικού του manager του τµήµατος αλλά και της ηµεροµηνίας κατά την οποία ανέ-
λαβε την εποπτεία του. Τέλος ένα τµήµα µπορεί να είναι εγκατεστηµένο σε πολλά δια-
φορετικά σηµεία, δηλαδή να έχει γραφεία σε περισσότερες από µια περιοχές.
Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 14

Ένα τµήµα παρακολουθεί ένα ή περισσότερα έργα (projects) κάθε ένα εκ των
οποίων χαρακτηρίζεται από ένα όνοµα, ένα κωδικό αριθµό, και πραγµατοποιείται σε
κάποια συγκεκριµένη τοποθεσία (location).

Η πληροφορία που καταχωρείται στη βάση για κάθε υπάλληλο, είναι το όνοµά
του, ο κωδικός κοινωνικής ασφάλισης (social security number, SSN), η διεύθυνση,
ο µισθός του, το φύλο του και η ηµεροµηνία γέννησής του. Ένας υπάλληλος τοποθε-
τείται σε κάποιο από τα τµήµατα της εταιρείας (αλλά µόνο σε ένα τµήµα) και µπορεί
να απασχολείται ταυτόχρονα σε πολλά έργα, που δεν παρακολουθούνται υποχρεωτικά
από το ίδιο τµήµα. Για κάθε υπάλληλο µπορούµε να καταχωρήσουµε τον αριθµό των
ωρών ανά εβδοµάδα που απασχολείται στο κάθε έργο καθώς και τον κωδικό του
υπαλλήλου που τον επιβλέπει και τον καθοδηγεί (supervisor).

Τέλος για όσους υπάλληλους έχουν προστατευόµενα µέλη (dependents) µπο-


ρούµε να καταχωρήσουµε (για λόγους κοινωνικής ασφάλισης) το όνοµα του προστα-
τευόµενου µέλους, το φύλο του και την ηµεροµηνία γέννησής του, καθώς και το
είδος της συγγένειας ανάµεσα σε αυτό και στον υπάλληλο που καταχωρούµε.

Στις επόµενες σελίδες θα παρουσιάσουµε µια αναλυτική περιγραφή της δοµής


του µοντέλου οντοτήτων – συσχετίσεων µε βάση το παράδειγµα της εταιρείας που
περιγράψαµε στις προηγούµενες παραγράφους.

ΟΙ ΟΝΤΟΤΗΤΕΣ ΚΑΙ ΤΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΟΥΣ

Το πιο χαρακτηριστικό αντικείµενο που εµφανίζεται σε όλα τα µοντέλα οντο-


τήτων συσχετίσεων, είναι η οντότητα (entity). Μια οντότητα µπορεί να ορισθεί
ως µια αυτόνοµη και αυθύπαρκτη µονάδα του φυσικού κόσµου, η οποία µπορεί
να θεωρηθεί τόσο ως ποµπός ως και ως αποδέκτης πληροφορίας. Μια οντότητα
µπορεί να είναι έµψυχη (για παράδειγµα ένας ιατρός) ή άψυχη (για παράδειγµα ένα
δωµάτιο ενός νοσοκοµείου) αλλά µπορεί να είναι και κάτι πιο γενικό (π.χ. µια ολό-
κληρη εταιρεία). Η κάθε οντότητα περιγράφεται από ένα σύνολο ιδιοτήτων οι ο-
ποίες στην ορολογία του µοντέλου, ονοµάζονται χαρακτηριστικά ή πεδία
(attributes). Έτσι, εάν για τους υπαλλήλους της εταιρείας δηµιουργήσουµε την οντό-
τητα EMPLOYEE, τα χαρακτηριστικά αυτής της οντότητας, θα είναι όλες οι
πληροφορίες που καταχωρούµε για κάθε υπάλληλο, όπως είναι το όνοµά του
(FNAME), το επώνυµό του (LNAME), η ηλικία του (AGE), η διεύθυνση
κατοικίας του (ADDRESS) και ο µισθός του (SALARY). Για κάθε µια από τις
οντότητες του συστήµατος, τα χαρακτηριστικά που συσχετίζονται µε αυτή
λαµβάνουν συγκεκριµένες τιµές, το σύνολο των οποίων περιγράφει πλήρως την
οντότητα που καταχωρούµε κάθε φορά.

Στις πιο πολλές περιπτώσεις, τα πεδία που συσχετίζονται µε µια οντότητα,


παίρνουν απλές τιµές, οι οποίες δεν µπορούν να διαχωριστούν σε µικρότερες µονά-
δες. Χαρακτηριστικό παράδειγµα ενός τέτοιου πεδίου είναι η ηλικία του εργαζόµε-
νου (AGE) η οποία µπορεί να πάρει µια µόνο απλή τιµή (π.χ. 34). Τέτοιου είδους πε-
δία, ονοµάζονται απλά πεδία (simple attributes) ή ατοµικά πεδία (atomic
attributes). Σε άλλες όµως περιπτώσεις, ένα πεδίο είναι δυνατό να διασπαστεί σε
ένα πλήθος απλών πεδίων. Στην περίπτωση αυτή, το πεδίο λέγεται σύνθετο
(complex attribute). Χαρακτηριστικό παράδειγµα ενός σύνθετου πεδίου, είναι η δι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 15

εύθυνση ενός υπαλλήλου, η οποία µπορεί να διαχωριστεί στην διεύθυνση κατοικί-


ας (street address), στον τόπο διαµονής (city και state) και στον ταχυδροµικό
κώδικα (zip code). Η διεύθυνση κατοικίας µε τη σειρά της µπορεί να διασπαστεί σε
όνοµα οδού (street), αριθµό οδού (number) και αριθµό διαµερίσµατος
(apartment number). ∆ιαπιστώνουµε λοιπόν πως ανάµεσα στα σύνθετα πεδία µιας
οντότητας µπορεί να υπάρξει και ένα είδος ιεραρχίας (hierarchy) όπως φαίνεται στο
επόµενο σχήµα :

Address

Street City State Zip Code

Number Street Apartment Number

Σχήµα 5: Παράδειγµα ιεραρχίας σύνθετων πεδίων

Εάν ένα από τα πεδία κάποιας οντότητας είναι σύνθετο πεδίο, τότε η τιµή
που αποδίδεται σε αυτό προκύπτει από τη συνένωση (concatenation) των τιµών
των απλών πεδίων που περιέχει.

Ένας άλλος διαχωρισµός που µπορούµε να εφαρµόσουµε στα πεδία µιας ο-


ντότητας, έχει να κάνει µε το πλήθος των τιµών που καταχωρούνται σε αυτά. Για πα-
ράδειγµα, κάθε υπάλληλος έχει µόνο µια ηλικία, αλλά µπορεί να χρησιµοποιεί πολ-
λούς αριθµούς τηλεφώνου (π.χ. τηλέφωνο οικίας, τηλέφωνο εργασίας, και κινητό τη-
λέφωνο). Στην περίπτωση αυτή λέµε πως η ηλικία είναι ένα πεδίο απλής τιµής
(single-valued attribute) ενώ ο αριθµός τηλεφώνου είναι ένα πεδίο πολλαπλής τι-
µής (multivalued attribute). Στην περίπτωση κατά την οποία ένα πεδίο µπορεί να
λάβει περισσότερες από µια τιµές, µπορούµε να θέσουµε περιορισµούς σχετικά µε το
πλήθος των τιµών που θα καταχωρήσουµε σε αυτό. Έτσι µπορούµε κατά τη σχεδίαση
της βάσης να επιτρέψουµε στο χρήστη να καταχωρεί για τον κάθε υπάλληλο, όχι
περισσότερα από τρία τηλέφωνα.

Σε ορισµένες περιπτώσεις, δύο ή περισσότερα πεδία µπορεί να συσχετίζονται


µεταξύ τους (related attributes) κάτι που επιτρέπει τον υπολογισµό της τιµής του
ενός, όταν γνωρίζουµε την τιµή του άλλου. Για παράδειγµα, εφ’ όσον για κάθε υπάλ-
ληλο της εταιρείας, καταχωρούµε την ηµεροµηνία γέννησής του, δεν υπάρχει λόγος
να καταχωρήσουµε και την ηλικία του, καθώς αυτή υπολογίζεται εάν αφαιρέσουµε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 16

την ηµεροµηνία γέννησής του από την τρέχουσα ηµεροµηνία. Στην περίπτωση αυ-
τή λέµε πως η ηλικία είναι ένα παραγόµενο πεδίο (derived attribute).
Τέλος, όταν για κάποια οντότητα δεν ορίζεται ή δεν είναι γνωστή η τιµή κάποιου από
τα πεδία που περιέχει, το πεδίο αυτό θα λάβει την επονοµαζόµενη κενή ή άκυρη τι-
µή (NULL value). Αυτό π.χ. συµβαίνει όταν δεν γνωρίζουµε το τηλέφωνο κάποιου
υπαλλήλου ή όταν καταχωρούµε τα στοιχεία κάποιου φοιτητή που δεν έχει ακόµη
αποφοιτήσει – στην τελευταία περίπτωση στο πεδίο «Βαθµός Πτυχίου» θα καταχω-
ρήσουµε την τιµή NULL.

Σηµείωση : είναι προφανής η διαφορά που υφίσταται ανάµεσα στην τιµή


NULL και στην τιµή 0: στη βάση δεδοµένων ενός σχολείου, τιµή NULL στο πεδίο
«Βαθµός Μαθήµατος» σηµαίνει πως ο βαθµός του µαθήµατος δεν είναι γνωστός ή
δεν έχει καταχωρηθεί, ενώ τιµή 0 σηµαίνει πως ο µαθητής στο µάθηµα αυτό έχει βαθ-
µολογηθεί µε 0.

Τύποι οντοτήτων : Ένα βασικό χαρακτηριστικό που εµφανίζεται σε όλες


σχεδόν τις βάσεις δεδοµένων, είναι η οµαδοποίηση των οντοτήτων που περιέχουν
µε κριτήριο τα κοινά τους χαρακτηριστικά. Μια εταιρεία περιέχει εκατοντάδες υ-
παλλήλους, κάθε ένας εκ των οποίων περιγράφεται από το σύνολο των πεδίων που
παρουσιάσαµε στις προηγούµενες παραγράφους – αλλά αυτά τα πεδία είναι τα ίδια
για όλους τους υπαλλήλους της εταιρείας. Το σύνολο όλων αυτών των οντοτήτων
οι οποίες περιγράφονται από τα ίδια χαρακτηριστικά, ορίζει ένα τύπο οντότητας
(entity type). Στο παράδειγµά µας, µπορούµε να ορίσουµε ένα τύπο οντότητας για
τους υπαλλήλους της εταιρείας, ένα τύπο οντότητας για τα τµήµατα στα οποία χωρί-
ζεται η εταιρεία, ένα τύπο οντότητας για τα έργα που η εταιρεία αναλαµβάνει να
διεκπεραιώσει, κ.ο.κ. Κάθε ένας από αυτούς τους τύπους, περιγράφεται από ένα
όνοµα και από το σύνολο των πεδίων που περιέχει. Το σύνολο αυτής της πληροφο-
ρίας ορίζει το σχήµα (schema) για το συγκεκριµένο τύπο οντότητας. Αντίθετα οι υ-
πάλληλοι που καταχωρούνται στη βάση δεδοµένων και για τους οποίους τα πεδία του
τύπου οντότητας παίρνουν εντελώς συγκεκριµένες τιµές, αποτελούν στιγµιότυπα
(instances) αυτού του σχήµατος (για όσους αναγνώστες είναι εξοικειωµένοι µε τις
αρχές του αντικειµενοστραφούς προγραµµατισµού (object oriented
programming), η διαφορά ανάµεσα στο σχήµα και τα στιγµιότυπα µιας οντότητας
είναι εντελώς ανάλογη µε τη διαφορά που υφίσταται ανάµεσα σε µια κλάση (class)
και στα αντικείµενα (objects) αυτής της κλάσης). Ένα παράδειγµα σχήµατος και
στιγµιότυπων για την οντότητα EMPLOYEE παρουσιάζεται στο επόµενο σχήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 17

EMPLOYEE First Name, Last Name, Age, Salary


SCHEMA
EMPLOYEE INSTANCES
EMPLOYEE e1 John Smith 55 80000

EMPLOYEE e2 Fred Brown 40 30000

EMPLOYEE e3 Judy Clark 25 20000

Σχήµα 6 : Σχήµα (employee schema) και στιγµιότυπα οντότητας (e1, e2 και e3)

Πεδίο – κλειδί (key attribute) : Από τα όσα αναφέραµε στην προηγούµενη


παράγραφο, είναι προφανές, πως για κάθε τύπο οντότητας, θα υπάρχουν καταχω-
ρηµένα στη βάση δεδοµένων, δεκάδες ή ακόµη και εκατοντάδες στιγµιότυπα για
αυτή την οντότητα. Επειδή όµως όλα αυτά τα στιγµιότυπα, χαρακτηρίζονται από την
ίδια δοµή και οργάνωση της πληροφορίας που περιέχουν, θα πρέπει µε κάποιο τρόπο
να µπορούν να διακριθούν µεταξύ τους. Αυτό γίνεται δια της χρήσης ενός εκ των πε-
δίων που περιέχονται στο σχήµα αυτής της οντότητας, το οποίο λέγεται πεδίο – κλει-
δί (key attribute) και το οποίο περιέχει µοναδική τιµή για κάθε στιγµιότυπο. Με
άλλα λόγια, δεν είναι δυνατό δύο στιγµιότυπα να έχουν την ίδια τιµή στο πεδίο
κλειδί τους. Ποιο όµως από τα πεδία µιας οντότητας, θα επιλέξουµε για να το χρησι-
µοποιήσουµε ως πεδίο κλειδί? Αυτό κυρίως έχει να κάνει µε τη φύση της πληροφορί-
ας που καταχωρείται σε αυτό. Για παράδειγµα, δεν µπορούµε να χρησιµοποιήσουµε
ως κλειδί το µικρό όνοµα ενός υπαλλήλου, διότι υπάρχουν πολλοί υπάλληλοι µε
το ίδιο όνοµα, και εποµένως αυτό το πεδίο δεν ικανοποιεί τη συνθήκη της µοναδι-
κότητας (uniqueness constraint) όσον αφορά την τιµή του. Θα µπορούσαµε όµως
να χρησιµοποιήσουµε ως κλειδί τον αριθµό ταυτότητας του κάθε υπαλλήλου, διότι
είναι γνωστό πως δεν υπάρχουν δύο ταυτότητες που να έχουν τον ίδιο αριθµό Σε µια
βάση δεδοµένων που περιέχει στοιχεία αυτοκινήτων, το πεδίο κλειδί για τον τύπο ο-
ντότητας CAR θα µπορούσε να είναι ο αριθµός κυκλοφορίας του αυτοκινήτου ή ο
αριθµός κινητήρα, διότι τα πεδία αυτά έχουν διαφορετικές τιµές για κάθε αυτοκίνη-
το. Στο παράδειγµα της βάσης δεδοµένων της εταιρείας, το πεδίο κλειδί για τον τύπο
οντότητας EMPLOYEE είναι το SSN (Social Security Number).

Σε ορισµένες περιπτώσεις, το πεδίο κλειδί ενός τύπου οντότητας, µπορεί να


µην είναι απλό, αλλά σύνθετο, να αποτελείται δηλαδή από πολλά απλά πεδία.
Στην περίπτωση αυτή η συνθήκη της µοναδικότητας για την τιµή του πρωτεύο-
ντος κλειδιού, δεν εφαρµόζεται σε κάθε πεδίο ξεχωριστά, αλλά στο συνδυασµό
αυτών των πεδίων. Αυτό σηµαίνει πως µπορεί να υπάρχουν πολλά στιγµιότυπα ο-
ντότητας που να έχουν την ίδια τιµή για κάποιο από τα απλά πεδία του σύνθετου
κλειδιού, ο συνδυασµός όµως των τιµών των απλών πεδίων που αποτελεί και την
τιµή του σύνθετου κλειδιού, θα πρέπει να είναι µοναδικός για κάθε στιγµιότυπο.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 18

ΑΡΧΙΚΗ ΣΧΕ∆ΙΑΣΗ ΤΗΣ ∆ΟΜΗΣ ΤΗΣ ΒΑΣΗΣ ΤΗΣ ΕΤΑΙΡΕΙΑΣ

Μετά την παραπάνω θεωρητική περιγραφή όσον αφορά τις οντότητες και τα
πεδία που περιλαµβάνονται σε αυτές, µπορούµε τώρα να προχωρήσουµε σε µια πρώ-
τη προσπάθεια σχεδίασης της δοµής της βάσης της εταιρείας η οποία θα περιέχει τους
επόµενους τέσσερις τύπους οντοτήτων:

DEPARTMENT ENTITY TYPE PROJECT ENTITY TYPE


Name, Number, {Locations}, Manager, Name, Number, Location,
ManagerStartDate ControllingDepartment

EMPLOYEE ENTITY TYPE DEPENDENT ENTITY TYPE


Name (Fname, Minit, Lname), SSN, Sex, Employee, DependentName, Sex,
Address, Salary, BirthDate, Department, BirthDate, Relationship
Supervisor, {WorksOn (Project, Hours)}

Στην παραπάνω περιγραφή, τα ονόµατα για τους τύπους οντότητας, αναγρά-


φονται µε κεφαλαία γράµµατα, ενώ, τα ονόµατα των πεδίων, αναγράφονται µε µι-
κρά γράµµατα. Ένα πεδίο το όνοµα του οποίου βρίσκεται µέσα σε άγκιστρα (για
παράδειγµα το πεδίο {Locations}) θεωρείται ως πεδίο πολλαπλής τιµής
(multivalued attribute), ενώ ένα πεδίο που ακολουθείται από πολλά ονόµατα πεδί-
ων κεκλεισµένα εντός παρενθέσεων, θεωρείται ως σύνθετο πεδίο (composite
attribute). Έτσι η σύνταξη Name (Fname, Minit, Lname) ορίζει το σύνθετο πεδίο
Name, το οποίο αποτελείται από τα απλά πεδία Fname, Minit, Lname. Το πεδίο
WorksOn στον τύπο οντότητας EMPLOYEE αναφέρεται σε ένα σύνθετο πεδίο που
ταυτόχρονα είναι και πεδίο πολλαπλής τιµής, µπορεί δηλαδή να λάβει περισσότερες
από µια τιµές.

Η ΕΝΝΟΙΑ ΤΗΣ ΣΥΣΧΕΤΙΣΗΣ

Το δεύτερο χαρακτηριστικό γνώρισµα που περιγράφει τη δοµή ενός µοντέλου


οντοτήτων συσχετίσεων, είναι η συσχέτιση (relationship), η οποία καθορίζει µε ποιο
τρόπο οι τύποι οντότητας µιας βάσης δεδοµένων, συσχετίζονται µεταξύ τους.

Ο ρόλος της συσχέτισης στη σχεδίαση της δοµής µιας βάσης δεδοµένων, θα
γίνει περισσότερο κατανοητός µέσα από ένα παράδειγµα. Ας θεωρήσουµε για το
σκοπό αυτό τους τύπους οντότητας EMPLOYEE και DEPARTMENT που ορίζουν
τα πεδία που καταχωρούµε για κάθε υπάλληλο και για κάθε τµήµα της εταιρείας. Έ-
στω ότι στην εταιρεία εργάζονται συνολικά 100 υπάλληλοι οι οποίοι είναι κατανεµη-
µένοι σε 5 διαφορετικά τµήµατα. Κάθε υπάλληλος και κάθε τµήµα έχει τα δικά του
ατοµικά χαρακτηριστικά. Από τα όσα αναφέραµε στις προηγούµενες παραγράφους,
είναι προφανές, πως για τον τύπο οντότητας EMPLOYEE υπάρχουν 100 στιγµιότυ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 19

πα της οντότητας, ένα στιγµιότυπο για κάθε υπάλληλο. Ας συµβολίσουµε αυτά τα


στιγµιότυπα, ως ei (i=1, 2, 3,…., 100). Με τον ίδιο τρόπο για τον τύπο οντότητας
DEPARTMENT, υπάρχουν πέντε στιγµιότυπα, ένα για κάθε τµήµα, τα οποία ας
συµβολίσουµε ως di (i=1,2,3,4,5).

Από την περιγραφή του µοντέλου της εταιρείας που αναλύσαµε σε προηγού-
µενη ενότητα, προκύπτει πως ο κάθε υπάλληλος θα πρέπει υποχρεωτικά να εργά-
ζεται σε κάποιο τµήµα. Έστω για παράδειγµα πως ο υπάλληλος e1 εργάζεται στο
τµήµα d1 και πως ο υπάλληλος e2 εργάζεται στο τµήµα d2. Αυτό σηµαίνει πως το
στιγµιότυπο e1 του τύπου οντότητας EMPLOYEE, συσχετίζεται µε το στιγµιότυπο
d1 του τύπου οντότητας DEPARTMENT. Ο ίδιος τύπος συσχέτισης υφίσταται και
για τα στιγµιότυπα e2 και d2 των τύπων EMPLOYEE και DEPARTMENT αντί-
στοιχα. Σε µια πιο αυστηρή περιγραφή, µπορούµε να πούµε πως υπάρχει ένα στιγ-
µιότυπο συσχέτισης (relationship instance) r1 ανάµεσα στα στιγµιότυπα e1 και d1,
ένα στιγµιότυπο συσχέτισης r2, ανάµεσα στα στιγµιότυπα e2 και d2, κ.ο.κ. Στο επόµε-
νο σχήµα παρουσιάζεται ένα πλήθος στιγµιότυπων συσχέτισης ri που συσχετίζει
στιγµιότυπα του τύπου οντότητας EMPLOYEE, ei, µε στιγµιότυπα του τύπου οντό-
τητας DEPARTMENT, di.

EMPLOYEE WORKS_FOR DEPARTMENT

r1
e1 d1
r2
e2 d2
e3 r3 d3
e4
r4
e5
e6 r5
e7 r6

r7

Σχήµα 7: Στιγµιότυπα συσχετίσεων του τύπου συσχέτισης WORKS_ON

Από το παραπάνω σχήµα διαπιστώνουµε πως οι υπάλληλοι e1, e3 και e6, εργά-
ζονται στο τµήµα d1, οι υπάλληλοι e2 και e4, εργάζονται στο τµήµα d2, και τέλος οι
υπάλληλοι e5 και e7, εργάζονται στο τµήµα d3. Αυτού του είδους η συσχέτιση ανάµε-
σα στα στιγµιότυπα των τύπων EMPLOYEE και DEPARTMENT αντίστοιχα,
πραγµατοποιείται δια µέσου των στιγµιότυπων συσχέτισης ri. Για παράδειγµα το
στιγµιότυπο συσχέτισης r1 συσχετίζει τα στιγµιότυπα e1 και d1, το στιγµιότυπο συ-
σχέτισης r2 συσχετίζει τα στιγµιότυπα e2 και d2, κ.ο.κ. To σύνολο όλων αυτών των
στιγµιότυπων συσχέτισης ri, ορίζει τον τύπο συσχέτισης WORKS_ON (στο παρά-
δειγµά µας) ο οποίος συσχετίζει τον τύπο οντότητας EMPLOYEE µε τον τύπο οντό-
τητας DEPARTMENT.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 20

Εποµένως, ένας τύπος συσχέτισης R ανάµεσα σε ένα πλήθος n τύπων ο-


ντότητας E1, E2, ….. , En, είναι ένα πλήθος από στιγµιότυπα συσχετίσεων ri, ανά-
µεσα σε στιγµιότυπα αυτών των τύπων οντότητας. Στην περίπτωση αυτή κάθε τύ-
πος οντότητας Ei λέµε ότι συµµετέχει στον τύπο συσχέτισης R, και κάθε στιγµιότυπο
του τύπου οντότητας, ei, λέµε ότι συµµετέχει σε κάποιο στιγµιότυπο συσχέτισης, ri.

Το πλήθος n των τύπων οντότητας που συσχετίζονται δια µέσου µιας συ-
σχέτισης R, ονοµάζεται βαθµός (degree) της συσχέτισης. Στις πιο πολλές περιπτώ-
σεις ο βαθµός της συσχέτισης είναι ίσος µε 2 (binary relationship) αλλά σε ορισµέ-
νες περιπτώσεις µπορούµε µέσω κάποιας συσχέτισης να συσχετίσουµε τρεις τύπους
οντότητας, γεγονός που οδηγεί στη δηµιουργία συσχετίσεων µε βαθµό 3 (ternary
relationships). Αποδεικνύεται πως στη γενική περίπτωση, µια σχέση µε βαθµό 3
ανάµεσα σε τρεις τύπους οντότητας A, B και C, περιέχει περισσότερη πληροφο-
ρία από τις τρεις συσχετίσεις µε βαθµό 2 που ορίζονται ανάµεσα σε αυτούς τους
τρεις τύπους οντότητας.

Κάθε τύπος οντότητας που συµµετέχει σε κάποιο τύπο συσχέτισης, παίζει και
ένα συγκεκριµένο ρόλο σε αυτή τη συσχέτιση. Το όνοµα αυτού του ρόλου (role
name) καθορίζει σε πολύ µεγάλο βαθµό το πώς οι διάφοροι τύποι οντότητας αλλη-
λεπιδρούν µεταξύ τους. Για παράδειγµα στον τύπο συσχέτισης WORKS_FOR ο
τύπος οντότητας EMPLOYEE αναφέρεται στον εργαζόµενο, ενώ ο τύπος οντότητας
DEPARTMENT µπορεί να θεωρηθεί ως ο εργοδότης για τον κάθε υπάλληλο της
εταιρείας. Ας σηµειωθεί πως στη γενική περίπτωση κατά την οποία οι τύποι οντότη-
τας που συµµετέχουν σε ένα τύπο συσχέτισης, είναι διαφορετικοί µεταξύ τους, ο
καθορισµός του ρόλου για τον κάθε τύπο οντότητας δεν είναι µια αναγκαία διαδικα-
σία. Εάν όµως ένας τύπος οντότητας συµµετέχει περισσότερες από µια φορές σε
ένα τύπο συσχέτισης, τότε ο καθορισµός του ρόλου για τον κάθε τύπο οντότητας,
µας επιτρέπει να περιγράψουµε καλύτερα τον τύπο αλληλεπίδρασης που υφίστα-
ται ανάµεσα στα δύο αντίγραφά του. Χαρακτηριστικό παράδειγµα ενός τέτοιου τύ-
που συσχέτισης, είναι ο τύπος συσχέτισης SUPERVISION που συσχετίζει τον κάθε
εργαζόµενο της εταιρείας µε τον επικεφαλής του τµήµατος που τον παρακολουθεί.
Πράγµατι, το κάθε τµήµα διευθύνεται από κάποιο manager, ο οποίος έχει υπό την
εποπτεία του, όλους τους εργαζόµενους που δουλεύουν σε αυτό το τµήµα. Ως
manager όµως τοποθετείται κάποιος από τους εργαζόµενους του τµήµατος, έτσι ώ-
στε τελικά, ο τύπος συσχέτισης SUPERVISION να ορίζεται ανάµεσα σε δύο αντί-
γραφα του τύπου οντότητας EMPLOYEE. Οι συσχετίσεις αυτού του τύπου λέγονται
αναδροµικές συσχετίσεις (recursive relationships) και η πλήρη περιγραφή τους
απαιτεί τον καθορισµό του ρόλου, για κάθε ένα από τα δύο αντίγραφα του τύπου
οντότητας που συσχετίζουν. Έτσι στην περίπτωση του τύπου συσχέτισης
SUPERVISION, το ένα αντίγραφο του τύπου οντότητας EMPLOYEE παίζει το ρό-
λο του επιβλέποντα (supervisor), ενώ το άλλο αντίγραφο του τύπου, παίζει το ρόλο
του ευρισκόµενου κάτω από την επίβλεψη του επόπτη (supervisee).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 21

ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΥΠΩΝ ΣΥΣΧΕΤΙΣΗΣ

Ο κάθε τύπος συσχέτισης που ορίζεται ανάµεσα σε δύο τύπους οντότητας κα-
τά τη λογική σχεδίαση µιας βάσης δεδοµένων, χαρακτηρίζεται από δύο ιδιότητες που
καθορίζουν το πλήθος και το είδος της συµµετοχής των δύο οντοτήτων στα στιγµιό-
τυπα αυτού του τύπου συσχέτισης. Αυτές οι δύο ιδιότητες ορίζονται µε τον ακόλουθο
τρόπο:

Η πολλαπλότητα (cardinality) ενός τύπου συσχέτισης, καθορίζει το πλήθος


των στιγµιότυπων αυτού του τύπου συσχέτισης, στον οποίο µια οντότητα µπορεί
να συµµετάσχει. Για παράδειγµα, στη βάση δεδοµένων της εταιρείας, ένα τµήµα πε-
ριέχει πολλούς υπαλλήλους. Στην περίπτωση αυτή λέµε πως η πολλαπλότητα του
τύπου συσχέτισης που ορίζεται ανάµεσα στους τύπους οντότητας EMPLOYEE
και DEPARTMENT είναι 1:Ν (ένα προς πολλά). Εκτός από αυτού του είδους την
πολλαπλότητα ένας τύπος συσχέτισης µπορεί να χαρακτηρίζεται από πολλαπλότητα
1:1 (ένα προς ένα) ή Μ:Ν (πολλά προς πολλά). Χαρακτηριστικό παράδειγµα τύπου
συσχέτισης µε πολλαπλότητα 1:1 είναι η συσχέτιση ανάµεσα στους τύπους οντότητας
EMPLOYEE και DEPARTMENT µε τον EMPLOYEE να συµµετέχει στη σχέση
ως MANAGER (πράγµατι, το κάθε τµήµα θα διευθύνεται µόνο από ένα
MANAGER). Τέλος ένα παράδειγµα τύπου συσχέτισης µε πολλαπλότητα M:N, είναι
η συσχέτιση ανάµεσα στον EMPLOYEE και στο PROJECT: ένας υπάλληλος µπο-
ρεί να εργάζεται σε περισσότερα από ένα projects, και ένα project µε τη σειρά
του, υλοποιείται από πολλούς υπαλλήλους ταυτόχρονα.

Η δεύτερη σηµαντική ιδιότητα που χαρακτηρίζει ένα τύπο συσχέτισης έχει να


κάνει µε το εάν η συµµετοχή των δύο τύπων οντότητας σε αυτή τη συσχέτιση είναι
ολική ή µερική. Ένας τύπος οντότητας χαρακτηρίζεται από ολική συµµετοχή (total
participation) σε ένα τύπο συσχέτισης, εάν η ύπαρξή του εξαρτάται από τη συµ-
µετοχή του ή όχι σε αυτή τη συσχέτιση. Για παράδειγµα, στη βάση δεδοµένων της
εταιρείας, όλοι οι εργαζόµενοι πρέπει υποχρεωτικά να δουλεύουν σε κάποιο τµήµα.
Αυτό σηµαίνει πως όλα τα στιγµιότυπα του τύπου οντότητας EMPLOYEE θα
πρέπει υποχρεωτικά να συµµετέχουν σε κάποιο στιγµιότυπο του τύπου συσχέτι-
σης WORKS_FOR – στην αντίθετη περίπτωση δεν έχουν λόγο ύπαρξης. Εποµένως
η συµµετοχή του τύπου οντότητας EMPLOYEE στον τύπο συσχέτισης
WORKS_FOR είναι ολική. Από την άλλη πλευρά, εάν θεωρήσουµε τον τύπο συ-
σχέτισης MANAGES που συσχετίζει το κάθε τµήµα µε τον manager που το διευ-
θύνει, είναι προφανές, πως ως manager του τµήµατος, θα µπει κάποιος
EMPLOYEE – ωστόσο δεν είναι υποχρεωτικό όλοι οι employees να διευθύνουν
κάποιο τµήµα. Εποµένως, µόνο ένα ποσοστό των στιγµιότυπων του τύπου οντότητας
EMPLOYEE θα συµµετέχει στη συσχέτιση MANAGES, και ως εκ τούτου, ο εν λό-
γω τύπος οντότητας χαρακτηρίζεται από µερική συµµετοχή (partial participation)
σε αυτόν τον τύπο συσχέτισης. Αντίθετα, το κάθε τµήµα, θα πρέπει υποχρεωτικά να
διοικείται από κάποιο manager. Εποµένως, ο τύπος οντότητας DEPARTMENT χα-
ρακτηρίζεται από ολική συµµετοχή στον τύπο συσχέτισης MANAGES.

Είναι τέλος σηµαντικό να αναφερθεί, πως ένας τύπος συσχέτισης, εκτός από
τους τύπους οντότητας µεταξύ των οποίων ορίζεται, µπορεί να χαρακτηρίζεται και
από την ύπαρξη πεδίων (attributes). Εάν για παράδειγµα επιθυµούµε για κάθε υ-
πάλληλο που εργάζεται σε κάποιο project να καταχωρούµε και τον αριθµό των

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 22

ωρών ανά εβδοµάδα που απασχολείται σε αυτό το project, µπορούµε να προσθέ-


σουµε στον τύπο συσχέτισης WORKS_ON που συσχετίζει τους τύπους οντότητας
EMPLOYEE και PROJECT το πεδίο HOURS. Με τον ίδιο τρόπο, εάν επιθυµούµε
να καταχωρούµε για κάθε MANAGER την ηµεροµηνία που ανέλαβε τη διοίκηση
κάποιου DEPARTMENT, µπορούµε να προσθέσουµε στον τύπο συσχέτισης
MANAGES το πεδίο StartDate.

Σε περίπτωση κατά την οποία η πολλαπλότητα του τύπου συσχέτισης είναι


1:1 ή 1:Ν, η προσθήκη αυτών των επιπλέον πεδίων, µπορεί να γίνει εάν το επιθυµού-
µε, όχι στη δοµή του τύπου συσχέτισης, αλλά στη δοµή κάποιου από τους τύπους
οντότητας που συµµετέχουν σε αυτόν. Εάν αναφερόµαστε σε τύπο συσχέτισης µε
πολλαπλότητα 1:1, η προσθήκη των επιπλέον πεδίων, µπορεί να γίνει σε όποιον
από τους δύο τύπους οντότητας επιθυµούµε. Αντίθετα, εάν αναφερόµαστε σε πολ-
λαπλότητα 1:Ν, τότε υποχρεωτικά αυτά τα πεδία θα προστεθούν στη δοµή του τύ-
που οντότητας που βρίσκεται στην «πλευρά του Ν» στον τύπο συσχέτισης. Ας
θεωρήσουµε για παράδειγµα τον τύπο συσχέτισης WORKS_FOR που συσχετίζει
τους τύπους οντότητας DEPARTMENT και EMPLOYEE. Η πολλαπλότητα αυτού
του τύπου συσχέτισης είναι 1:Ν διότι σε ένα τµήµα εργάζονται γενικά πολλοί υπάλ-
ληλοι. Εάν για κάθε υπάλληλο επιθυµούσαµε να καταχωρήσουµε και την ηµεροµη-
νία ένταξής του σε αυτό το τµήµα, αυτή η πληροφορία θα έπρεπε να καταχωρηθεί
στο κάθε στιγµιότυπο του τύπου οντότητας EMPLOYEE διότι είναι διαφορετική για
κάθε υπάλληλο. Τέλος, εάν η σχέση είναι Μ:Ν, τότε επειδή τα νέα πεδία δεν ανα-
φέρονται σε ένα από τα δύο στιγµιότυπα των τύπων οντότητας αλλά στο συν-
δυασµό τους, δεν είναι δυνατή η προσθήκη τους σε κάποιον από τους τύπους ο-
ντότητας, και εποµένως τα προσθέτουµε υποχρεωτικά στον τύπο συσχέτισης. Για
παράδειγµα εάν ο υπάλληλος e1 δουλεύει στο project p1 για 10 ώρες την εβδοµάδα,
τότε, το πεδίο HOURS στο οποίο θα καταχωρηθεί η τιµή 10, δεν θα προστεθεί ούτε
στον τύπο οντότητας EMPLOYEE, ούτε στον τύπο οντότητας PROJECT, αλλά
στον τύπο συσχέτισης WORKS_ON. Αυτό θα γίνει, διότι δεν χαρακτηρίζει ούτε το
στιγµιότυπο e1, ούτε το στιγµιότυπο p1, αλλά το συνδυασµό των δύο στιγµιότυπων,
(e1, p1).

Α∆ΥΝΑΜΟΙ ΤΥΠΟΙ ΟΝΤΟΤΗΤΑΣ (WEAK ENTITY TYPES): Σε ορι-


σµένες περιπτώσεις είναι δυνατό να ορίσουµε τύπους οντότητας οι οποίοι δεν έχουν
κάποιο πεδίο κλειδί έτσι ώστε να ξεχωρίζουν τα διάφορα στιγµιότυπά τους, αλλά
αυτή η διάκριση γίνεται δια της συσχέτισής τους µε κάποιον από τους υπόλοι-
πους τύπους οντότητας της βάσης. Αυτοί οι τύποι οντότητας ονοµάζονται αδύνα-
µοι τύποι οντότητας (weak entity types) και ορίζονται µόνο από ένα συνδυασµό
κάποιων από τα πεδία που περιέχουν καθώς και από τη συσχέτισή τους
(identifying relationship) µε κάποιον τύπο οντότητας (identifying owner). Ας ση-
µειωθεί πως σε αυτή τη συσχέτιση, οι εν λόγω τύποι οντότητας έχουν ολική συµµε-
τοχή (total participation).

Εάν δύο ή περισσότεροι αδύναµοι τύποι οντότητας έχουν τον ίδιο κάτοχο
(owner entity) υπάρχει ένας συνδυασµός πεδίων ο οποίος βοηθά να ξεχωρίζουµε τα
στιγµιότυπα αυτού του τύπου οντότητας µεταξύ τους. Αυτός ο συνδυασµός των πεδί-
ων λέγεται µερικό κλειδί (partial key). Χαρακτηριστικό παράδειγµα αδύναµου τύ-
που οντότητας είναι ο τύπος οντότητας DEPENDENT για τον οποίο η οντότητα κά-
τοχος είναι ο EMPLOYEE.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 23

ΤΥΠΟΙ ΣΥΣΧΕΤΙΣΗΣ ΣΤΗ ΒΑΣΗ ∆Ε∆ΟΜΕΝΩΝ ΤΗΣ ΕΤΑΙΡΕΙΑΣ

Μετά τον ορισµό και την περιγραφή των ιδιοτήτων που χαρακτηρίζουν τους
τύπους συσχέτισης, µπορούµε τώρα να αναθεωρήσουµε τη δοµή της βάσης δεδοµέ-
νων της εταιρείας που δηµιουργήσαµε σε προηγούµενη παράγραφο, και να προσθέ-
σουµε και τις συσχετίσεις που ορίζονται ανάµεσα στους τύπους οντότητας που έχου-
µε δηµιουργήσει. Στην επόµενη παράγραφο, παρουσιάζονται οι τύποι συσχέτισης που
ορίζονται στην εν λόγω εφαρµογή και οι οποίοι, σε µια αναλυτική περιγραφή, είναι οι
ακόλουθοι :

MANAGES: τύπος συσχέτισης µε πολλαπλότητα 1:1 που ορίζεται ανάµεσα


στους τύπους οντότητας EMPLOYEE και DEPARTMENT. Η συµµετοχή του
DEPARTMENT είναι ολική, ενώ ο EMPLOYEE χαρακτηρίζεται από µερική συµ-
µετοχή. Επειδή για κάθε manager θέλουµε να καταχωρούµε και την ηµεροµηνία κατά
την οποία αυτός ανέλαβε τη διοίκηση του τµήµατος, ο εν λόγω τύπος συσχέτισης θα
περιέχει και ένα πεδίο µε το όνοµα StartDate.

WORKS_FOR: τύπος συσχέτισης µε πολλαπλότητα 1:Ν που ορίζεται ανά-


µεσα στους τύπους οντότητας DEPARTMENT και EMPLOYEE. Η συµµετοχή και
των δύο τύπων οντότητας σε αυτόν τον τύπο συσχέτισης είναι ολική.

CONTROLS: τύπος συσχέτισης µε πολλαπλότητα 1:Ν που ορίζεται ανάµεσα


στους τύπους οντότητας DEPARTMENT και PROJECT. Η συµµετοχή του
PROJECT είναι ολική, ενώ το DEPARTMENT χαρακτηρίζεται από µερική συµ-
µετοχή.

SUPERVISION: τύπος συσχέτισης µε πολλαπλότητα 1:Ν που ορίζεται ανά-


µεσα στους τύπους οντότητας EMPLOYEE (στο ρόλο του επιβλέποντα) και
EMPLOYEE (στο ρόλο του επιβλεπόµενου). Και οι δύο τύποι οντότητας χαρακτη-
ρίζονται από µερική συµµετοχή σε αυτόν τον τύπο συσχέτισης, διότι σύµφωνα µε τις
προδιαγραφές της εταιρείας, δεν είναι υποχρεωτικό όλοι οι υπάλληλοι να επιβλέπο-
νται από κάποιον επόπτη, και µε τη σειρά τους δεν επιβλέπουν υποχρεωτικά κάποιον
υπάλληλο.

WORKS_ON: τύπος συσχέτισης µε πολλαπλότητα Μ:Ν που ορίζεται ανάµε-


σα στους τύπους οντότητας EMPLOYEE και PROJECT. Επειδή επιθυµούµε για
κάθε εργαζόµενο να καταχωρούµε το πλήθος των ωρών που απασχολείται εβδοµα-
διαίως σε ένα PROJECT, αυτός ο τύπος συσχέτισης περιέχει και ένα πεδίο που ονο-
µάζεται HOURS.

DEPENDENTS_OF: τύπος συσχέτισης µε πολλαπλότητα 1:Ν που ορίζεται


ανάµεσα στους τύπους οντότητας EMPLOYEE και DEPENDENT. Ο τύπος οντότη-
τας EMPLOYEE χαρακτηρίζεται από µερική συµµετοχή, ενώ η συµµετοχή του
DEPENDENT είναι ολική, κάτι που είναι αναµενόµενο, εφ’ όσον ο DEPENDENT
είναι αδύναµος τύπος οντότητας και η ύπαρξή του εξαρτάται από τη συµµετοχή του ή
όχι σε αυτή τη σχέση.

Εάν συγκρίνουµε την αρχική σχεδίαση της βάσης που περιελάµβανε µόνο τις
οντότητες, µε την αναθεωρηµένη σχεδίαση της βάσης που παρουσιάσαµε στις προη-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 24

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


ρηθεί στους τύπους οντότητας, έχουν τώρα µετακινηθεί στους τύπους συσχέτι-
σης που έχουµε δηµιουργήσει. Αυτό έγινε επειδή η τοποθέτηση αυτών των πεδίων
στους τύπους συσχέτισης, οδηγεί σε αποφυγή της κράτησης πλεοναζόντων δεδοµέ-
νων, και είναι κάτι που θα πρέπει να γίνεται σε κάθε περίπτωση.

∆ΙΑΓΡΑΜΜΑ ΟΝΤΟΤΗΤΩΝ – ΣΥΣΧΕΤΙΣΕΩΝ

Ολοκληρώνοντας την περιγραφή της δοµής της βάσης δια της χρήσης του µο-
ντέλου οντοτήτων συσχετίσεων, µπορούµε να σχεδιάσουµε αυτή τη δοµή, χρησιµο-
ποιώντας το διάγραµµα οντοτήτων – συσχετίσεων (Entity Relationship Diagram,
E-R Diagram) που είναι ειδικά σχεδιασµένο για αυτό το σκοπό. Αυτή η διαγραµµα-
τική τεχνική, επιτρέπει τη σχεδίαση των οντοτήτων µιας βάσης και των συσχετίσεων
που υφίστανται ανάµεσά τους χρησιµοποιώντας ειδικά σύµβολα, τα οποία
παρουσιάζονται στον πίνακα που ακολουθεί :

ΣΥΜΒΟΛΟ ΠΑΡΑ∆ΕΙΓΜΑ ΧΡΗΣΗΣ

EMPLOYEE

ENTITY TYPE Employee Entity Type

DEPENDENT

WEAK ENTITY TYPE Dependent Weak Entity Type

WORKS_ON

RELATIONSHIP TYPE Works_On Relationship Type

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 25

DEPENDENTS_OF

Dependents_Of Identifying
IDENTIFYING RELATIONSHIP
Relationship Type
TYPE

Salary

ATTRIBUTE Salary Entity Attribute

SSN

KEY ATTRIBUTE SSN Key Entity Attribute

Locations

MULTIVALUED ATTRIBUTE Locations Multivalued Entity


Attribute

MInit
LName
FName

Name

COMPLEX ATTRIBUTE Name Complex Entity Attribute

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 2 : Μοντέλο Οντοτήτων – Συσχετίσεων 26

AGE

DERIVED ATTRIBUTE Age Derived Entity Attribute

DepName

PARTIAL KEY ATTRIBUTE DepName Partial Key Entity


Attribute

E1 E2 E1 E2

TOTAL PARTIAL E1 : DEPENDENT


PARTICIPATION E2 : EMPLOYEE

E1 E2 E1 E2
1 N 1 N

CARDINALITY RATIO E1 : EMPLOYEE


E2 : DEPENDENT

Τέλος στην επόµενη σελίδα, παρουσιάζεται το διάγραµµα οντοτήτων συσχε-


τίσεων για τη βάση δεδοµένων της εταιρείας σύµφωνα µε την ανάλυση που περιγρά-
ψαµε στις προηγούµενες ενότητες αυτού του κεφαλαίου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων - Θεωρία και Εφαρµογές 27

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3
Σχεσιακό Μοντέλο
Στο κεφάλαιο αυτό παρουσιάζεται το σχεσιακό µοντέλο
βάσεων δεδοµένων, και αναλύονται τα δοµικά του
χαρακτηριστικά, οι βασικές του ιδιότητες, και ο τρόπος µε
τον οποίο µπορεί να προκύψει από το µοντέλο οντοτήτων
συσχετίσεων.

Το σχεσιακό µοντέλο αναπαράστασης των δεδοµένων µιας εφαρµογής


(relational data model) καθιερώθηκε από τον Codd το 1970 και αποτέλεσε ένα από
τα πιο απλά και ευέλικτα µοντέλα αυτού του είδους. Σε αυτό το µοντέλο, τα δεδοµένα
µιας εφαρµογής αναπαρίστανται ως ένα σύνολο από σχέσεις (relations) οι οποίες
µπορεί να είναι πίνακες ή αρχεία. Στις πιο πολλές περιπτώσεις υιοθετείται η χρήση
πινάκων (tables) που περιέχουν ένα πλήθος γραµµών (rows) και στηλών
(columns). Η κάθε µια από αυτές τις γραµµές – οι οποίες στην ορολογία του
µοντέλου ονοµάζονται και πλειάδες (tuples) – περιέχει ένα σύνολο απλών πεδίων
(attributes) τα οποία συσχετίζονται µεταξύ τους. Επειδή όπως θα δούµε στις
επόµενες παραγράφους οι πίνακες χρησιµοποιούνται για την αναπαράσταση των
τύπων οντοτήτων καθώς και των τύπων συσχετίσεων που υφίστανται ανάµεσά τους,
µπορούµε να θεωρήσουµε κάθε µια από τις γραµµές ενός πίνακα σαν ένα
στιγµιότυπο οντότητας ή συσχέτισης ανάλογα µε το αντικείµενο στο οποίο
αναφέρεται. Χαρακτηριστικό παράδειγµα ενός πίνακα όπως αυτός ορίζεται από το
σχεσιακό µοντέλο, παρουσιάζεται στη συνέχεια.

STUDENT
Name SSN Home Address Office Age GPA
Phone Phone
Bayer 305612435 3731616 2918 Bluebonnet Lane NULL 19 3.21
Ashly 381621245 3754409 125 Kirby Road NULL 18 2.89
David 422112320 NULL 3452 Elgin Road 7491253 25 3.53
Cooper 489221100 3769821 265 Lark Lane 7496492 28 3.93
Benson 533691238 8398461 7384 Fontana Lane NULL 19 3.25

Πίνακας 2 : Παράδειγµα πίνακα στο σχεσιακό µοντέλο αναπαράστασης δεδοµένων

Στον παραπάνω πίνακα η κάθε πλειάδα ή εγγραφή (record) αναφέρεται και


σε ένα ξεχωριστό στιγµιότυπο του τύπου οντότητας STUDENT. Η κάθε µια από αυ-
τές τις εγγραφές αποτελείται από ένα σύνολο χαρακτηριστικών ή πεδίων τα οποία
Κεφάλαιο 3 : Σχεσιακό Μοντέλο 30

λαµβάνουν συγκεκριµένες τιµές, διαφορετικές εν γένει για κάθε εγγραφή. Έτσι, ο


πίνακας STUDENT περιέχει τα πεδία Name, SSN, Home Phone, Address, Office
Phone, Age και GPA. Επειδή οι τιµές της κάθε στήλης αναφέρονται ουσιαστικά στο
ίδιο πεδίο του πίνακα, είναι προφανές πως θα πρέπει να ανήκουν στον ίδιο τύπο δε-
δοµένων.

ΘΕΜΕΛΙΩ∆ΕΙΣ ΟΡΙΣΜΟΙ ΤΟΥ ΣΧΕΣΙΑΚΟΥ ΜΟΝΤΕΛΟΥ

Κάθε πεδίο ή στήλη ενός πίνακα, δέχεται τιµές οι οποίες ανήκουν σε ένα συ-
γκεκριµένο και καθορισµένο εκ των προτέρων σύνολο τιµών (domain). Το είδος των
τιµών αυτού του συνόλου καθορίζεται από τον τύπο δεδοµένων του πεδίου του πί-
νακα, ο οποίος µε τη σειρά του ορίζεται κατά το στάδιο της λογικής σχεδίασης της
εφαρµογής. Έτσι, ένα πεδίο που εκφράζει την ηλικία, θα αναπαρίσταται από µια ακέ-
ραια ποσότητα. Όσον αφορά το σύνολο των επιτρεπτών τιµών για αυτό το πεδίο, αυ-
τό εξαρτάται και πάλι από τη φύση του προβλήµατος. Για παράδειγµα, σε ένα πρό-
γραµµα κοινωνικής ασφάλισης οι ηλικίες των ασφαλισµένων θα κυµαίνονται από 18
έως 65, διότι υποθέτουµε πως οι εργαζόµενοι είναι ενήλικες που εργάζονται µέχρι τα
65 τους χρόνια. Αντίθετα στο πρόγραµµα καταχώρησης στοιχείων ασθενών σε ένα
νοσοκοµείο, η ηλικία του ασθενή µπορεί να είναι οποιαδήποτε.

Σε ορισµένες περιπτώσεις είναι δυνατό να καθορίσουµε όχι µόνο το εύρος των


τιµών για ένα πεδίο, αλλά και τη µορφή που θα έχουν οι τιµές που καταχωρούνται
σε αυτό. Για παράδειγµα, ένας αριθµός αυτοκινήτου αποτελείται από τρία γράµµατα
και τέσσερα ψηφία – π.χ. TKE-6960. Στην περίπτωση αυτή µπορούµε να γράψουµε
τη µορφή των τιµών του πεδίου ως TTT-DDDD όπου το σύµβολο T υποδηλώνει χα-
ρακτήρα (text) και παίρνει τιµές στο διάστηµα Α-Ζ, ενώ το σύµβολο D, υποδηλώνει
ψηφίο (digit) και παίρνει τιµές στο διάστηµα 0-9. Άλλες φορές πάλι είναι δυνατό να
καθορίσουµε και κάποιες επιπλέον πληροφορίες. Για παράδειγµα σε µια εφαρµογή
που καταχωρούµε αριθµητικές τιµές για διάφορες περιπτώσεις πεδίων, ίσως χρειαστεί
να καθορίσουµε και τη µονάδα µέτρησης της τιµής, κάτι που συνηθίζεται σε όλα
σχεδόν τα προγράµµατα που χρησιµοποιούνται στο χώρο των επιχειρήσεων για ε-
φαρµογές µηχανογράφησης.

Ορισµός 1 : Ως σχήµα µιας σχέσης (relation schema) R, ορίζεται ένα σύνο-


λο πεδίων {A1, A2,……,An} κάθε ένα εκ των οποίων παίρνει τιµές µέσα από ένα σύ-
νολο τιµών (domain) D – για κάθε πεδίο Ai, το πεδίο τιµών του, D, θα συµβολίζεται
µε dom(Ai). Το πλήθος των πεδίων του συνόλου R ονοµάζεται βαθµός (degree) της
σχέσης, ενώ η συµβολοσειρά R, είναι το όνοµα της σχέσης. Ένα παράδειγµα µιας
σχέσης είναι ο πίνακας STUDENT που περιγράψαµε στην προηγούµενη παράγραφο,
και ο οποίος σύµφωνα µε τον παραπάνω ορισµό, µπορεί να γραφεί µε τη µορφή

STUDENT {Name, SSN, HomePhone, Address, OfficePhone, Age, GPA}

Στη σύνταξη αυτή, R = «STUDENT» είναι το όνοµα της σχέσης η οποία στην
προκειµένη περίπτωση, έχει επτά πεδία, κάθε ένα εκ των οποίων, παίρνει τιµές µέσα
από κάποιο σύνολο, D.

Ορισµός 2 : Ως σχέση ή στιγµιότυπο σχέσης (relation instance) r, του σχή-


µατος σχέσης R (A1, A2,……,An) ορίζεται ένα σύνολο από πλειάδες r = {t1, t2, t3,

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 31

……, tm}. Κάθε πλειάδα είναι µια διατεταγµένη λίστα (ordered list) από n τιµές
<v1, v2, ….. ,vn>, µε την κάθε τιµή vi (1≤i≤n), να παίρνει τιµές από το πεδίο τιµών
dom(Ai), ενώ εναλλακτικά µπορεί να πάρει και την τιµή NULL. Ένα στιγµιότυπο r
ενός σχήµατος σχέσης R, µπορεί να γραφεί και ως r(R).

Επειδή το κάθε στιγµιότυπο σχέσης αποτελείται από ένα σύνολο n πεδίων Ai


κάθε ένα εκ των οποίων παίρνει τιµές µέσα από ένα σύνολο τιµών dom(Ai), µπορού-
µε να θεωρήσουµε πως το σύνολο των πλειάδων που συνιστά το στιγµιότυπο σχέ-
σης r(R), είναι υποσύνολο του καρτεσιανού γινοµένου των συνόλων dom(Ai), και
εποµένως θα ισχύει η συνθήκη

r(R) ⊆ ( dom(A1) Χ dom(A2) Χ ….. Χ dom(An) )

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό πως η διάταξη (ordering)


των πλειάδων σε µια σχέση, δεν έχει καµιά σηµασία. Αυτό γίνεται διότι µια σχέση
ορίζεται ως ένα σύνολο από πλειάδες, και σύµφωνα µε τον ορισµό του συνόλου, τα
στοιχεία του δε χρειάζεται να είναι διατεταγµένα. Αντίθετα, µια πλειάδα, αποτελεί-
ται από ένα πλήθος διατεταγµένων πεδίων, και εποµένως η σειρά µε την οποία ανα-
γράφονται οι τιµές µιας πλειάδας είναι σηµαντική. Χρησιµοποιώντας εναλλακτικούς
ορισµούς για το στιγµιότυπο σχέσης, µπορούµε να επανακαθορίσουµε τα βασικά της
χαρακτηριστικά έτσι ώστε να άρουµε την προϋπόθεση της διάταξης των πεδίων µιας
πλειάδας – αυτό το θέµα όµως δεν θα µας απασχολήσει περισσότερο.

Ολοκληρώνουµε αυτή τη συνοπτική περιγραφή των βασικών χαρακτηριστι-


κών του σχεσιακού µοντέλου, µε την παρατήρηση, πως οι τιµές που καταχωρούνται
σε µια πλειάδα, θα πρέπει να είναι ατοµικές (atomic) να µην υποδιαιρούνται δηλα-
δή σε µικρότερες µονάδες πληροφορίας. Σύνθετες τιµές δεδοµένων, δεν µπορούν να
χρησιµοποιηθούν αλλά θα πρέπει να γραφούν µε τρόπο που να µην παραβιάζει την
παραπάνω αρχή. Αυτός ο τρόπος φορµαλισµού ενός πίνακα έτσι ώστε όλα του τα πε-
δία να έχουν ατοµικές τιµές, αναφέρεται και ως πρώτη κανονική µορφή (1st Normal
Form, 1NF) και θα µελετηθεί στο επόµενο κεφάλαιο. Τέλος, όπως έχουµε ήδη ανα-
φέρει, για όσα πεδία δεν γνωρίζουµε ή δεν διαθέτουµε την τιµή που τα χαρακτη-
ρίζει, χρησιµοποιούµε για αυτά την τιµή NULL.

ΠΕ∆ΙΑ – ΚΛΕΙ∆ΙΑ : Ένα από τα βασικά χαρακτηριστικά µιας σχέσης είναι


η µοναδικότητα κάθε µιας από τις πλειάδες που περιέχει. Αυτό σηµαίνει πως όλες οι
πλειάδες είναι διαφορετικές µεταξύ τους και σε καµιά περίπτωση δεν πρόκειται να
καταχωρήσουµε δυο φορές την ίδια πλειάδα. Επειδή όµως µια πλειάδα είναι ένα σύ-
νολο πεδίων, µπορούµε γενικά να θεωρήσουµε πως σε κάθε µια από τις πλειάδες ενός
πίνακα, υπάρχει ένας συνδυασµός πεδίων µε την ακόλουθη ιδιότητα: ο συνδυασµός
των τιµών αυτών των πεδίων είναι µοναδικός για κάθε εγγραφή. Το σύνολο αυ-
τών των πεδίων ονοµάζεται superkey του σχεσιακού σχήµατος στο οποίο αναφερό-
µαστε.

Από τον παραπάνω ορισµό είναι προφανές πως η κάθε πλειάδα διαθέτει
τουλάχιστον ένα superkey : το σύνολο των πεδίων που περιέχει. Εάν θεωρήσουµε
τώρα ένα superkey τέτοιο ώστε η αφαίρεση έστω και ενός από τα πεδία του να άρει
την ιδιότητα της µοναδικότητας της τιµής του – δηλαδή η τιµή του να µην είναι πλέον

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 32

µοναδική για κάθε πλειάδα – τότε αυτό το superkey ονοµάζεται πεδίο κλειδί (key)
του σχεσιακού σχήµατος. Με άλλα λόγια, το πεδίο κλειδί µιας σχέσης είναι ένα
superkey από το οποίο δεν µπορούµε να αφαιρέσουµε κανένα πεδίο (minimal
superkey).
Από τα όσα αναφέραµε στις προηγούµενες παραγράφους, γίνεται εύκολα α-
ντιληπτό πως η τιµή του πεδίου κλειδιού είναι µοναδική για κάθε πλειάδα, και
εποµένως µπορεί να χρησιµοποιηθεί για να ξεχωρίσουµε τις πλειάδες µιας σχέσης
µεταξύ τους. Ας σηµειωθεί πως στη γενική περίπτωση µπορεί να υπάρχουν περισ-
σότερα από ένα πεδία που να µπορούν να χρησιµοποιηθούν ως πεδία κλειδιά µιας
σχέσης. Τα πεδία αυτά ονοµάζονται υποψήφια κλειδιά (candidate keys) και ένα
από αυτά επιλέγεται για να γίνει το πρωτεύον κλειδί (primary key) του σχήµατος
της σχέσης. Όσον αφορά το πιο από τα πεδία της σχέσης θα επιλεγεί για να γίνει το
πρωτεύον κλειδί, αυτό εξαρτάται από τη µορφή της πληροφορίας που διατηρούµε για
κάθε σχέση. Στη γενική περίπτωση ως πρωτεύον κλειδί επιλέγουµε ένα πεδίο που
να λαµβάνει ξεχωριστή τιµή για κάθε πλειάδα, π.χ. αριθµός ταυτότητας, αριθµός
αυτοκινήτου, κ.λ.π. Στις σελίδες που ακολουθούν και κάθε φορά που αναφερόµαστε
στη δοµή κάποιου πίνακα, το πρωτεύον κλειδί του πίνακα, θα είναι υπογραµµισµένο.

ΣΧΕΣΙΑΚΟ ΣΧΗΜΑ ΒΑΣΗΣ ∆Ε∆ΟΜΈΝΩΝ

Με βάση το σχήµα µιας σχέσης R που ορίσαµε στις προηγούµενες παραγρά-


φους, µπορούµε τώρα να επεκτείνουµε τον παραπάνω ορισµό και να ορίσουµε το
σχεσιακό σχήµα µιας βάσης δεδοµένων. Έτσι ως σχεσιακό σχήµα µιας βάσης δε-
δοµένων (relational database schema), S, ορίζουµε ένα σύνολο σχηµάτων σχέσε-
ων S = {R1, R2, ….. ,Rm} και ένα σύνολο κανόνων ακεραιότητας (integrity
constraint) για αυτά τα σχήµατα. Ένα στιγµιότυπο του σχεσιακού σχήµατος της βά-
σης δεδοµένων (relational database instance) ορίζεται ως ένα σύνολο στιγµιότυ-
πων σχέσεων {r1, r2, …. ,rm} µε το κάθε στιγµιότυπο ri της σχέσης Ri να υπακούει
στους κανόνες ακεραιότητας του σχεσιακού σχήµατος της βάσης. Το επόµενο
σχήµα αναπαριστά το σχεσιακό σχήµα της βάσης δεδοµένων της εταιρείας που µελε-
τήσαµε στο προηγούµενο κεφάλαιο ενώ σε επόµενη σελίδα παρατίθεται και ένα εν-
δεικτικό στιγµιότυπο αυτού του σχήµατος, που για κάθε έναν από τους πίνακες της
βάσης περιλαµβάνει ένα πλήθος εγγραφών µε συγκεκριµένες τιµές πεδίων.

EMPLOYEE

FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO

DEPARTMENT DEPT_LOCATIONS

DNAME DNUMBER MGRSSN MGRSTARTDATE DNUMBER DLOCATION

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 33

DEPENDENT

ESSN DEPENDENT-NAME SEX BDATE RELATIONSHIP

PROJECT WORKS_ON

PNAME PNUMBER PLOCATION DNUM ESSN PNO HOURS

Σχήµα 8 : Το σχεσιακό σχήµα για τη βάση δεδοµένων της εταιρείας

ΚΑΝΟΝΕΣ ΑΚΕΡΑΙΟΤΗΤΑΣ: Οι κανόνες ακεραιότητας (integrity


constraints) ενός σχεσιακού σχήµατος µιας βάσης δεδοµένων, διασφαλίζουν τη συ-
νέπεια των δεδοµένων της βάσης, και ισχύουν για κάθε στιγµιότυπό της. Ο πρώτος
από αυτούς τους κανόνες (key constraint) επιβάλλει την απόδοση µοναδικών τιµών
σε όλα τα πεδία του πίνακα που έχουν χαρακτηριστεί ως υποψήφια κλειδιά
(candidate keys). Με άλλα λόγια δεν θα πρέπει να υπάρχουν στον ίδιο πίνακα, δύο
εγγραφές που να έχουν την ίδια τιµή στα υποψήφια κλειδιά τους – και προφανώς
στο πρωτεύον κλειδί τους που είναι κάποιο από αυτά. Ο δεύτερος κανόνας (entity
integrity constraint) απαγορεύει την απόδοση της τιµής NULL, στο πρωτεύον
κλειδί της κάθε εγγραφής του πίνακα. Αυτό γίνεται επειδή ως γνωστόν το πρωτεύ-
ον κλειδί µας επιτρέπει να ξεχωρίσουµε τις εγγραφές του πίνακα, και εποµένως
εάν δύο εγγραφές έχουν τιµή NULL στο πρωτεύον κλειδί τους, δεν είναι δυνατή η
διάκριση ανάµεσά τους. Τέλος, ο τρίτος κανόνας (referential integrity constraint)
αναφέρεται στις συσχετίσεις που υφίστανται ανάµεσα στους πίνακες της βάσης. Ο
κανόνας αυτός λέει ότι εάν η τιµή κάποιου πεδίου µιας από τις εγγραφές ενός πί-
νακα αναφέρεται σε εγγραφή κάποιου άλλου πίνακα, αυτή θα πρέπει να είναι µια
υπάρχουσα εγγραφή. Ας πάρουµε για παράδειγµα την πρώτη εγγραφή του πίνακα
EMPLOYEE. Αυτή η εγγραφή, στο πεδίο DNO έχει την τιµή 5, κάτι που σηµαίνει
πως ο συγκεκριµένος υπάλληλος, εργάζεται στο τµήµα της εταιρείας µε κωδικό αριθ-
µό 5. Στην περίπτωση αυτή ο τρίτος κανόνας ακεραιότητας επιβάλλει την ύπαρξη
στον πίνακα DEPARTMENT µιας εγγραφής το πρωτεύον κλειδί της οποίας να
έχει την τιµή 5. Εάν δεν υπάρχει αυτή η εγγραφή, τότε η εγγραφή στον πίνακα
EMPLOYEE αναφέρεται σε κάποιο ανύπαρκτο τµήµα, µε αποτέλεσµα τελικά να
οδηγούµαστε σε µια βάση µε ασυνεπή δεδοµένα (inconsistent data).

Η συσχέτιση ανάµεσα σε δύο πίνακες µιας σχεσιακής βάσης δεδοµένων, µας


επιτρέπει να ορίσουµε ένα επιπλέον τύπο κλειδιού, που ονοµάζεται ξένο κλειδί
(foreign key). Ένα πεδίο ενός πίνακα Α ονοµάζεται ξένο κλειδί, όταν αποτελεί πρω-
τεύον κλειδί κάποιου άλλου πίνακα Β και έχει τοποθετηθεί στον πίνακα Α ως
αποτέλεσµα της συσχέτισης που υφίσταται ανάµεσα στους πίνακες Α και Β σύµφωνα
µε το µοντέλο οντοτήτων – συσχετίσεων. Ας πάρουµε για παράδειγµα τη συσχέτιση
ανάµεσα στους τύπους οντότητας DEPARTMENT και EMPLOYEE. Επειδή η
συσχέτιση αυτή έχει πολλαπλότητα 1:Ν µπορούµε να την υλοποιήσουµε,
τοποθετώντας το πρωτεύον κλειδί του πίνακα DEPARTMENT – που είναι το πεδίο

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 34

πρωτεύον κλειδί του πίνακα DEPARTMENT – που είναι το πεδίο DNUMBER –


στον πίνακα EMPLOYEE (µε το όνοµα DNO). Στην περίπτωση αυτή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 35

ο τρίτος κανόνας ακεραιότητας µπορεί να διατυπωθεί µε τη µορφή


EMPLOYEE.DNO = DEPARTMENT.DNUMBER και εποµένως, η τιµή του πε-
δίου DNO σε κάθε εγγραφή του πίνακα EMPLOYEE θα πρέπει να αναφέρεται σε
κάποια υπάρχουσα εγγραφή του πίνακα DEPARTMENT.

Εάν η συσχέτιση ανάµεσα σε τύπους οντότητας είναι αναδροµική


(recursive), ορίζεται δηλαδή ανάµεσα σε δύο αντίγραφα του ίδιου τύπου οντότητας,
τότε, το ξένο κλειδί του πίνακα, αναφέρεται σε κάποια εγγραφή του ίδιου πίνακα.
Αυτό συµβαίνει για παράδειγµα µε το πεδίο SUPERSSN του πίνακα EMPLOYEE
που αναφέρεται στον επόπτη (supervisor) του κάθε υπαλλήλου της εταιρείας. Αυτός
ο επόπτης όµως, είναι και ο ίδιος υπάλληλος της εταιρίας, και εποµένως η εγγραφή
που αναφέρεται σε αυτόν, βρίσκεται και αυτή στον πίνακα EMPLOYEE. Αυτό ση-
µαίνει πως το πεδίο SUPERSSN είναι ξένο κλειδί που αναφέρεται σε κάποια εγ-
γραφή η οποία βρίσκεται στον ίδιο πίνακα και η οποία ασφαλώς θα πρέπει να υ-
πάρχει σύµφωνα µε τον τρίτο κανόνα ακεραιότητας. Για παράδειγµα το πεδίο
SUPERSSN του υπαλλήλου John Smith έχει τιµή 333445555. Αυτό σηµαίνει πως
θα πρέπει στον ίδιο πίνακα να υπάρχει κάποιος εργαζόµενος µε SSN ίσο µε
333445555 – αυτός ο εργαζόµενος πράγµατι υπάρχει και είναι ο Franklin Wong, και
εποµένως στην περίπτωση αυτή, ο τρίτος κανόνας ακεραιότητας ικανοποιείται.

Ένας απλός και εύκολος τρόπος για να ορίσουµε τις συσχετίσεις ανάµεσα στα
πρωτεύοντα και στα ξένα κλειδιά των πινάκων σύµφωνα µε τον τρίτο κανόνα ακε-
ραιότητας, είναι να τροποποιήσουµε την εικόνα του σχεσιακού σχήµατος της βάσης
προσθέτοντας προσανατολισµένες ευθείες που να ξεκινούν από το ξένο κλειδί κά-
ποιου πίνακα και να καταλήγουν στο αντίστοιχο πρωτεύον κλειδί του πίνακα µε το
οποίο συσχετίζονται. Αυτή η εικόνα για το σχεσιακό σχήµα της βάσης δεδοµένων της
εταιρείας παρουσιάζεται στην επόµενη εικόνα. (Σχήµα 9).

EMPLOYEE
FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO

DEPARTMENT DEPT_LOCATIONS
DNAME DNUMBER MGRSSN MGRSTARTDATE DNUMBER DLOCATION

PROJECT WORKS_ON
PNAME PNUMBER PLOCATION DNUM ESSN PNO HOURS

DEPENDENT
ESSN DEPENDENT-NAME SEX BDATE RELATIONSHIP

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 36

ΠΑΡΑ∆ΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΗΣ ΤΩΝ ΚΑΝΟΝΩΝ ΑΚΕΡΑΙΟΤΗΤΑΣ

Από την παραπάνω ανάλυση είναι προφανές πως κάθε φορά που λαµβάνει
χώρα απόπειρα τροποποίησης του περιεχοµένου της βάσης δεδοµένων, θα πρέπει
να διασφαλίζεται η τήρηση των τριών κανόνων ακεραιότητας που έχουµε ορίσει
στην προηγούµενη ενότητα. Σε όλες περιπτώσεις, η τροποποίηση του περιεχοµένου
µιας βάσης θα περιλαµβάνει διαδικασίες εισαγωγής νέων εγγραφών (insert
operation), διαγραφής υπαρχόντων εγγραφών των πινάκων (delete operation) ή
τροποποίησης του περιεχοµένου αυτών των εγγραφών (update operation). Κάθε
φορά που ο χρήστης προσπαθεί να πραγµατοποιήσει αυτές τις τρεις κατηγορίες ενερ-
γειών, το σύστηµα διαχείρισης βάσεων δεδοµένων, ελέγχει εάν αυτές οι ενέργειες πα-
ραβιάζουν ή όχι τους κανόνες ακεραιότητας του σχήµατος της βάσης, και επιτρέπει
την εκτέλεσή τους, µόνο όταν αυτοί οι κανόνες δεν παραβιάζονται. Στις επόµενες σε-
λίδες παρουσιάζονται παραδείγµατα εισαγωγής, διαγραφής και τροποποίησης εγγρα-
φών των πινάκων για τη βάση δεδοµένων της εταιρείας, και εφαρµογή επί αυτών, των
κανόνων ακεραιότητας, προκειµένου να ελεγχθεί εάν αυτοί παραβιάζονται ή τηρού-
νται από αυτές τις ενέργειες.

Παραδείγµατα εισαγωγής εγγραφών (insert operation)

Insert <’Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ’05-Apr-50’, ‘6357 Windy


Lane, Katy, TX’, ‘F’, 28000, NULL, 4> into EMPLOYEE

Αυτή η διαδικασία δεν παραβιάζει κανέναν από τους κανόνες ακεραιότητας


και είναι αποδεκτή από το σύστηµα.

Insert <’Alicia’, ‘J’, ‘Zelaya’, ‘999887777’, ’05-Apr-50’, ‘6357 Windy


Lane, Katy, TX’, ‘F’, 28000, ‘987654321’, 4> into EMPLOYEE

Αυτή η διαδικασία παραβιάζει τον πρώτο κανόνα ακεραιότητας (key


constraint) επειδή υπάρχει ήδη στον πίνακα EMPLOYEE κάποιος άλλος υπάλληλος
µε το ίδιο πρωτεύον κλειδί (SSN). Για το λόγο αυτό δεν γίνεται αποδεκτή από το
σύστηµα.

Insert <’Cecilia’, ‘F’, ‘Kolonsky’, NULL, ’05-Apr-50’, ‘6357 Windy Lane,


Katy, TX’, ‘F’, 28000, NULL, 4> into EMPLOYEE

Αυτή η διαδικασία παραβιάζει το δεύτερο κανόνα ακεραιότητας (entity


constraint) διότι η εγγραφή που επιχειρούµε να καταχωρήσουµε έχει τιµή NULL στο
πρωτεύον κλειδί της. Για το λόγο αυτό δεν γίνεται αποδεκτή από το σύστηµα.

Insert <’Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ’05-Apr-50’, ‘6357 Windy


Lane, Katy, TX’, ‘F’, 28000, ‘987654321’, 7> into EMPLOYEE

Αυτή η διαδικασία παραβιάζει τον τρίτο κανόνα ακεραιότητας διότι αναφέ-


ρεται σε τµήµα της εταιρείας µε κωδικό αριθµό 7, αλλά στον πίνακα
DEPARTMENT δεν υπάρχει κάποια εγγραφή το πρωτεύον κλειδί της οποίας να έχει
την τιµή 7. Για το λόγο αυτό δεν γίνεται αποδεκτή από το σύστηµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 37

Παραδείγµατα διαγραφής εγγραφών (delete operation)

DELETE the WORKS_ON tuple with SSN=’999887777’ AND PNO = 10

Αυτή η διαδικασία δεν παραβιάζει κανέναν από τους κανόνες ακεραιότητας


και είναι αποδεκτή από το σύστηµα.

DELETE the EMPLOYEE tuple with SSN=’999887777’

Αυτή η διαδικασία δεν είναι αποδεκτή, διότι υπάρχουν εγγραφές στον πίνακα
WORKS_ON που αναφέρονται στην εγγραφή που επιθυµούµε να διαγράψουµε, και
εποµένως η διαγραφή της θα οδηγήσει σε παραβίαση του τρίτου κανόνα ακεραιότη-
τας (referential integrity constraint).

DELETE the EMPLOYEE tuple with SSN = ‘333445555’

Αυτή η διαδικασία δεν είναι αποδεκτή, διότι υπάρχουν εγγραφές στους πίνα-
κες EMPLOYEE, DEPARTMENT, WORKS_ON και DEPENDENT που αναφέ-
ρονται στην εγγραφή που επιθυµούµε να διαγράψουµε, και εποµένως η διαγραφή της
θα οδηγήσει σε παραβίαση του τρίτου κανόνα ακεραιότητας (referential integrity
constraint).

Από τους τρεις κανόνες ακεραιότητας που περιγράψαµε στις προηγούµενες


σελίδες, η διαδικασία της διαγραφής εγγραφών από κάποιο πίνακα, παραβιάζει µόνο
τον τρίτο κανόνα, σε περιπτώσεις κατά τις οποίες επιχειρούµε να διαγράψουµε µια
εγγραφή στην οποία αναφέρονται εγγραφές άλλων πινάκων τις βάσης. Στις περιπτώ-
σεις αυτές έχουµε γενικά τρεις επιλογές: (α) να απαγορεύσουµε τη διαγραφή αυτής
της πλειάδας, (β) να διαγράψουµε εκτός από την εν λόγω πλειάδα και όλες τις πλειά-
δες των άλλων πινάκων που αναφέρονται σε αυτή (cascade delete operation) και (γ)
να µη διαγράψουµε τις πλειάδες των άλλων πινάκων αλλά να τροποποιήσουµε το πε-
ριεχόµενό τους τοποθετώντας τιµές NULL στα πεδία που αναφέρονται στην πλειάδα
που επιχειρούµε να διαγράψουµε (referencing attributes). Ας σηµειωθεί πως για να
είναι δυνατή η πραγµατοποίηση της τρίτης επιλογής δεν θα πρέπει να πεδία που θα
λάβουν την τιµή NULL να αποτελούν τµήµα του πρωτεύοντος κλειδιού του πίνακα,
διότι στην περίπτωση αυτή θα παραβιαστεί ο πρώτος κανόνας ακεραιότητας (key
constraint).

Παραδείγµατα τροποποίησης εγγραφών (modify operation)

MODIFY the SALARY of the EMPLOYEE tuple


with SSN = ‘999887777’ to 28000

Αυτή η διαδικασία δεν παραβιάζει κανέναν από τους κανόνες ακεραιότητας


και είναι αποδεκτή από το σύστηµα.

MODIFY the DNO of the EMPLOYEE tuple with SSN = ‘999887777’ to 1

Αυτή η διαδικασία δεν παραβιάζει κανέναν από τους κανόνες ακεραιότητας


και είναι αποδεκτή από το σύστηµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 38

MODIFY the DNO of the EMPLOYEE tuple with SSN = ‘999887777’ to 7

Αυτή η διαδικασία παραβιάζει τον τρίτο κανόνα ακεραιότητας (referential


integrity constraint) και δεν γίνεται αποδεκτή από το σύστηµα

MODIFY the SSN of the EMPLOYEE tuple with


SSN = ‘999887777’ to ‘987654321’

Αυτή η διαδικασία παραβιάζει τον πρώτο κανόνα ακεραιότητας (key


constraint) και δεν γίνεται αποδεκτή από το σύστηµα.

ΑΠΕΙΚΟΝΙΣΗ ΤΟΥ ΜΟΝΤΕΛΟΥ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ


ΣΤΟ ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ

Έχοντας περιγράψει το µοντέλο οντοτήτων συσχετίσεων και το σχεσιακό


µοντέλο βάσεων δεδοµένων, µπορούµε τώρα να µελετήσουµε τον τρόπο µε τον ο-
ποίο είναι δυνατή η δηµιουργία του σχεσιακού µοντέλου µιας βάσης δεδοµένων, από
το µοντέλο οντοτήτων συσχετίσεων που έχουµε δηµιουργήσει για αυτή τη βάση. Αυ-
τή η διαδικασία είναι γνωστή ως απεικόνιση (mapping) του ενός µοντέλου στο άλλο
και είναι ένα από τα πιο σηµαντικά στάδια του λογικού σχεδιασµού µιας βάσης δεδο-
µένων.

Η παρουσίαση του αλγόριθµου µετατροπής του ενός µοντέλου στο άλλο, θα


γίνει και πάλι δια της χρήσης του παραδείγµατος της βάσης δεδοµένων της εταιρεί-
ας (company database). Το σχήµα αυτής της βάσης, όπως έχουµε δει σε προηγούµε-
νο κεφάλαιο, περιλαµβάνει τέσσερις τύπους οντότητας (EMPLOYEE,
DEPARTMENT, PROJECT, DEPENDENT (µε τον τελευταίο τύπο οντότητας να
είναι weak entity)) και πέντε τύπους συσχέτισης (WORKS_FOR,
SUPERVISION, DEPENDENTS_OF (µε πολλαπλότητα 1:Ν), MANAGES (µε
πολλαπλότητα 1:1), WORKS_ON (µε πολλαπλότητα Μ:Ν)). Για κάθε τύπο οντό-
τητας ορίσαµε το πρωτεύον κλειδί ενώ σε κάθε περίπτωση εκτός από τα απλά πεδί-
α, εντοπίσαµε τόσο σύνθετα πεδία (composite attributes) όσο και πεδία πολλα-
πλών τιµών (multivalued attributes). Όσον αφορά τον τρόπο αλληλεπίδρασης ανά-
µεσα στους τύπους οντότητας της βάσης, αυτός σε γενικές γραµµές, έχει ως εξής :

Κάθε υπάλληλος εργάζεται µόνο σε ένα τµήµα αλλά µπορεί να απασχολεί-


ται σε πολλά έργα (projects) ταυτόχρονα. Μπορεί να έχει υπό την εποπτεία του
πολλούς υπαλλήλους αλλά ο ίδιος παρακολουθείται από ένα µόνο επόπτη. Τέλος
είναι δυνατό να εποπτεύει ο ίδιος κάποιο τµήµα (αλλά µόνο ένα τµήµα κάθε φορά)
και µπορεί να έχει πολλά προστατευόµενα µέλη. Τα στοιχεία που κρατούµε για κάθε
υπάλληλο, είναι το όνοµά του, ο κωδικός SSN, η ηµεροµηνία γέννησής του, το
φύλο του, και ο µισθός του.

Κάθε τµήµα περιγράφεται από ένα όνοµα, ένα κωδικό και ένα σύνολο από
τοποθεσίες στις οποίες είναι εγκατεστηµένο. Ένα τµήµα διευθύνεται από ένα και
µοναδικό manager αλλά µπορεί να διαθέτει πολλούς υπαλλήλους που να εργάζονται
για αυτό. Τέλος το κάθε ένα από τα τµήµατα της εταιρείας, µπορεί γενικά να αναλά-
βει πολλά έργα ταυτόχρονα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 39

Κάθε έργο παρακολουθείται από ένα και µόνο τµήµα αλλά πραγµατοποιεί-
ται από πολλούς υπαλλήλους ταυτόχρονα. Ένα έργο περιγράφεται από το όνοµά
του, τον κωδικό του, και την τοποθεσία στην οποία πραγµατοποιείται.

Τέλος το κάθε προστατευόµενο µέλος συσχετίζεται µε ένα και µοναδικό


υπάλληλο.

Με βάση την παραπάνω περιγραφή όσον αφορά τη δοµή και τη λειτουργία


της εταιρείας, κατασκευάσαµε το µοντέλο οντοτήτων συσχετίσεων για αυτό το σύ-
στηµα (σελ. 27) ενώ σε προηγούµενη ενότητα δηµιουργήσαµε και το αντίστοιχο σχε-
σιακό σχήµα της βάσης δεδοµένων (σελ. 35). Η απεικόνιση του ενός µοντέλου στο
άλλο πραγµατοποιείται δια της εφαρµογής µιας διαδικασίας έξι βηµάτων, τα οποία
σε γενικές γραµµές είναι τα ακόλουθα :

ΒΗΜΑ 1 : Για κάθε τύπο οντότητας Ε του µοντέλου οντοτήτων συσχετίσεων,


δηµιουργούµε ένα πίνακα R που να περιλαµβάνει όλα τα απλά πεδία του τύπου ο-
ντότητας. Τα πεδία πολλαπλών τιµών (multivalued attributes) δεν χρησιµοποιού-
νται ακόµη. Εάν κάποιο πεδίο του Ε είναι σύνθετο προσθέτουµε µόνο τα απλά πεδία
από τα οποία αποτελείται. Στη συνέχεια επιλέγουµε κάποιο από τα πεδία κλειδιά του
Ε και το ορίζουµε ως το πρωτεύον κλειδί του πίνακα R. Εάν αυτό το πεδίο είναι
σύνθετο, τότε και το πρωτεύον κλειδί του πίνακα θα είναι σύνθετο κλειδί, και θα απο-
τελείται από περισσότερα από ένα πεδία. Στη δοµή των πινάκων της βάσης που πα-
ρουσιάζεται στις επόµενες σελίδες, τα πρωτεύοντα κλειδιά των πινάκων εµφανίζονται
υπογραµµισµένα.

Στο παράδειγµά µας, από τους τρεις τύπους οντότητας EMPLOYEE,


DEPARTMENT και PROJECT (ο τύπος οντότητας DEPENDENT είναι weak
entity type και θα αναλυθεί αργότερα) δηµιουργούµε τους τρεις αντίστοιχους πίνακες
(που φέρουν τα ίδια ονόµατα). Με βάση τα όσα αναφέραµε στην προηγούµενη παρά-
γραφο αυτοί οι πίνακες θα έχουν την ακόλουθη δοµή.

EMPLOYEE {FNAME, MINIT, LNAME, SSN, BDATE, ADDRESS, SALARY}

DEPARTMENT {DNAME, DNUMBER}

PROJECT {PNAME, PNUMBER, PLOCATION}

ΒΗΜΑ 2 : Για κάθε αδύναµο τύπο οντότητας (weak entity type) W του
µοντέλου οντοτήτων συσχετίσεων, εντοπίζουµε την οντότητα κάτοχο (owner
entity) Ε από την οποία εξαρτάται. Στη συνέχεια για τον τύπο οντότητας W, δη-
µιουργούµε ένα πίνακα R, ο οποίος περιλαµβάνει όλα τα απλά πεδία του W. Εάν ο
τύπος W περιέχει σύνθετα πεδία (composite attributes), τότε όπως και στην προη-
γούµενη περίπτωση προσθέτουµε µόνο τα απλά πεδία από τα οποία αυτά αποτελού-
νται. Στη συνέχεια προσθέτουµε στον πίνακα R το πρωτεύον κλειδί του πίνακα που
έχουµε ήδη δηµιουργήσει στο Βήµα 1 για την οντότητα κάτοχο του W. Επειδή αυτό
το πεδίο είναι πρωτεύον κλειδί σε κάποιο άλλο πίνακα, θα συµµετάσχει στον πίνακα
R, ως ξένο κλειδί (foreign key). Το πρωτεύον κλειδί του πίνακα R, θα είναι σύνθε-
το, και θα αποτελείται από το συνδυασµό του ξένου κλειδιού που θα προσθέσουµε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 40

και του µερικού κλειδιού (partial key) που έχουµε ήδη ορίσει κατά το στάδιο
δηµιουργίας του µοντέλου οντοτήτων συσχετίσεων.
Στο παράδειγµά µας έχουµε ένα µόνο αδύναµο τύπο οντότητας, τον
DEPENDENT, για τον οποίο η οντότητα κάτοχος είναι ο EMPLOYEE. ∆ηµιουρ-
γούµε λοιπόν ένα νέο πίνακα µε το όνοµα DEPENDENT και προσθέτουµε σε αυτόν
όλα τα απλά πεδία του αντίστοιχου τύπου οντότητας. Από το διάγραµµα οντοτήτων
συσχετίσεων, διαπιστώνουµε πως τα πεδία αυτά είναι τα {Name, Sex, BirthDate}.
Στη συνέχεια προσθέτουµε το πρωτεύον κλειδί του πίνακα EMPLOYEE που έχου-
µε δηµιουργήσει στο Βήµα 1 για την οντότητα κάτοχο του DEPENDENT που είναι
ο EMPLOYEE. Το πεδίο αυτό είναι το SSN αλλά στον πίνακα DEPENDENT θα
προστεθεί µε το όνοµα ESSN. Επειδή το partial key του DEPENDENT είναι το
DEPENDENT_NAME, έπεται πως το πρωτεύον κλειδί του πίνακα DEPENDENT
θα είναι το σύνθετο κλειδί ESSN + DEPENDENT_NAME. Έτσι η δοµή του πίνα-
κα DEPENDENT θα είναι η ακόλουθη :

DEPENDENT {ESSN, DEPENDENT_NAME, SEX, BDATE}

ΒΗΜΑ 3 : Για κάθε τύπο συσχέτισης R, η οποία έχει βαθµό 2 (ορίζεται δη-
λαδή ανάµεσα σε δύο οντότητες) και πολλαπλότητα 1:1, εντοπίζουµε τους πίνακες
που έχουµε δηµιουργήσει στο Βήµα 1, για τους δύο τύπους οντότητας που συµµετέ-
χουν σε αυτή τη σχέση. Έστω ότι αυτοί οι πίνακες φέρουν τα ονόµατα R και S. Στη
συνέχεια, διαλέγουµε τον ένα από τους δύο πίνακες (για παράδειγµα τον R) και
προσθέτουµε σε αυτόν, το πρωτεύον κλειδί του πίνακα S. Είναι προφανές πως αυ-
τό το πεδίο θα συµµετέχει στον πίνακα R ως ξένο κλειδί. Επίσης στον πίνακα R, θα
προσθέσουµε εκτός από το ξένο κλειδί και όλα τα πεδία που ενδεχοµένως έχουµε ο-
ρίσει για τον τύπο συσχέτισης R (relationship attributes).

Το ερώτηµα που τίθεται στο σηµείο αυτό αφορά το κριτήριο επιλογής του πί-
νακα στον οποίο θα προσθέσουµε τα επιπλέον πεδία. Στις πιο πολλές περιπτώσεις αυ-
τό το κριτήριο έχει να κάνει µε τον τύπο συµµετοχής του κάθε τύπου οντότητας στον
τύπο συσχέτισης R. Έτσι είναι κοινή πρακτική να επιλέγουµε εκείνο τον πίνακα, για
τον οποίο ο αντίστοιχος τύπος οντότητας χαρακτηρίζεται από ολική συµµετοχή
(total participation) στον θεωρούµενο τύπο συσχέτισης. Εάν και οι δύο τύποι οντό-
τητας παρουσιάζουν ολική συµµετοχή και επιπλέον δεν συµµετέχουν σε άλλο τύπο
συσχέτισης, µπορούµε εναλλακτικά να ενοποιήσουµε τους αντίστοιχους πίνακες
και τα πεδία του τύπου συσχέτισης σε ένα και µοναδικό πίνακα.

Στο παράδειγµά µας έχουµε µόνο ένα τύπο συσχέτισης µε πολλαπλότητα 1:1
που φέρει το όνοµα MANAGES, ορίζεται ανάµεσα στους τύπους οντότητας
EMPLOYEE και DEPARTMENT, και επιπλέον περιέχει και ένα πεδίο, µε το όνο-
µα StartDate. Επειδή ο EMPLOYEE χαρακτηρίζεται από µερική συµµετοχή σε αυ-
τόν τον τύπο συσχέτισης, ενώ αντίθετα το DEPARTMENT χαρακτηρίζεται από ολι-
κή συµµετοχή, προσθέτουµε στον πίνακα DEPARTMENT, τόσο το πρωτεύον κλειδί
του πίνακα EMPLOYEE που είναι το SSN (αλλά µε το όνοµα MGRSSN) όσο και
το πεδίο StartDate του τύπου συσχέτισης MANAGES (αλλά µε το όνοµα
MgrStartDate). Έτσι τελικά ο πίνακας DEPARTMENT θα αποκτήσει τη δοµή

DEPARTMENT {NAME, DNUMBER, MGRSSN, MGRSTARTDATE}

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 41

ΒΗΜΑ 4 : Για κάθε τύπο συσχέτισης R η οποία έχει βαθµό 2 και πολλαπλό-
τητα 1:Ν, εντοπίζουµε τον πίνακα που έχουµε δηµιουργήσει (στο Βήµα 1) για τον
τύπο οντότητας που βρίσκεται στην «Ν πλευρά» της συσχέτισης. Σε αυτόν τον πίνα-
κα, προσθέτουµε ως ξένο κλειδί, το πρωτεύον κλειδί του πίνακα που αντιστοιχεί
στον άλλο τύπο οντότητας (αυτόν που βρίσκεται στην «1 πλευρά» της συσχέτισης).
Στο παράδειγµά µας, έχουµε τρεις τύπους συσχέτισης µε πολλαπλότητα 1:Ν. Τον τύ-
πο συσχέτισης WORKS_FOR ανάµεσα στους τύπους οντότητας DEPARTMENT
και EMPLOYEE, τον τύπο συσχέτισης CONTROLS ανάµεσα στους τύπους οντό-
τητας DEPARTMENT και PROJECT και τον τύπο συσχέτισης SUPERVISION
που είναι αναδροµικός και ορίζεται ανάµεσα σε δύο αντίγραφα του τύπου οντότητας
EMPLOYEE. Η εφαρµογή του Βήµατος 4 σε αυτούς τους τύπους συσχέτισης, θα
έχει τα ακόλουθα αποτελέσµατα.

Στον τύπο συσχέτισης WORKS_FOR, ένα DEPARTMENT διαθέτει πολ-


λούς EMPLOYEES. Σύµφωνα µε τον παραπάνω αλγόριθµο, θα πρέπει να προσθέ-
σουµε το πρωτεύον κλειδί του πίνακα DEPARTMENT στον πίνακα EMPLOYEE
(στην προσθήκη αυτή το πεδίο DNUMBER προστίθεται µε το όνοµα DNO). Μετά
την εφαρµογή αυτού του βήµατος η δοµή του πίνακα EMPLOYEE θα λάβει τη µορ-
φή

EMPLOYEE {FNAME, MINIT, LNAME, SSN, BDATE,


ADDRESS, SALARY, DNO}

Στον τύπο συσχέτισης SUPERVISION, ένας MANAGER εποπτεύει πολλούς


υπαλλήλους. Αυτό σηµαίνει πως θα πρέπει να προσθέσουµε το πρωτεύον κλειδί του
πίνακα που αντιπροσωπεύει τον MANAGER στον πίνακα EMPLOYEE. Επειδή
όµως ο MANAGER είναι και αυτός EMPLOYEE, αυτό σηµαίνει πως θα πρέπει να
προσθέσουµε το πεδίο SSN – που είναι το πρωτεύον κλειδί του EMPLOYEE – στον
πίνακα EMPLOYEE. Κατά την προσθήκη αυτή το πεδίο SSN προστίθεται στον πί-
νακα EMPLOYEE µε το όνοµα SUPERSSN. Μετά από αυτή την διαδικασία, ο πί-
νακας EMPLOYEE θα αποκτήσει τη δοµή

EMPLOYEE {FNAME, MINIT, LNAME, SSN, BDATE,


ADDRESS, SALARY, SUPERSSN, DNO}

Τέλος, στον τύπο συσχέτισης CONTROLS, ένα DEPARTMENT ελέγχει γε-


νικά πολλά PROJECTS. Αυτό σηµαίνει πως θα πρέπει να προσθέσουµε το πρωτεύον
κλειδί του πίνακα DEPARTMENT στον πίνακα PROJECT. Η προσθήκη αυτού του
πεδίου γίνεται µε το όνοµα DNO. Έτσι, η δοµή του πίνακα PROJECT θα λάβει τη
µορφή

PROJECT {PNAME, PNUMBER, PLOCATION, DNO

ΒΗΜΑ 5 : Για κάθε τύπο συσχέτισης µε πολλαπλότητα Μ:Ν, δηµιουργούµε


ένα πίνακα R, στον οποίο προσθέτουµε ως ξένα κλειδιά, τα πρωτεύοντα κλειδιά
των πινάκων που έχουµε δηµιουργήσει (στο Βήµα 1) για τους τύπους οντότητας που
συµµετέχουν σε αυτόν τον τύπο συσχέτισης. Επίσης προσθέτουµε και όλα τα πεδία
που ενδεχοµένως έχουµε ορίσει για αυτή τη συσχέτιση (relationship attributes). Το
πρωτεύον κλειδί του πίνακα R που δηµιουργήσαµε, είναι σύνθετο κλειδί και αποτε-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 3 : Σχεσιακό Μοντέλο 42

λείται από το συνδυασµό των πρωτευόντων κλειδιών των δύο πινάκων που έχουµε
προσθέσει στον πίνακα R.

Στο παράδειγµά µας, η µοναδική σχέση που υφίσταται µε πολλαπλότητα


M:Ν, είναι η σχέση WORKS_ON, που συσχετίζει τον τύπο οντότητας EMPLOYEE
µε τον τύπο οντότητας PROJECT. Τα πρωτεύοντα κλειδιά των οµώνυµων πινάκων
που αναπαριστούν αυτούς τους δύο τύπους οντότητας είναι το SSN και το
PNUMBER αντίστοιχα. Σύµφωνα µε τον αλγόριθµο που περιγράψαµε στην προη-
γούµενη παράγραφο, δηµιουργούµε ένα νέο πίνακα µε το όνοµα WORKS_ON, και
προσθέτουµε σε αυτόν τα προαναφερόµενα πρωτεύοντα κλειδιά, αλλά µε τα ονόµατα
ESSN και PNO. Επίσης από το µοντέλο οντοτήτων συσχετίσεων, διαπιστώνουµε πως
ο τύπος συσχέτισης WORKS_ON, περιλαµβάνει και ένα πεδίο µε το όνοµα HOURS
– το προσθέτουµε λοιπόν και αυτό. Το πρωτεύον κλειδί του νέου πίνακα
WORKS_ON είναι σύνθετο και αποτελείται από το συνδυασµό των πεδίων ESSN
και PNO. Έτσι, τελικά, ο πίνακας WORKS_ON, θα έχει την ακόλουθη δοµή :

WORKS_ON {ESSN, PNO, HOURS}

ΒΗΜΑ 6 : Για κάθε πεδίο πολλαπλής τιµής (multivalued attribute), A, δη-


µιουργούµε ένα καινούριο πίνακα, R, ο οποίος περιέχει το πεδίο Α, καθώς και το
πρωτεύον κλειδί του πίνακα που έχουµε δηµιουργήσει στο Βήµα 1, για τον τύπο ο-
ντότητας που διαθέτει το πεδίο Α. Εάν το πεδίο Α είναι σύνθετο πεδίο, τότε τοποθε-
τούµε στο νέο πίνακα R, όλα τα απλά πεδία από τα οποία αποτελείται. Το πρωτεύον
κλειδί του πίνακα R, είναι σύνθετο κλειδί, και αποτελείται από το πεδίο A, και από
το ξένο κλειδί που έχουµε προσθέσει στο νέο πίνακα, σύµφωνα µε την παραπάνω
διαδικασία.

Στο παράδειγµά µας, το µοναδικό πεδίο πολλαπλής τιµής, είναι το πεδίο


Locations του τύπου οντότητας DEPARTMENT. ∆ηµιουργούµε λοιπόν ένα πίνακα
– στο παράδειγµά µας τον ονοµάζουµε DEPT_LOCATIONS – ο οποίος περιέχει το
πεδίο Locations (µε το όνοµα DLOCATION) και το πρωτεύον κλειδί του πίνακα
DEPARTMENT που έχουµε δηµιουργήσει στο Βήµα 1 για τον οµώνυµο τύπο οντό-
τητας (µε το όνοµα DNUMBER). Το πρωτεύον κλειδί του πίνακα
DEPT_LOCATIONS είναι σύνθετο κλειδί και αποτελείται από το συνδυασµό των
πεδίων DNUMBER + DLOCATION. Έτσι τελικά, ο πίνακας DEPT_LOCATIONS
θα παρουσιάζει την ακόλουθη δοµή :

DEPT_LOCATIONS {DNUMBER, DLOCATION}

Ξεκινώντας λοιπόν από το µοντέλο οντοτήτων συσχετίσεων (σελ. 27) και


εφαρµόζοντας τα παραπάνω έξι βήµατα, κατασκευάσαµε τελικά το σχεσιακό σχήµα
για τη βάση δεδοµένων της εταιρείας (σελ 35). Στην επόµενη σελίδα, παρουσιάζεται
ξανά το ίδιο σχήµα, χωρίς τις συσχετίσεις των πεδίων όπως αυτές υπαγορεύονται από
τον τρίτο κανόνα ακεραιότητας, αλλά µε σαφή χαρακτηρισµό των πεδίων του κάθε
πίνακα, από όπου µπορεί κανείς να καταλάβει, ποια πεδία προήλθαν από άλλους
πίνακες (foreign keys) καθώς και ποια πεδία έχουν προστεθεί, ως πεδία κάποιας
συσχέτισης (relationship attributes).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 43

EMPLOYEE
f.k f.k

FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO

DEPARTMENT DEPT_LOCATIONS
f.k rel.attr f.k

DNAME DNUMBER MGRSSN MGRSTARTDATE DNUMBER DLOCATION

DEPENDENT
f.k

ESSN DEPENDENT-NAME SEX BDATE RELATIONSHIP

PROJECT WORKS_ON
f.k f.k f.k rel.attr

PNAME PNUMBER PLOCATION DNUM ESSN PNO HOURS

Σχήµα 10 : Το σχεσιακό σχήµα για τη βάση δεδοµένων της εταιρείας Στο σχήµα αυτό, τα πε-
δία που φέρουν την ένδειξη f.k είναι ξένα κλειδιά (foreign keys) ενώ τα πεδία µε την ένδειξη rel.attr
είναι πεδία πού έχουν προέλθει από τύπους συσχετίσεων. Τα πεδία αυτών των δύο κατηγοριών έχουν
προστεθεί στους πίνακες της βάσης κατά τη διαδικασία µετατροπής του µοντέλου οντοτήτων συσχετί-
σεων σε σχεσιακό µοντέλο βάσεων δεδοµένων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4
Λογικός Σχεδιασµός
Κανονικοποίηση
Στο κεφάλαιο αυτό παρουσιάζονται οι βασικοί κανόνες
σχεδίασης της δοµής των πινάκων στο σχεσιακό µοντέλο, και
αναλύεται η τεχνική της κανονικοποίησης που είναι το βασικό
εργαλείο αυτής της διαδικασίας σχεδίασης.

Στο προηγούµενο κεφάλαιο αναλύσαµε τη δοµή του σχεσιακού µοντέλου βά-


σεων δεδοµένων και τον τρόπο µε τον οποίο τα δεδοµένα µιας εφαρµογής αποθηκεύ-
ονται στους πίνακες της βάσης. Η βασική αρχή σχεδίασης αυτού του µοντέλου, είναι
η οµαδοποίηση των πεδίων των τύπων οντότητας, και η δηµιουργία πινάκων για
τους τύπους οντότητας και συσχέτισης όπως αυτοί έχουν ορισθεί στο µοντέλο ο-
ντοτήτων συσχετίσεων.

Ωστόσο, ένα από τα βασικά ερωτήµατα που προκύπτουν κατά την πραγµατο-
ποίηση αυτής της διαδικασίας, έχει να κάνει µε την επιλογή των πεδίων που θα ο-
µαδοποιηθούν και θα σχηµατίσουν ένα πίνακα. Με ποιο κριτήριο θα γίνει αυτή η
επιλογή? Πως είµαστε σίγουροι πως η οµαδοποίηση των πεδίων στους πίνακες έγινε
µε τον καλύτερο δυνατό τρόπο? Με άλλα λόγια, µήπως υπάρχει κάποιος καλύτερος
συνδυασµός των πεδίων, ο οποίος θα µπορούσε να οδηγήσει σε µια πιο ευέλικτη και
αξιόπιστη βάση δεδοµένων?

Η διαδικασία της σωστής σχεδίασης της δοµής των πινάκων της βάσης, έτσι
ώστε να ικανοποιεί τις προδιαγραφές που έχουν τεθεί και ταυτόχρονα να είναι ευέλι-
κτη και αποδοτική στη χρήση της ονοµάζεται λογικός ή εννοιολογικός σχεδιασµός
(conceptual or logical design). Στις σελίδες που ακολουθούν θα παρουσιάσουµε
τους βασικούς κανόνες που ακολουθούµε κατά τη λογική σχεδίαση της δοµής µιας
βάσης δεδοµένων, και θα περιγράψουµε αναλυτικά την κανονικοποίηση
(normalization) των πινάκων της βάσης που αποτελεί µια από τις πιο σηµαντικές
διαδικασίες αυτού του είδους.
Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 46

ΟΙ ΒΑΣΙΚΕΣ ΑΡΧΕΣ ΣΧΕ∆ΙΑΣΗΣ ΤΗΣ ∆ΟΜΗΣ ΤΟΥ ΣΧΕΣΙΑΚΟΥ


ΜΟΝΤΕΛΟΥ

Όπως έχει ήδη αναφερθεί, ένα από τα πρώτα βήµατα που κάνουµε κατά τη
φάση της σχεδίασης των πινάκων της βάσης είναι η ταυτοποίηση των πεδίων που
περιέχουν, τα οποία στη συνέχεια οµαδοποιούνται για να σχηµατίσουν αυτούς τους
πίνακες. Αυτή η διαδικασία οµαδοποίησης, θα πρέπει να γίνεται έτσι ώστε τα πεδία
ενός πίνακα, να συσχετίζονται µεταξύ τους και τελικά, ολόκληρη η δοµή του πίνακα
να αναδεικνύει κάποια λογική. Όσο πιο ξεκάθαρη είναι αυτή η λογική, τόσο πιο
εύκολη γίνεται τελικά και η σχεδίαση του σχήµατος ολόκληρης της βάσης δεδο-
µένων.

Ας θεωρήσουµε ως παράδειγµα για µία ακόµη φορά, τη βάση δεδοµένων της


εταιρείας η δοµή της οποίας παρουσιάζεται στο σχήµα 10 (σελ 43). Θεωρώντας τον
πίνακα EMPLOYEE, διαπιστώνουµε πως η δοµή του παρουσιάζει κάποια λογική,
διότι τα πεδία που περιλαµβάνονται σε αυτόν, χαρακτηρίζονται από άµεση συ-
σχέτιση µεταξύ τους. Η κάθε µια από τις πλειάδες του πίνακα, αναπαριστά και κά-
ποιο υπάλληλο της εταιρείας. Για κάθε υπάλληλο καταχωρούµε το όνοµά του, τη δι-
εύθυνσή του, την ηµεροµηνία γέννησής του, το φύλο του, και το µισθό του. Το πεδίο
DNO είναι ξένο κλειδί και αναπαριστά τη συσχέτιση που υφίσταται ανάµεσα στους
πίνακες EMPLOYEE και DEPARTMENT. Η συσχέτιση αυτή είναι ξεκάθαρη και
πλήρως ορισµένη: ένας υπάλληλος πρέπει υποχρεωτικά να ανήκει σε κάποιο τµή-
µα. Με τον ίδιο τρόπο µπορούµε να διαπιστώσουµε και την πλήρη σαφήνεια που χα-
ρακτηρίζει τη συσχέτιση των πινάκων DEPARTMENT και PROJECT: ένα τµήµα
µπορεί να αναλάβει πολλά έργα ταυτόχρονα. Τα πεδία MGRSSN του πίνακα
DEPARTMENT και DNUM του πίνακα PROJECT είναι ξένα κλειδιά, και συσχε-
τίζουν το κάθε τµήµα µε τον MANAGER που το διευθύνει, και το κάθε
PROJECT µε το DEPARTMENT που έχει αναλάβει την υλοποίησή του.

Εξετάζοντας τώρα τη λογική που αναδεικνύεται από τις σχέσεις


DEPT_LOCATIONS και WORKS_ON, διαπιστώνουµε πως εδώ τα πράγµατα είναι
πιο πολύπλοκα. Κάθε πλειάδα στον πίνακα DEPT_LOCATIONS περιέχει ένα κωδι-
κό τµήµατος, και κάποια από τις τοποθεσίες στις οποίες στεγάζεται αυτό το τµήµα.
Με τον ίδιο τρόπο, κάθε πλειάδα στον πίνακα WORKS_ON, περιέχει τον κωδικό
SSN κάποιου EMPLOYEE, τον κωδικό κάποιου από τα PROJECTS στα οποία ερ-
γάζεται, και τον αριθµό των ωρών ανά εβδοµάδα, που απασχολείται σε αυτό το έργο.
Παρά όµως αυτό τον αυξηµένο βαθµό πολυπλοκότητας, το νόηµα που αναδεικνύεται
από αυτούς τους δύο πίνακες, δεν είναι δύσκολο να αποκαλυφθεί: ο πίνακας DEPT_
LOCATIONS αναφέρεται σε ένα πεδίο πολλαπλής τιµής (multivalued attribute)
ενώ ο πίνακας WORKS_ON υλοποιεί τη σχέση M:N που υφίσταται ανάµεσα
στους πίνακες EMPLOYEE και PROJECT. Σε γενικές γραµµές λοιπόν, µπορούµε
να ισχυρισθούµε, πως το σχεσιακό σχήµα της βάσης δεδοµένων της εταιρείας, χαρα-
κτηρίζεται από καλή οργάνωση όσον αφορά την ευκολία ανάδειξης της λογικής που
κρύβεται πίσω από αυτό.

Η τελευταία πρόταση της προηγούµενης παραγράφου αποτελεί ουσιαστικά


και το βασικό κανόνα σχεδίασης της δοµής των πινάκων της βάσης. Σύµφωνα µε τον
κανόνα αυτό, θα πρέπει να οργανώνουµε τους πίνακες έτσι ώστε µια απλή ανά-
γνωση του σχεσιακού σχήµατος να είναι αρκετή για να καταλάβουµε το είδος της

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 47

πληροφορίας που θα καταχωρούµε σε κάθε περίπτωση. Αυτό τυπικά σηµαίνει να


δηµιουργούµε ένα ξεχωριστό πίνακα για κάθε τύπο οντότητας και για κάθε τύπο
συσχέτισης (αυτό ισχύει για συσχετίσεις µε πολλαπλότητα M:N) και σε καµιά
περίπτωση να µη συνδυάζουµε πεδία διαφορετικών τύπων οντότητας, στον ίδιο
πίνακα. Τυπικά εάν ακολουθήσουµε ένα προς ένα, τα έξι βήµατα απεικόνισης του
µοντέλου οντοτήτων συσχετίσεων στο σχεσιακό µοντέλο, µπορούµε να διασφαλί-
σουµε ένα αξιόπιστο σχήµα βάσεως δεδοµένων, όσον αφορά τη λογική του οργάνω-
ση.

Τι θα συµβεί όµως εάν δεν ακολουθήσουµε τον παραπάνω κανόνα και τοπο-
θετήσουµε στον ίδιο πίνακα, πεδία που ανήκουν σε διαφορετικούς τύπους οντότητας?
Το πιο σηµαντικό από τα προβλήµατα που θα παρουσιαστούν στην περίπτωση αυτή,
είναι η εµφάνιση περιττών δεδοµένων (redundant data) στους πίνακες της βάσης.
Αυτό σηµαίνει πως καταχωρούµε την ίδια πληροφορία περισσότερες από µια φορές
στον ίδιο πίνακα, κάτι που έχει ως αποτέλεσµα τόσο την άσκοπη σπατάλη αποθη-
κευτικού χώρου, όσο και τον κίνδυνο εµφάνισης ασυνεπών δεδοµένων
(inconsistent data) στην περίπτωση κατά την οποία τροποποιήσουµε τα πεδία που
καταχωρούνται περισσότερες από µια φορές.

Ας υποθέσουµε για παράδειγµα πως οι πληροφορίες που αφορούν τους υπαλ-


λήλους της εταιρείας, τα έργα στα οποία απασχολούνται, και τα τµήµατα στα οποία
ανήκουν, δεν αποθηκεύονται στους πίνακες EMPLOYEE, PROJECT και
DEPARTMENT σύµφωνα µε το µοντέλο που έχουµε αναπτύξει, αλλά στους πίνακες
EMP_DEP (ο οποίος συσχετίζει τον κάθε υπάλληλο µε το τµήµα στο οποίο ανήκει)
και EMP_PROJ (ο οποίος συσχετίζει τον κάθε υπάλληλο µε το έργο στο οποίο απα-
σχολείται). Οι δύο αυτοί πίνακες θα έχουν την ακόλουθη δοµή :

EMP_DEP

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

EMP_PROJ

SSN PNUMBER HOURS ENAME PNAME PLOCATION

Εάν παρατηρήσουµε προσεκτικά τη δοµή αυτών των δύο πινάκων, θα διαπι-


στώσουµε πως δεν παραβιάζει τον βασικό µας κανόνα σχεδίασης, διότι τα πεδία που
περιλαµβάνονται σε αυτούς τους πίνακες, συσχετίζονται µεταξύ τους, και περι-
γράφουν µε αρκετή σαφήνεια τη φύση της πληροφορίας που καταχωρούµε σε αυτούς.
Παρά το γεγονός όµως αυτό οι δύο αυτοί πίνακες, περιέχουν πεδία που ανήκουν σε
διαφορετικούς τύπους οντότητας. Ο πίνακες EMP_DEP περιέχει τα πεδία
ENAME, SSN, BDATE και ADDRESS του τύπου οντότητας EMPLOYEE και τα
πεδία DNUMBER, DNAME και DMGRSSN του τύπου οντότητας
DEPARTMENT. Με τον ίδιο τρόπο, ο πίνακας EMP_PROJ, περιέχει τα πεδία SSN
και ENAME του τύπου οντότητας EMPLOYEE, τα πεδία PNUMBER, PNAME
και PLOCATION του τύπου οντότητας PROJECT και το πεδίο HOURS του τύπου
συσχέτισης WORKS_ON.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 48

Αυτή η λανθασµένη σχεδίαση των πινάκων, προκαλεί την καταχώρηση σε αυ-


τούς περιττών δεδοµένων, δηλαδή τιµών που καταχωρούνται περισσότερες από µια
φορές. Για να γίνει το γεγονός αυτό πιο εύκολα αντιληπτό, σε επόµενη σελίδα πα-
ρουσιάζουµε ένα στιγµιότυπο αυτών των πινάκων µε δεδοµένα από τους πίνακες
EMPLOYEE, DEPARTMENT και PROJECT. Σε κάθε πίνακα έχει προστεθεί και
µια επιπλέον στήλη (Α/Α) µε αύξουσα αρίθµηση. Αυτή η στήλη προφανώς δεν ανή-
κει στο µοντέλο της βάσης αλλά έχει προστεθεί προκειµένου να αναφερόµαστε στις
εγγραφές των πινάκων µε µεγαλύτερη ευκολία.

Από τα στιγµιότυπα των δύο πινάκων που παρουσιάζονται στη συνέχεια, γίνε-
ται εύκολα αντιληπτός ο λόγος για τον οποίο η χρήση αυτής της εσφαλµένης δοµής
οδηγεί σε απώλεια αποθηκευτικού χώρου. Πράγµατι, στον πίνακα EMP_DEP οι τι-
µές των πεδίων DNUMBER, DNAME και DMGRSSN επαναλαµβάνονται σε κάθε
εγγραφή, σε αντίθεση µε το σωστό σχεσιακό µοντέλο (Σχήµα 10) στο οποίο για κάθε
τµήµα, υπάρχει µια και µοναδική εγγραφή στον πίνακα DEPARTMENT ενώ η µο-
ναδική πληροφορία που επαναλαµβάνεται σε κάθε εγγραφή του πίνακα
EMPLOYEE, είναι ο κωδικός του τµήµατος στον οποίο ανήκει ο κάθε υπάλληλος
της εταιρείας. Η κατάσταση είναι ακόµη χειρότερη στον πίνακα EMP_PROJ όπου
επαναλαµβάνονται όχι µόνο οι πληροφορίες που αφορούν το PROJECT αλλά και οι
πληροφορίες που αφορούν τον EMPLOYEE. Αντίθετα, στο σωστό σχεσιακό σχήµα,
τα στοιχεία για κάθε EMPLOYEE και για κάθε PROJECT καταχωρούνται µόνο µια
φορά στους οµώνυµους πίνακες, και η µοναδική πληροφορία που επαναλαµβάνεται
στον πίνακα WORKS_ON είναι ο συνδυασµός των πρωτευόντων κλειδιών των δύο
πινάκων.

Το δεύτερο και σοβαρότερο πρόβληµα που ανακύπτει από τη λανθασµένη


σχεδίαση του σχεσιακού σχήµατος µιας βάσης δεδοµένων, είναι οι ανωµαλίες που
προκύπτουν κατά τις διάφορες διαδικασίες τροποποίησης του περιεχοµένου της βά-
σης (update anomalies). Όπως έχουµε αναφέρει στο προηγούµενο κεφάλαιο, αυτές
οι διαδικασίες µπορεί να ανήκουν σε τρεις διαφορετικές κατηγορίες: εισαγωγή νέων
εγγραφών στους πίνακες της βάσης, διαγραφή υπαρχόντων εγγραφών, και τρο-
ποποίηση του περιεχοµένου των εγγραφών των πινάκων της βάσης. Αυτό σηµαί-
νει πως αυτές οι ανωµαλίες που συσχετίζονται µε την τροποποίηση του περιεχοµένου
της βάσης, µπορούν να εµφανιστούν και στις τρεις παραπάνω περιπτώσεις, όπως φαί-
νεται από τα παραδείγµατα που ακολουθούν:

Ανωµαλίες που εµφανίζονται κατά τη διαδικασία της εισαγωγής νέων


εγγραφών (insertion anomalies): έστω ότι θέλουµε να προσθέσουµε µια νέα
εγγραφή στον πίνακα EMP_DEP. Αυτή η εγγραφή εκτός από τα χαρακτηριστικά του
EMPLOYEE, θα πρέπει να περιλαµβάνει και τα χαρακτηριστικά του
DEPARTMENT στο οποίο εργάζεται ο EMPLOYEE. Εάν ο EMPLOYEE δεν έχει
ακόµη τοποθετηθεί σε κανένα τµήµα, τα πεδία της νέας εγγραφής που αφορούν το
DEPARTMENT, θα λάβουν την τιµή NULL. Στην αντίθετη περίπτωση θα λάβουν
τις τιµές εκείνες που αντιστοιχούν στο τµήµα στο οποίο τοποθετείται ο
EMPLOYEE. Το πρόβληµά µας σε αυτή τη διαδικασία εισαγωγής της νέας εγγρα-
φής, είναι πως θα πρέπει να είµαστε ιδιαίτερα προσεκτικοί όσον αφορά τις τιµές του
DEPARTMENT που θα χρησιµοποιήσουµε, διότι αυτές θα πρέπει να είναι κάθε φο-
ρά οι σωστές τιµές. Αντίθετα, στο σωστό σχεσιακό µοντέλο, δεν υπάρχει αυτό το
πρόβληµα, διότι η διαδικασία καταχώρησης κάποιου υπαλλήλου, δεν έχει καµία

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 49

σχέση µε τη διαδικασία καταχώρησης κάποιου τµήµατος. Η κάθε εγγραφή κατα-


χωρείται στο δικό της πίνακα, και κάθε φορά που καταχωρούµε ένα νέο
EMPLOYEE, το µόνο που έχουµε να κάνουµε είναι να καταχωρήσουµε – εκτός από
τα πεδία του – τον κωδικό του τµήµατος στο οποίο πρόκειται να τοποθετηθεί.

Επιπλέον, χρησιµοποιώντας το σωστό σχεσιακό µοντέλο, δεν έχουµε πρόβλη-


µα στο να καταχωρήσουµε στη βάση ένα DEPARTMENT που δεν έχει καθόλου
EMPLOYEES. Αντίθετα η διαδικασία αυτή είναι δύσκολο να πραγµατοποιηθεί στο
εσφαλµένο σχεσιακό µοντέλο που χρησιµοποιεί τον πίνακα EMP_DEP. Στο µοντέλο
αυτό για να είναι δυνατή µια τέτοια καταχώρηση, θα πρέπει η νέα εγγραφή να εµφα-
νίζει τιµές NULL στα πεδία που αφορούν τον EMPLOYEE – αφού θέλουµε να κα-
ταχωρήσουµε ένα άδειο τµήµα. Ένα όµως από αυτά τα πεδία είναι και το πεδίο SSN
που αποτελεί και το πρωτεύον κλειδί του πίνακα EMP_DEP, και το οποίο σύµφωνα
µε τον δεύτερο κανόνα ακεραιότητας δεν µπορεί να πάρει την τιµή NULL. Αλλά α-
κόµη και εάν ήταν δυνατή η προσθήκη αυτής της εγγραφής, το πρόβληµα παραµένει.
Πράγµατι, εάν αργότερα καταχωρήσουµε και τον EMPLOYEE που λείπει τοποθε-
τώντας τον ταυτόχρονα σε κάποιο τµήµα, η πρώτη εγγραφή δεν θα είναι πλέον ανα-
γκαία, και θα πρέπει να τη διαγράψουµε. Όλα αυτά τα προβλήµατα δεν εµφανίζονται
όταν χρησιµοποιούµε το σωστό σχεσιακό σχήµα, διότι εκεί, η καταχώρηση ενός τµή-
µατος δεν έχει καµία απολύτως σχέση µε την καταχώρηση ενός υπαλλήλου – τα πε-
δία του κάθε τύπου οντότητας καταχωρούνται στο δικό τους ξεχωριστό πίνακα
το καθένα.

Ανωµαλίες που εµφανίζονται κατά τη διαδικασία της διαγραφής υπαρχό-


ντων εγγραφών (deletion anomalies): το πρόβληµα που προκύπτει κατά τη διαγρα-
φή των εγγραφών του πίνακα έχει να κάνει µε το γεγονός πως η κάθε εγγραφή πε-
ριέχει δεδοµένα από δύο τύπους οντότητας ταυτόχρονα. Στο παράδειγµά µας, τα
στοιχεία για τα τµήµατα της εταιρείας τοποθετούνται στον ίδιο πίνακα µε τα στοιχεία
των υπαλλήλων της εταιρείας. Αυτό σηµαίνει πως αν διαγράψουµε όλους τους
υπαλλήλους από τον πίνακα EMP_DEP, θα χάσουµε και όλα τα στοιχεία που
αφορούν τα τµήµατα της εταιρείας – κάτι που βέβαια δεν είναι επιθυµητό. Αντίθετα,
στο σωστό σχεσιακό σχήµα, τα στοιχεία των διαφόρων τύπων οντότητας της
εφαρµογής βρίσκονται καταχωρηµένα σε διαφορετικούς πίνακες, και η διαγραφή των
εγγραφών του ενός πίνακα, αφήνει ανεπηρέαστα τα περιεχόµενα των υπολοίπων
πινάκων.
Ανωµαλίες που εµφανίζονται κατά τη διαδικασία της τροποποίησης των
περιεχοµένων των εγγραφών του πίνακα (modification anomalies): επειδή η ε-
σφαλµένη δοµή του πίνακα EMP_DEP προκαλεί την εµφάνιση επαναλαµβανόµενων
πεδίων, είναι προφανές, πως εάν η τιµή κάποιου από αυτά τα πεδία τροποποιηθεί, αυ-
τή η αλλαγή θα πρέπει να µεταφερθεί και σε όλα τα στιγµιότυπα αυτού του πεδίου.
Για παράδειγµα, εάν αλλάξουµε τον κωδικό SSN του MANAGER του τµήµατος µε
κωδικό αριθµό 5, θα πρέπει να αλλάξουµε αυτή την τιµή σε όλους τους υπαλλήλους
της εταιρείας που εργάζονται σε αυτό το τµήµα – στην αντίθετη περίπτωση η βάση
µας θα χαρακτηρίζεται από την παρουσία ασυνεπών δεδοµένων. Αντίθετα στο σωστό
σχεσιακό σχήµα, αυτή η αλλαγή µπορεί να πραγµατοποιηθεί χωρίς κανένα πρόβληµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 50

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 51

Εποµένως, ένας δεύτερος κανόνας που θα πρέπει να ακολουθήσουµε κατά το


στάδιο της σχεδίασης του σχεσιακού σχήµατος µιας βάσης δεδοµένων, είναι η οργά-
νωση της δοµής των πινάκων µε τέτοιο τρόπο ώστε να µην εµφανίζονται στις εγ-
γραφές των πινάκων της βάσης, επαναλαµβανόµενα πεδία.

Σε µια πιο αυστηρή θεωρητική περιγραφή, µπορούµε να ορίσουµε και άλλους


κανόνες σχεδίασης του σχεσιακού σχήµατος µιας βάσης δεδοµένων. Μιλώντας γενι-
κά αυτοί οι κανόνες απαγορεύουν την προσθήκη στους βασικούς πίνακες της βά-
σης, πεδίων, που να λαµβάνουν NULL τιµές, ή εάν κάτι τέτοιο δεν µπορεί να απο-
φευχθεί, να ισχύει µόνο για ένα µικρό ποσοστό των εγγραφών του πίνακα, και όχι για
την πλειοψηφία των εγγραφών. Περισσότερες λεπτοµέρειες πάνω στο θέµα αυτό
µπορούν να βρεθούν στη βιβλιογραφία.

ΣΥΝΑΡΤΗΣΙΑΚΕΣ ΕΞΑΡΤΗΣΕΙΣ

Η έννοια της συναρτησιακής εξάρτησης (functional dependency) κατέχει


κεντρική θέση στη θεωρία των σχεσιακών βάσεων δεδοµένων, και ορίζεται ως µια
συσχέτιση ανάµεσα στα πεδία ενός πίνακα. Πιο συγκεκριµένα, ένα πεδίο B κά-
ποιου πίνακα θεωρείται συναρτησιακώς εξαρτώµενο από ένα πεδίο Α του ίδιου
πίνακα, όταν σε κάθε χρονική στιγµή, η τιµή του Α καθορίζει µονοσήµαντα την
τιµή του Β. Σε µια ισοδύναµη διατύπωση, µπορούµε να περιγράψουµε την παραπάνω
συσχέτιση ανάµεσα στα πεδία Α και Β λέγοντας πως το πεδίο Α προσδιορίζει συ-
ναρτησιακά το πεδίο Β. Για αυτή τη συναρτησιακή εξάρτηση, χρησιµοποιούµε το
συµβολισµό Α→Β, ενώ ισοδύναµα µπορούµε να γράψουµε και Β = Β(Α). Είναι προ-
φανές πως τα πεδία Α και Β µπορεί να είναι τόσο απλά (atomic) όσο και σύνθετα
(composite) πεδία. Για παράδειγµα, στον πίνακα WORKS_ON, ο συνδυασµός των
πεδίων {ESSN, PNO} – που αποτελεί και το πρωτεύον κλειδί του πίνακα – καθορίζει
µονοσήµαντα την τιµή του πεδίου HOURS. Στην περίπτωση αυτή µπορούµε να γρά-
ψουµε {ESSN, PNO}→HOURS.

Σε ένα οποιοδήποτε πίνακα µιας σχεσιακής βάσης δεδοµένων, όλα τα πεδία


του πίνακα που δεν ανήκουν στο πρωτεύον κλειδί του, εξαρτώνται συναρτησιακά
από τα πεδία του πρωτεύοντος κλειδιού. Ένα παράδειγµα συναρτησιακής εξάρτη-
σης είναι η SSN→LNAME ανάµεσα στα πεδία SSN και LNAME του πίνακα
EMPLOYEE. Πράγµατι, γνωρίζοντας τον κωδικό αριθµό ενός υπαλλήλου, προσδιο-
ρίζουµε µονοσήµαντα το επώνυµό του. Αντίθετα, η συσχέτιση LNAME→SSN δεν
είναι έγκυρη, διότι είναι πιθανόν να υπάρχουν υπάλληλοι µε το ίδιο επώνυµο, και οι
οποίοι ασφαλώς, θα χαρακτηρίζονται από διαφορετικό κωδικό SSN. Μιλώντας γενι-
κά, η ισχύς της συσχέτισης Α→Β δεν προϋποθέτει και την ισχύ της συσχέτισης
Β→Α.

Η συναρτησιακή εξάρτηση µιας οµάδας πεδίων από κάποια άλλη, µπορεί να


είναι τόσο ολική (full dependency) όσο και µερική (partial dependency). ∆ύο ο-
µάδες πεδίων Χ και Υ λέµε ότι χαρακτηρίζονται από ολική εξάρτηση, όταν η
αφαίρεση έστω και ενός από τα πεδία του Χ, καταργεί την εξάρτηση X→Y. Στην
αντίθετη περίπτωση, όταν δηλαδή η εν λόγω εξάρτηση διατηρείται ακόµη και µετά
την αφαίρεση του πεδίου από το σύνολο πεδίων Χ, τότε οι δύο οµάδες πεδίων χαρα-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 52

κτηρίζονται από µερική εξάρτηση. Ας σηµειωθεί πως σε όλες σχεδόν τις περιπτώ-
σεις η οµάδα πεδίων Υ, περιλαµβάνει συνήθως µόνο ένα πεδίο.

Ας θεωρήσουµε για παράδειγµα τον πίνακα EMP_PROJ του εσφαλµένου


σχεσιακού σχήµατος και τη συναρτησιακή εξάρτηση {SSN, PNUMBER}→
HOURS. Αυτή η εξάρτηση είναι έγκυρη, διότι η γνώση του κωδικού SSN του υ-
παλλήλου και του κωδικού του έργου στο οποίο απασχολείται, ταυτοποιεί µονο-
σήµαντα το πλήθος των ωρών που εργάζεται ο υπάλληλος σε αυτό το έργο. Εάν
τώρα αφαιρέσουµε το πεδίο SSN, η εξάρτηση PNUMBER→HOURS, δεν υφίσταται
πλέον, διότι η γνώση του κωδικού του υπαλλήλου δεν αρκεί για να ταυτοποιήσουµε
το πλήθος των ωρών που απασχολείται σε κάποιο έργο – απαιτείται και η γνώση του
κωδικού αυτού του έργου. Με τον ίδιο τρόπο δεν υφίσταται ούτε η εξάρτηση
SSN→HOURS που αποµένει εάν αφαιρέσουµε το πεδίο PNUMBER. Εφ’ όσον λοι-
πόν η εξάρτηση {SSN, PNUMBER}→HOURS καταργείται εάν αφαιρέσουµε έστω
και ένα πεδίο από αυτή, τα πεδία HOURS και {SSN, PNUMBER}, είναι ολικώς ε-
ξαρτηµένα (fully dependent).

Αντίθετα, αν θεωρήσουµε την εξάρτηση {SSN, PNUMBER}→ΕΝΑΜΕ αυ-


τή δεν καταργείται εάν αφαιρέσουµε το πεδίο PNUMBER. Πράγµατι, η συναρτησια-
κή εξάρτηση SSN→ENAME που αποµένει µετά την αφαίρεση του εν λόγω πεδίου,
είναι έγκυρη, διότι η τιµή του κωδικού SSN για ένα υπάλληλο, καθορίζει µονοσήµα-
ντα το όνοµά του. Στην περίπτωση αυτή λέµε πως τα πεδία {SSN, PNUMBER} και
ENAME είναι µερικώς εξαρτηµένα (partially dependent).

∆ύο πεδία Α και Β χαρακτηρίζονται από έµµεση συναρτησιακή εξάρτηση


όταν υπάρχει ένα τρίτο πεδίο C τέτοιο ώστε Α→C και C→Β ή ισοδύναµα όταν
ισχύουν οι συσχετίσεις C = C(A) και B = B(C). Εάν επιπλέον το πεδίο C δεν ανήκει
στα πεδία κλειδιά του πίνακα, τότε η εν λόγω εξάρτηση λέγεται µεταβατική εξάρτη-
ση (transitive dependency). Μια συναρτησιακή εξάρτηση µπορεί να είναι µόνιµη ή
προσωρινή, ανάλογα µε το χρονικό διάστηµα για το οποίο ισχύει. Για παράδειγµα η
συσχέτιση SSN→LNAME του πίνακα EMPLOYEE είναι µόνιµη διότι ο κωδικός
SSN ενός υπαλλήλου δεν πρόκειται να αλλάξει ποτέ. Αντίθετα, η συσχέτιση
DNUMBER→ MGRSSN του πίνακα DEPARTMENT είναι προσωρινή, διότι είναι
πιθανόν σε κάποια χρονική στιγµή να λάβει χώρα αντικατάσταση του MANAGER
κάποιου τµήµατος µε κάποιο άλλο υπάλληλο της εταιρείας.

Ένα τελευταίο είδος εξάρτησης που θα µας απασχολήσει στο σηµείο αυτό εί-
ναι η συναρτησιακή εξάρτηση δύο πεδίων A και B εκ των οποίων το ένα πεδίο
είναι πεδίο πολλαπλής τιµής (multivalued dependency). Στην περίπτωση αυτή η
γνώση του Α δεν καθορίζει µονοσήµαντα την τιµή του Β, αλλά ένα σύνολο τιµών για
το Β που είναι γνωστό και καθορισµένο εκ των προτέρων. Μια τέτοια εξάρτηση θα
είχαµε για παράδειγµα εάν στον πίνακα EMP_DEP προσθέταµε ως πεδίο και την το-
ποθεσία του τµήµατος DLOCATION. Επειδή ένα τµήµα µπορεί να έχει γραφεία σε
περισσότερες από µια τοποθεσίες, η γνώση του κωδικού DNUMBER για ένα τµήµα
δεν προσδιορίζει µονοσήµαντα την τοποθεσία του τµήµατος, αλλά συσχετίζεται
µε ένα µια ολόκληρη οµάδα τιµών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 53

Με βάση την έννοια της συναρτησιακής εξάρτησης, µπορούµε τώρα να πε-


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

ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ

Η διαδικασία της κανονικοποίησης (normalization process) προτάθηκε από


τον Codd το 1970, και η βασική της λειτουργία, είναι να δέχεται ως είσοδο το σχε-
σιακό σχήµα µιας βάσης δεδοµένων και να εφαρµόζει πάνω του µια σειρά από
ελέγχους προκειµένου να διαπιστώσει εάν ανήκει ή όχι σε κάποια κανονική µορ-
φή. Ο Codd εισήγαγε τρεις κανονικές µορφές, την πρώτη, δεύτερη και τρίτη κανο-
νική µορφή οι οποίες συσχετίζονται µε τις συναρτησιακές εξαρτήσεις που υφίστα-
νται ανάµεσα στα πεδία των πινάκων της βάσης, ενώ αργότερα προτάθηκαν άλλες
δύο κανονικές µορφές – η τέταρτη και η πέµπτη – οι οποίες στηρίζονται σε άλλου
είδους εξαρτήσεις (multivalued dependencies και join dependencies).

Σε µία πρώτη περιγραφή, η κανονικοποίηση εφαρµόζεται πάνω σε ένα σχε-


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

Μια κανονική µορφή ορίζεται ως η «κατάσταση» στην οποία βρίσκεται


µια σχέση όσον αφορά τους τύπους των εξαρτήσεων που υφίστανται ανάµεσα
στα πεδία της. Επειδή γενικά αυτές οι εξαρτήσεις οδηγούν σε προβληµατική συµπε-
ριφορά του σχήµατος της βάσης – όπως είναι για παράδειγµα η εµφάνιση επαναλαµ-
βανόµενων πεδίων – θα πρέπει να αποµακρυνθούν από τους πίνακες. Για το λόγο αυ-
τό η κανονικοποίηση πραγµατοποιείται σε µια ακολουθία βηµάτων, µε το κάθε
βήµα να περιλαµβάνει την αποµάκρυνση από τη δοµή των πινάκων κάποιου τύ-
που συναρτησιακής εξάρτησης, διαδικασία, η οποία έχει ως αποτέλεσµα, τη µε-
τάβαση του σχεσιακού σχήµατος, από µια κανονική µορφή σε µια άλλη. Πιο συ-
γκεκριµένα, οι διαδικασίες που θα πρέπει να λάβουν χώρα για τη µετάβαση των σχε-
σιακών σχηµάτων σε κάθε µια από τις πέντε κανονικές µορφές που έχουν ορισθεί,
είναι οι ακόλουθες :

Πρώτη Κανονική Μορφή (1st Normal Form, 1NF): Για να φέρουµε ένα πί-
νακα σε πρώτη κανονική µορφή, θα πρέπει να αποµακρύνουµε τις
επαναλαµβανόµενες οµάδες πεδίων, έτσι ώστε η τοµή µιας γραµµής και µιας
στήλης του πίνακα, να αντιστοιχεί πάντα σε µια απλή τιµή.

∆εύτερη Κανονική Μορφή (2nd Normal Form, 2NF): Για να φέρουµε ένα
πίνακα σε δεύτερη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε πρώτη κα-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 54

νονική µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις µερικές συναρτησια-
κές εξαρτήσεις (partial dependencies) που υφίστανται ανάµεσα στα πεδία του.

Τρίτη Κανονική Μορφή (3rd Normal Form, 3NF): Για να φέρουµε ένα πί-
νακα σε τρίτη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε δεύτερη κανονι-
κή µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις µεταβατικές συναρτησια-
κές εξαρτήσεις (transitive dependencies) που υφίστανται ανάµεσα στα πεδία του.

Τέταρτη Κανονική Μορφή (4th Normal Form, 4NF): Για να φέρουµε ένα
πίνακα σε τέταρτη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε τρίτη κανο-
νική µορφή και στη συνέχεια να αποµακρύνουµε όλες τις συναρτησιακές εξαρτή-
σεις που περιλαµβάνουν πεδία πολλαπλών τιµών (multivalued dependencies).

Πέµπτη Κανονική Μορφή (5th Normal Form, 5NF) : Για να φέρουµε ένα
πίνακα σε πέµπτη κανονική µορφή θα πρέπει πρώτα να τον φέρουµε σε τέταρτη κα-
νονική µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις υπόλοιπες εξαρτήσεις
που ενδεχοµένως έχουν παραµείνει στη δοµή του, µετά την εφαρµογή των παραπά-
νω διαδικασιών.

Εκτός από τις πέντε κανονικές µορφές που περιγράψαµε παραπάνω, µια επι-
πλέον κανονική µορφή που χρησιµοποιείται σε αρκετές περιπτώσεις, είναι η κανονι-
κή µορφή των Boyce-Codd (Boyce Codd Normal Form, BCNF). Η BCNF, µπορεί
να θεωρηθεί ως µια πιο αυστηρά διατυπωµένη 3NF. Αυτό σηµαίνει πως ένας πίνα-
κας που βρίσκεται σε BCNF βρίσκεται αυτόµατα και σε 3NF – το αντίστροφο όµως
δεν ισχύει. Η BCNF θα µελετηθεί αναλυτικά στις επόµενες σελίδες. Στο σχήµα που
ακολουθεί αναπαρίστανται µε γραφικό τρόπο, τα βήµατα που θα πρέπει να ακολου-
θήσουµε προκειµένου να µετασχηµατίσουµε µια µη κανονικοποιηµένη σχέση από την
πρώτη έως και την πέµπτη κανονική µορφή.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 55

Μη κανονικοποιηµένη
σχέση
Αποµάκρυνση
επαναλαµβανόµενων πεδίων
Κανονικοποιηµένη
σχέση (1NF)
Αποµάκρυνση
µερικών συσχετίσεων
Κανονικοποιηµένη
σχέση (2NF)
Αποµάκρυνση
µεταβατικών συσχετίσεων
Κανονικοποιηµένη
σχέση (3NF)
Αποµάκρυνση των
υπόλοιπων συσχετίσεων
Κανονικοποιηµένη
σχέση (BCNF)
Αποµάκρυνση συσχετίσεων
µε πεδία πολλαπλών τιµών
Κανονικοποιηµένη
σχέση (4NF)
Αποµάκρυνση όλων των
Κανονικοποιηµένη υπόλοιπων ανωµαλιών
σχέση (5NF)

Σχήµα 11 : Τα έξι βήµατα της κανονικοποίησης µιας δεδοµένων

Μετά την παραπάνω συνοπτική περιγραφή των βασικών αρχών της κανονικο-
ποίησης, ας περάσουµε τώρα στην αναλυτική παρουσίαση των πέντε κανονικών µορ-
φών στις οποίες είναι δυνατό να βρεθούν τα σχήµατα των πινάκων µιας σχεσιακής
βάσης δεδοµένων.

Πρώτη κανονική µορφή (1st Normal Form, 1NF)

Η πρώτη κανονική µορφή δηµιουργήθηκε για να αποτρέψει την εµφάνιση


στα πεδία ενός πίνακα σύνθετων τιµών, πολλαπλών τιµών καθώς και συνδυα-
σµούς αυτών των δύο. Ένας πίνακας λέµε ότι βρίσκεται σε 1NF, όταν η τιµή του
κάθε πεδίου σε κάθε πλειάδα, είναι ατοµική δηλαδή δεν µπορεί να διασπαστεί σε
µικρότερες µονάδες πληροφορίας. Εάν ένας πίνακας περιέχει πεδία πολλαπλών τι-
µών, τότε θα πρέπει να µετασχηµατιστεί µε τέτοιο τρόπο, ώστε σε κάθε κελί του να
βρίσκεται µια απλή τιµή.

Για να κατανοήσουµε τη διαδικασία µετατροπής ενός πίνακα σε πρώτη κανο-


νική µορφή, ας υποθέσουµε πως ο πίνακας DEPARTMENT δεν έχει τη δοµή που
έχουµε ορίσει στο Σχήµα 10, αλλά περιλαµβάνει τα ακόλουθα πεδία :

DEPARTMENT

DNAME DNUMBER DMGRSSN DLOCATIONS

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 56

Σύµφωνα µε το µοντέλο της εταιρείας, που παρουσιάσαµε στα προηγούµενα


κεφάλαια, ένα τµήµα της µπορεί να έχει γραφεία σε περισσότερες από µια τοποθεσί-
ες. Αυτό σηµαίνει πως η στήλη DLOCATIONS θα περιέχει για κάθε τµήµα περισσό-
τερες από µια τιµές όπως φαίνεται στο ακόλουθο παράδειγµα.

DNAME DNUMBER DMGRSSN DLOCATIONS


Bellaire
Research 5 333445555 Sugarland
Houston
Administration 4 987654321 Stafford
Headquarters 1 888665555 Houston

Ο πίνακας DEPARTMENT στην παραπάνω µορφή, δεν ακολουθεί τον ορι-


σµό της σχέσης που έχουµε δώσει για το σχεσιακό µοντέλο και θα πρέπει να µετα-
σχηµατιστεί. Υπάρχουν δύο είδη µετασχηµατισµών που µπορούµε να εφαρµόσουµε.
Ο ένας µετασχηµατισµός είναι να ορίσουµε για κάθε τιµή του πεδίου
DLOCATIONS και µια ξεχωριστή πλειάδα – στην περίπτωση αυτή το πρωτεύον
κλειδί του πίνακα που θα προκύψει, θα είναι ο συνδυασµός των πεδίων DNUMBER
και DLOCATION:

DNAME DNUMBER DMGRSSN DLOCATION


Research 5 333445555 Bellaire
Research 5 333445555 Sugarland
Research 5 333445555 Houston
Administration 4 987654321 Stafford
Headquarters 1 888665555 Houston

Μετά την εφαρµογή αυτού του µετασχηµατισµού, ο πίνακας βρίσκεται σε


1NF, διότι σε κάθε κελί του περιέχει µια απλή τιµή. Ωστόσο, χαρακτηρίζεται από την
παρουσία επαναλαµβανόµενων πεδίων, κάτι που σηµαίνει πως κατά τη διαχείριση
του περιεχοµένου του, θα εµφανιστούν οι ανωµαλίες εισαγωγής, διαγραφής και τρο-
ποποίησης εγγραφών που παρουσιάσαµε σε προηγούµενες σελίδες. Για το λόγο αυτό,
µια δεύτερη εναλλακτική λύση που µπορούµε να εφαρµόσουµε, είναι να αποµακρύ-
νουµε το πεδίο DLOCATIONS που δηµιουργεί το πρόβληµα µε τις πολλαπλές
τιµές που περιέχει, και να το τοποθετήσουµε σε ένα άλλο πίνακα – στον πίνακα
DEPT_LOCATIONS – µαζί µε το πρωτεύον κλειδί του πίνακα DEPARTMENT.
Τα δύο αυτά πεδία θα αποτελούν και το πρωτεύον κλειδί του πίνακα
DEPT_LOCATIONS.

DEPARTMENT DEPT_LOCATIONS

DNAME DNUMBER DMGRSSN DNUMBER DLOCATION


Research 5 333445555 5 Bellaire
Administration 4 987654321 5 Sugarland
Headquarters 1 888665555 5 Houston
4 Stafford
1 Houston

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 57

Μετά την εφαρµογή αυτού του µετασχηµατισµού, οι πίνακες


DEPARTMENT και DEPT_LOCATIONS βρίσκονται σε 1NF, και επιπλέον δεν
περιέχουν τιµές που να επαναλαµβάνονται. Εποµένως ανάµεσα στις δύο προσεγγίσεις
που µπορούµε να ακολουθήσουµε για να φέρουµε τον πίνακα DEPARTMENT σε
1NF, θα επιλέξουµε την τελευταία.

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως τα πεδία πολλαπλών τι-
µών σε ένα πίνακα που επιβάλλουν το µετασχηµατισµό του σε 1NF, µπορεί να είναι
τόσο απλά, όσο και σύνθετα όπως συµβαίνει για παράδειγµα στο ακόλουθο σχεσιακό
σχήµα :

EMP_PROJ PROJECTS
SSN ENAME
PNUMBER HOURS

∆εν είναι δύσκολο να διαπιστώσει κανείς, πως η ύπαρξη σύνθετων πεδίων


που ταυτόχρονα είναι και πεδία πολλαπλών τιµών ισοδυναµεί µε την ύπαρξη ενός
πίνακα µέσα σε ένα άλλο. Αυτού του είδους οι σχέσεις λέγονται ένθετες (nested
relations) και διατηρούν όλα τα χαρακτηριστικά µιας σχέσης. Στο παραπάνω παρά-
δειγµα, για κάθε EMPLOYEE ορίζεται και ένας ξεχωριστός πίνακας που περιέχει
τον κωδικό του έργου στο οποίο απασχολείται καθώς και τον αριθµό των ωρών που
εργάζεται εβδοµαδιαίως σε αυτό το έργο. Στον ένθετο αυτό πίνακα, που ορίζεται για
κάθε υπάλληλο της εταιρείας, δεν πρέπει να υπάρχουν εγγραφές που να φέρουν την
ίδια τιµή για το πεδίο PNUMBER – εποµένως το πεδίο PNUMBER, θα αποτελεί
πρωτεύον κλειδί του ένθετου πίνακα. Σύµφωνα µε την ορολογία του σχεσιακού µο-
ντέλου, τα κλειδιά αυτού του είδους, ονοµάζονται µερικά πρωτεύοντα κλειδιά
(partial primary keys). Ένα στιγµιότυπο αυτού του σχεσιακού σχήµατος, παρουσιά-
ζεται στη συνέχεια.

PROJECTS
SSN ENAME
PNUMBER HOURS
1 32.5
123456789 Smith, John B.
2 7.5
666884444 Narayan, Ramesh K. 3 40.0
1 20.0
453453453 English, Joyce A.
2 20.0
2 10.0
3 10.0
333445555 Wong, Franklin
10 10.0
20 10.0
30 30.0
999887777 Zelaya, Alicia J.
10 10.0
10 35.0
987987987 Jabbar, Ahmad V.
30 5.0
30 20.0
987654321 Wallace, Jennifer S.
10 15.0
888665555 Borg, James E 20 NULL

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 58

Για να µετασχηµατίσουµε τον πίνακα αυτό σε 1NF, θα πρέπει να δηµιουρ-


γήσουµε ένα νέο πίνακα, και να µεταφέρουµε σε αυτόν τόσο τα πεδία του ένθετου
πίνακα (που είναι τα PNUMBER και HOURS) όσο και το πρωτεύον κλειδί του
πίνακα EMP_PROJ (που είναι το SSN). Έτσι οι δύο νέοι πίνακες που θα προκύ-
ψουν θα είναι οι

EMP_PROJ1 SSN ENAME και

EMP_PROJ2 SSN PNUMBER HOURS µε δεδοµένα

SSN ENAME SSN PNUMBER HOURS


123456789 Smith, John B. 123456789 1 32.5
666884444 Narayan, Ramesh K. 123456789 2 7.5
453453453 English, Joyce A. 666884444 3 40.0
333445555 Wong, Franklin 453453453 1 20.0
999887777 Zelaya, Alicia J. 453453453 2 20.0
987987987 Jabbar, Ahmad V. 333445555 2 10.0
987654321 Wallace, Jennifer S. 333445555 3 10.0
888665555 Borg, James E 333445555 10 10.0
333445555 20 10.0
999887777 30 30.0
Όπως µπορεί εύκολα να διαπιστώσει κα- 999887777 10 10.0
νείς ο πίνακας EMP_PROJ2, είναι στην 987987987 10 35.0
πραγµατικότητα ο πίνακας WORKS_ON 987987987 30 5.0
987654321 30 20.0
987654321 20 15.0
888665555 20 NULL

∆εύτερη κανονική µορφή (2nd Normal Form, 2NF)

Η δεύτερη κανονική µορφή προκύπτει από την πρώτη κανονική µορφή, εάν
µετασχηµατίσουµε τη δοµή του πίνακα, µε τέτοιο τρόπο ώστε να αποµακρυνθούν
όλες οι µερικές συναρτησιακές εξαρτήσεις (partial dependencies) που υφίστανται
ανάµεσα στα πεδία του. Με άλλα λόγια ένας πίνακας βρίσκεται σε δεύτερη κανονι-
κή µορφή, όταν όλα τα πεδία που δεν ανήκουν στο πρωτεύον κλειδί του πίνακα,
εξαρτώνται συναρτησιακώς µόνο από τα πεδία του πρωτεύοντος κλειδιού, και
µάλιστα, µέσω πλήρους συναρτησιακής εξάρτησης (full dependency). Επειδή ο
ορισµός της πλήρους και της µερικής συναρτησιακής εξάρτησης µεταξύ δύο πεδίων
X και Υ εφαρµόζεται µόνο όταν το Χ περιλαµβάνει περισσότερα από ένα πεδία, είναι
προφανές πως η αναγωγή ενός πίνακα στη δεύτερη κανονική µορφή, έχει νόηµα
µόνο όταν το πρωτεύον κλειδί του είναι σύνθετο. Αντίθετα, όταν το κλειδί του πί-
νακα είναι ένα απλό πεδίο, η αναγωγή του πίνακα σε 1NF, τον µετασχηµατίζει αυτό-
µατα και σε 2NF.

Ένα παράδειγµα ενός πίνακα που δεν είναι σε δεύτερη κανονική µορφή, είναι
ο πίνακας EMP_PROJ που ορίσαµε στις προηγούµενες σελίδες. Μελετώντας τις τι-
µές που έχουµε καταχωρήσει σε αυτόν τον πίνακα, διαπιστώνουµε πως ο πίνακας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 59

είναι σε 1NF, διότι, το κάθε κελί του περιέχει µια απλή τιµή. Ωστόσο δεν είναι σε
2NF διότι περιέχει µερικές συναρτησιακές εξαρτήσεις (partial dependencies). Για να
κατανοήσουµε καλύτερα αυτό το παράδειγµα, στο ακόλουθο σχήµα παρουσιάζουµε
τη δοµή του πίνακα EMP_PROJ και τις συναρτησιακές εξαρτήσεις που υφίστανται
ανάµεσα στα πεδία του.

SSN PNUMBER HOURS ENAME PNAME PLOCATION


fd1
fd2
fd3

Από το παραπάνω σχήµα διαπιστώνουµε πως η δοµή του πίνακα EMP_PROJ


περιέχει τρεις πλήρεις συναρτησιακές εξαρτήσεις, την fd1 που ορίζεται ως {SSN,
PNUMBER}→HOURS, την fd2 που ορίζεται ως SSN→ENAME, και την fd3 που
ορίζεται ως PNUMBER→{PNAME, PLOCATION} – ο συµβολισµός που χρησι-
µοποιήθηκε στην fd3 υποδηλώνει πως η γνώση του PNUMBER ταυτοποιεί µονο-
σήµαντα τα πεδία PNAME και PLOCATION. Επίσης, το πρωτεύον κλειδί του πί-
νακα, είναι σύνθετο, και αποτελείται από το συνδυασµό των πεδίων SSN και
PNUMBER.

Ας θεωρήσουµε τώρα τη συναρτησιακή εξάρτηση {SSN, PNUMBER}→


ENAME. Αυτή είναι µια µερική συναρτησιακή εξάρτηση, διότι εάν αφαιρέσουµε το
πεδίο PNUMBER από αυτή, η εξάρτηση που αποµένει και που είναι η
SSN→ENAME, εξακολουθεί να ισχύει (στην πραγµατικότητα είναι η fd2). Στην πε-
ρίπτωση αυτή λέµε πως το πεδίο ENAME παραβιάζει τη συνθήκη της δεύτερης
κανονικής µορφής. Το ίδιο ισχύει και για τις εξαρτήσεις {SSN, PNUMBER}→
PNAME και {SSN, PNUMBER}→ PLOCATION οι οποίες δεν καταργούνται εάν
αφαιρέσουµε το πεδίο SSN, αφού εκφυλίζονται στη συναρτησιακή εξάρτηση fd3.
Εποµένως ο πίνακας EMP_PROJ στην τρέχουσα µορφή του, δε βρίσκεται σε 2NF.

Για να µετασχηµατίσουµε τον πίνακα σε 2NF, θα πρέπει να τον διασπάσουµε


σε µικρότερους πίνακες, µε τέτοιο τρόπο, ώστε τα πεδία που δεν ανήκουν στο πρω-
τεύον κλειδί του, να τοποθετηθούν µαζί µε τα πεδία του πρωτεύοντος κλειδιού,
µε τα οποία συσχετίζονται µέσου πλήρους συναρτησιακής εξάρτησης. Αυτό πρα-
κτικά σηµαίνει να δηµιουργήσουµε τόσους πίνακες όσες είναι και οι πλήρεις συ-
ναρτησιακές εξαρτήσεις των πεδίων του πίνακα, και να τοποθετήσουµε σε αυ-
τούς, τα πεδία που συµµετέχουν σε αυτές τις εξαρτήσεις .Έτσι, στο παράδειγµά
µας, οι τρεις συναρτησιακές εξαρτήσεις fd1, fd2 και fd3, θα οδηγήσουν στη δηµιουρ-
γία των πινάκων EP1 {SSN, PNUMBER, HOURS}, EP2 {SSN, ENAME} και EP3
{PNUMBER, PNAME, PLOCATION}, κάθε ένας εκ των οποίων βρίσκεται σε
2NF.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 60

Τρίτη κανονική µορφή (3rd Normal Form, 3NF)

Η τρίτη κανονική µορφή προκύπτει από τη δεύτερη κανονική µορφή εάν µε-
τασχηµατίσουµε τον πίνακα µε τέτοιο τρόπο ώστε να αποµακρυνθούν όλες οι µε-
ταβατικές συναρτησιακές εξαρτήσεις (transitive dependencies) που υφίστανται
ανάµεσα στα πεδία του. Επαναλαµβάνουµε από τη βασική θεωρία πως µια συναρ-
τησιακή εξάρτηση Α→Β ονοµάζεται µεταβατική, όταν υπάρχει ένα πεδίο C που
δεν ανήκει στο πρωτεύον κλειδί του πίνακα, τέτοιο ώστε C = C(A) και B = B(C).

Ας θεωρήσουµε για παράδειγµα τον πίνακα EMP_DEP το σχήµα του οποίου


απεικονίζεται στη συνέχεια, µαζί µε τις συναρτησιακές εξαρτήσεις που ορίζονται α-
νάµεσα στα πεδία του.

ENAME SSN BDATE ADDRESS DNUMBER DNAME DMGRSSN

Αυτός ο πίνακας, βρίσκεται σε δεύτερη κανονική µορφή καθώς η δοµή του


δεν χαρακτηρίζεται από µερικές συναρτησιακές εξαρτήσεις, όχι όµως και σε τρίτη
κανονική µορφή, διότι ανάµεσα στα πεδία του υπάρχουν µεταβατικές εξαρτήσεις.
Μια τέτοια εξάρτηση ορίζεται ανάµεσα στα πεδία SSN και DMGRSSN, καθώς ισχύ-
ουν οι σχέσεις SSN→DNUMBER και DNUMBER→DMGRSSN µε το πεδίο
DNUMBER να µην αποτελεί τµήµα του πρωτεύοντος κλειδιού του πίνακα. Μια δεύ-
τερη µεταβατική εξάρτηση ορίζεται µε τον ίδιο τρόπο ανάµεσα στα πεδία SSN και
DNAME, καθώς µπορούµε να γράψουµε SSN→DNUMBER και DNUMBER→
DNAME. Αυτού του είδους οι συναρτησιακές εξαρτήσεις θα πρέπει να αποµακρυν-
θούν.

Η αποµάκρυνση αυτών των εξαρτήσεων θα γίνει όπως και προηγουµένως


διασπώντας τον πίνακα EMP_DEP στους πίνακες ED1 {ENAME, SSN, BDATE,
ADDRESS, DNUMBER} και ED2 {DNUMBER, DNAME, DMGRSSN} κάθε έ-
νας εκ των οποίων βρίσκεται τώρα σε 3NF.

Κανονική µορφή των Boyce – Codd (Boyce Codd Normal Form, BCNF)

Η κανονική µορφή των Boyce και Codd, αποτελεί µια πιο αυστηρή διατύ-
πωση της τρίτης κανονικής µορφής, και χρησιµοποιείται για να αποµακρύνει ανω-
µαλίες που ενδέχεται να προκύψουν σε περιπτώσεις κατά τις οποίες ένας πίνακας
έχει περισσότερα από ένα υποψήφια κλειδιά, τα οποία µάλιστα είναι σύνθετα,
αποτελούνται δηλαδή από πολλά πεδία.

Για να κατανοήσουµε καλύτερα αυτή την κανονική µορφή ας πάρουµε ως πα-


ράδειγµα τη βάση δεδοµένων ενός εκπαιδευτικού ιδρύµατος. Ας υποθέσουµε πως για
κάθε µάθηµα που διδάσκεται σε αυτό το ίδρυµα, οι µαθητές εκτός από τις ώρες διδα-
σκαλίας µπορούν να παρακολουθήσουν και κάποια µαθήµατα πρόσθετης διδακτικής
στήριξης τα οποία πραγµατοποιούνται από κάποιο άλλο καθηγητή (advisor). Όσοι
µαθητές επιθυµούν να παρακολουθήσουν αυτό το πρόγραµµα, θα πρέπει να δηλώ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 61

σουν τα µαθήµατα στη Γραµµατεία, η οποία θα καταχωρεί τα στοιχεία των µαθητών,


των καθηγητών, και των µαθηµάτων, σύµφωνα µε το ακόλουθο µοντέλο :

• Κάθε µαθητής µπορεί να δηλώσει περισσότερα από ένα µαθήµατα


• Για κάθε µάθηµα, ο κάθε µαθητής έχει ένα και µοναδικό καθηγητή
• Για κάθε µάθηµα υπάρχουν πολλοί καθηγητές που το διδάσκουν
• Κάθε καθηγητής µπορεί να διδάξει ένα µόνο µάθηµα
• Κάθε καθηγητής διδάσκει σε πολλούς µαθητές ταυτόχρονα.

Ας υποθέσουµε επίσης πως τα στοιχεία για αυτή την εφαρµογή καταχωρού-


νται στον πίνακα CLASS {StudentId, Lesson, Advisor} ένα στιγµιότυπο του οποίου
παρουσιάζεται στη συνέχεια :

StudentId Lesson Advisor


123 Physics Brown
123 Music Jones
456 Biology Stewart
789 Physics Lenon
999 Physics Brown

Μελετώντας προσεκτικά τη δοµή του πίνακα και τις βασικές υποθέσεις του
µοντέλου, µπορούµε να ταυτοποιήσουµε τις ακόλουθες συναρτησιακές εξαρτήσεις
ανάµεσα στα πεδία του.

• StudentId→Lesson (multivalued dependency – ο κάθε µαθητής µπορεί να


δηλώσει πολλά µαθήµατα τα οποία µπορούµε να ανακτήσουµε γνωρίζοντας
τον κωδικό του µαθητή)
• {StudentId, Lesson} → Advisor: η γνώση του κωδικού του µαθητή και κά-
ποιου από τα µαθήµατα που έχει δηλώσει επιτρέπει την ταυτοποίηση του κα-
θηγητή που το διδάσκει
• Lesson→Advisor (multivalued dependency – το κάθε µάθηµα διδάσκεται από
πολλούς καθηγητές τους οποίους µπορούµε να ανακτήσουµε γνωρίζοντας το
όνοµα του µαθήµατος)
• Advisor→Lesson: η γνώση του ονόµατος του καθηγητή επιτρέπει την ταυτο-
ποίηση του µαθήµατος που διδάσκει.
• Advisor→StudentId (multivalued dependency – ένας καθηγητής µπορεί να
διδάξει σε πολλούς µαθητές ταυτόχρονα τους οποίους µπορούµε να ανακτή-
σουµε εάν γνωρίζουµε το όνοµα του καθηγητή).

Επιπλέον, δεν είναι δύσκολο να διαπιστώσουµε, πως ο εν λόγω πίνακας διαθέ-


τει δύο υποψήφια κλειδιά, τα οποία µάλιστα είναι σύνθετα πεδία. Τα κλειδιά αυτά
είναι ο συνδυασµός των πεδίων {StudentId, Lesson} που ταυτοποιεί µονοσήµαντα
την τιµή του Advisor, και ο συνδυασµός των πεδίων {StudentId, Advisor} που ταυ-
τοποιεί µονοσήµαντα την τιµή του Lesson. Στο παράδειγµά µας επιλέγουµε ως πρω-
τεύον κλειδί το συνδυασµό {StudentId, Lesson}.

Σε ποια κανονική µορφή βρίσκεται αυτός ο πίνακας? Παρατηρώντας προσε-


κτικά τη δοµή του µπορούµε εύκολα να βγάλουµε το συµπέρασµα ότι βρίσκεται σε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 62

τρίτη κανονική µορφή, αφού δεν περιέχει ούτε µερικές αλλά ούτε και µεταβατι-
κές συναρτησιακές εξαρτήσεις. Το συµπέρασµα αυτό είναι σωστό, αλλά παρόλα
αυτά, δε µας διασφαλίζει την απουσία των ανωµαλιών που παρουσιάζονται κατά την
εισαγωγή, διαγραφή και τροποποίηση εγγραφών. Ας υποθέσουµε για παράδειγµα πως
ο µαθητής µε κωδικό 456 επιθυµεί να αλλάξει το µάθηµα που δήλωσε, από Βιολογία
σε Μαθηµατικά. Εάν τροποποιήσουµε το περιεχόµενο της αντίστοιχης γραµµής του
πίνακα, έτσι ώστε να καταγράψουµε την παραπάνω µεταβολή, θα χάσουµε την πλη-
ροφορία πως ο καθηγητής Stewart διδάσκει Βιολογία. Τα πράγµατα είναι ακόµη
χειρότερα, εάν ο εν λόγω µαθητής ακυρώσει εντελώς τη συµµετοχή του στο πρό-
γραµµα διδακτικής στήριξης. Στην περίπτωση αυτή, θα πρέπει να διαγράψουµε την
αντίστοιχη γραµµή από τον πίνακα CLASS, αλλά αυτή η διαγραφή θα οδηγήσει και
σε πλήρη απώλεια όλων των δεδοµένων που αφορούν τον καθηγητή Stewart ό-
σον αφορά τα µαθήµατα που διδάσκει στο πρόγραµµα πρόσθετης διδακτικής
στήριξης.

Οι παραπάνω ανωµαλίες δεν περιορίζονται µόνο στις διαδικασίες διαγραφής


και τροποποίησης των εγγραφών του πίνακα, αλλά παρουσιάζονται και κατά το στά-
διο της εισαγωγής νέων εγγραφών. Έστω πως σε κάποια χρονική στιγµή εκδηλώνεται
ενδιαφέρον για την παρακολούθηση του µαθήµατος Computer Networks υπεύθυνος
του οποίου ορίζεται ο καθηγητής Tanenbaum. Η πληροφορία όµως αυτή θα κατα-
χωρηθεί στον πίνακα CLASS, µόνο όταν κάποιος µαθητής προσέλθει στη Γραµµα-
τεία και δηλώσει αυτό το µάθηµα – και αυτό, επειδή οι εγγραφές του πίνακα προϋπο-
θέτουν και την καταχώρηση του κωδικού γι αυτόν το µαθητή. Το γεγονός δε, πως αυ-
τός ο κωδικός αποτελεί µέρος του πρωτεύοντος κλειδιού, κάνει τα πράγµατα ακόµη
χειρότερα. Πράγµατι, εάν ο εν λόγω κωδικός δεν ανήκε στο πρωτεύον κλειδί, η πα-
ραπάνω πληροφορία θα µπορούσε να καταχωρηθεί, προσθέτοντας την πλειάδα
{NULL, Computer Networks, Tanenbaum}. Από τη στιγµή όµως που το πεδίο
StudentId αποτελεί µέρος του πρωτεύοντος κλειδιού του πίνακα, η εν λόγω καταχώ-
ρηση δεν µπορεί να πραγµατοποιηθεί, διότι θα λάβει χώρα παραβίαση του δεύτερου
κανόνα ακεραιότητας (entity integrity constraint), σύµφωνα µε τον οποίο κανένα
από τα πεδία του πρωτεύοντος κλειδιού του πίνακα, δεν µπορεί να λάβει την τιµή
NULL.

Η εµφάνιση όλων αυτών των προβληµάτων, οφείλεται στο γεγονός, πως ο πί-
νακας CLASS διαθέτει δύο υποψήφια σύνθετα κλειδιά, τα οποία έχουν ένα κοινό
πεδίο – το StudentId. Αυτή είναι µια κατάσταση, η οποία δεν παρατηρείται αρκετά
συχνά, αλλά εν τούτοις, θα πρέπει να λαµβάνεται υπ όψιν κατά το στάδιο της σχεδία-
σης µιας βάσης δεδοµένων. Οι Boyce και Codd, προκειµένου να άρουν την παραπά-
νω αδυναµία της τρίτης κανονικής µορφής, προχώρησαν στον ορισµό της οµώνυµης
κανονικής µορφής ο οποίος διατυπώνεται ως εξής : «Μια σχέση βρίσκεται στην κα-
νονική µορφή των Boyce – Codd (BCNF), αν και µόνο αν κάθε πεδίο του πίνακα
που ταυτοποιεί µονοσήµαντα κάποιο άλλο πεδίο, είναι υποψήφιο κλειδί του πί-
νακα». Εφαρµόζοντας τον παραπάνω ορισµό στον πίνακα CLASS, διαπιστώνουµε
πως αυτός δεν βρίσκεται στην BCNF – πράγµατι το πεδίο Advisor παρά το γεγονός
πως ταυτοποιεί µονοσήµαντα το πεδίο Lesson (σύµφωνα µε τη συναρτησιακή εξάρ-
τηση Advisor→Lesson), δεν αποτελεί τµήµα του υποψήφιου κλειδιού του πίνακα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 63

Για να φέρουµε τον πίνακα CLASS σε BCNF, θα πρέπει κατά τα γνωστά να


τον διασπάσουµε σε µικρότερους πίνακες, κάθε ένας εκ των οποίων θα βρίσκεται σε
BCNF. Σε αυτή τη διαδικασία της διάσπασης, το πεδίο Advisor που ταυτοποιεί µο-
νοσήµαντα κάποιο άλλο πεδίο αλλά παρόλα αυτά δεν ανήκει στο υποψήφιο κλει-
δί του πίνακα, θα τοποθετηθεί σε µία άλλη σχέση, και ταυτόχρονα θα γίνει το
πρωτεύον κλειδί της. Στην προκειµένη περίπτωση, η διάσπαση µπορεί να γίνει µε
δύο τρόπους : (α) CLASS1 {StudentId, Advisor} και CLASS2 {Advisor, Lesson} ή
(β) CLASS1 {StudentId, Lesson} και CLASS2 {Advisor, Lesson} – και στις δύο
περιπτώσεις, το πεδίο Advisor θα αποτελέσει πρωτεύον κλειδί του πίνακα CLASS2.

Τέταρτη κανονική µορφή (4th Normal Form, 4NF)

Μετασχηµατίζοντας ένα πίνακα σε BCNF, είµαστε πλέον σίγουροι πως η δο-


µή του δεν περιέχει ανεπιθύµητες συναρτησιακές εξαρτήσεις που θα µπορούσαν να
οδηγήσουν στην εµφάνιση ανωµαλιών κατά την εισαγωγή, διαγραφή και τροποποίη-
ση δεδοµένων. Παρά το γεγονός όµως αυτό, τέτοιου είδους ανωµαλίες ενδέχεται να
υπάρξουν εάν υφίσταται κάποια συσχέτιση µεταξύ δύο πεδίων, εκ των οποίων το
ένα να είναι πεδίο πολλαπλών τιµών (multivalued dependencies). Ας θεωρήσουµε
ως παράδειγµα το πληροφοριακό σύστηµα του σχολείου, και ας περιοριστούµε στη
σχέση που καθορίζει για το κάθε µάθηµα, τα ονόµατα των καθηγητών που το διδά-
σκουν, καθώς και τους τίτλους των διδακτικών βιβλίων που χρησιµοποιούνται. Στην
περιγραφή που ακολουθεί, υποθέτουµε ότι ισχύουν οι ακόλουθες παραδοχές :

• Κάθε µάθηµα µπορεί να διδαχθεί από πολλούς καθηγητές


• Σε κάθε µάθηµα µπορούν να χρησιµοποιηθούν περισσότερα από ένα βιβλία
• Για κάθε µάθηµα χρησιµοποιούνται πάντα τα ίδια βιβλία, ανεξάρτητα από
τον καθηγητή που το διδάσκει.

Από την παραπάνω περιγραφή καθίσταται προφανές πως εάν χρησιµοποιή-


σουµε για την καταχώρηση όλων αυτών των πληροφοριών τον πίνακα OFFERING
{COURSE, INSTRUCTOR, TEXTBOOK}, υπάρχουν δύο συναρτησιακές εξαρτή-
σεις στις οποίες συµµετέχουν πεδία πολλαπλών τιµών. Οι εξαρτήσεις αυτές είναι οι
Course→Instructor και Course→Textbook, µε τα πεδία Instructor και Textbook,
να µπορούν να λάβουν περισσότερες από µια τιµές, σε κάθε εξάρτηση. Στο παρακάτω
σχήµα, παρουσιάζεται ο πίνακας OFFERING µε ένα σύνολο ενδεικτικών εγγραφών
στην µη κανονικοποιηµένη και στην κανονικοποιηµένη του µορφή.

COURSE INSTRUCTOR TEXTBOOK


White Drucker
Management Green Peters
Black
Weston
Finance Gray
Gilford
Μη κανονικοποιηµένη µορφή του πίνακα OFFERING

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 64

COURSE INSTRUCTOR TEXTBOOK


Management White Drucker
Management Green Drucker
Management Black Drucker
Management White Peters
Management Green Peters
Management Black Peters
Finance Gray Weston
Finance Gray Gilford
Κανονικοποιηµένη µορφή του πίνακα OFFERING

Ο πίνακας OFFERING στην κανονικοποιηµένη του µορφή διαθέτει ένα σύν-


θετο κλειδί – το συνδυασµό των πεδίων COURSE, INSTRUCTOR και
TEXTBOOK – και βρίσκεται σε BCNF, αφού όλα τα πεδία του που ταυτοποιούν
µονοσήµαντα κάποια άλλα πεδία ανήκουν στο πεδίο κλειδί του πίνακα. Ωστόσο, ό-
πως µπορεί εύκολα να διαπιστωθεί, ο πίνακας περιέχει περιττά δεδοµένα, τα οποία
προκαλούν όλες εκείνες τις ανωµαλίες που παρουσιάσαµε στις προηγούµενες παρα-
γράφους. Εάν για παράδειγµα θελήσουµε να προσθέσουµε ένα καινούριο βιβλίο
στον παραπάνω πίνακα, θα πρέπει να καταχωρήσουµε τρεις εγγραφές, µια για
κάθε εκπαιδευτικό, διότι στην αντίθετη περίπτωση θα φαίνεται πως αυτό το βι-
βλίο χρησιµοποιείται από ένα µόνο καθηγητή.

Οι παραπάνω ανωµαλίες προκύπτουν όταν σε ένα πίνακα υπάρχουν τουλά-


χιστον τρία πεδία – ας τα ονοµάσουµε A, B και C – τέτοια ώστε για κάθε τιµή
του Α, να υπάρχει ένα σύνολο τιµών για το B, και ένα σύνολο τιµών για το C και
ταυτόχρονα το σύνολο τιµών του Β είναι ανεξάρτητο από το σύνολο τιµών του C
και αντίστροφα. Οι εξαρτήσεις αυτού του είδους ονοµάζονται εξαρτήσεις πολλα-
πλών τιµών (multivalued dependencies).

Για να αποµακρύνουµε αυτές τις ανωµαλίες, θα πρέπει κατά τα γνωστά να


διασπάσουµε τον πίνακα σε δύο µικρότερους πίνακες διαχωρίζοντας τα πεδία B
και C – σύµφωνα µε τον ορισµό που δώσαµε προηγουµένως. Έτσι ο πίνακας
OFFERING, θα διαχωριστεί στους πίνακες TEACHER {COURSE,
INSTRUCTOR} και TEXT {COURSE, TEXTBOOK} κάθε ένας εκ των οποίων
βρίσκεται σε 4NF.

Πέµπτη κανονική µορφή (5th Normal Form, 5NF)

Τέλος η πέµπτη κανονική µορφή, χρησιµοποιείται όταν οι πίνακες που προκύ-


πτουν από την τέταρτη κανονική µορφή, χαρακτηρίζονται από εξαρτήσεις σύζευξης
(join dependencies). Αυτού του είδους οι εξαρτήσεις απαγορεύουν τη διάσπαση
ενός πίνακα σε µικρότερους πίνακες οι οποίοι εάν συνδυαστούν εκ νέου να µπο-
ρούν να αναδηµιουργήσουν τους αρχικούς πίνακες. Περισσότερες λεπτοµέρειες
σχετικά µε την πέµπτη κανονική µορφή, µπορούν να βρεθούν στη βιβλιογραφία.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5
Σχεσιακή Άλγεβρα
Στο κεφάλαιο αυτό παρουσιάζονται οι θεµελιώδεις πρά-
ξεις της σχεσιακής άλγεβρας που χρησιµοποιούνται για τη
διαχείριση των δεδοµένων των πινάκων µιας σχεσιακής βά-
σης δεδοµένων.

Η σχεσιακή άλγεβρα (relational algebra) ορίζεται ως ένα σύνολο πράξεων


µε τις οποίες µπορούµε να διαχειριστούµε τα δεδοµένα των πινάκων µιας σχε-
σιακής βάσης δεδοµένων. Αυτή η διαχείριση περιλαµβάνει την επιλογή γραµµών
και στηλών οι οποίες πληρούν κάποια συγκεκριµένα κριτήρια, τόσο από ένα α-
πλό πίνακα όσο και από το συνδυασµό δύο ή περισσοτέρων πινάκων. Το αποτέλε-
σµα της εφαρµογής αυτών των πράξεων είναι ένας νέος πίνακας πάνω στον οποίο
µπορούµε να εφαρµόσουµε και άλλες τέτοιες πράξεις. Με τον τρόπο αυτό είναι τελι-
κά δυνατή η πραγµατοποίηση οποιασδήποτε ενέργειας, όσο πολύπλοκη και αν είναι.

Από τη βασική θεωρία είναι γνωστό πως ένας πίνακας ορίζεται ως ένα µη
διατεταγµένο σύνολο πλειάδων (tuples). Εφ’ όσον λοιπόν ο πίνακας διαθέτει όλες
τις ιδιότητες ενός συνόλου, είναι προφανές πως µπορούµε να εφαρµόσουµε πάνω
στους πίνακες της βάσης δεδοµένων, όλες τις γνωστές πράξεις από τη θεωρία συνό-
λων – οι πράξεις αυτές είναι η ένωση (union), η τοµή (intersection), η διαφορά
(difference) και το καρτεσιανό γινόµενο (Cartesian product). Η άλλη κατηγορία
πράξεων που αποτελούν τµήµα της σχεσιακής άλγεβρας, περιλαµβάνει διαδικασίες οι
οποίες έχουν οριστεί ειδικά για το σχεσιακό µοντέλο βάσεων δεδοµένων, όπως είναι
η επιλογή (select), η προβολή (project), η σύζευξη (join) και η διαίρεση (division).
Η αναλυτική περιγραφή όλων αυτών των πράξεων της σχεσιακής άλγεβρας, αποτελεί
αντικείµενο των σελίδων που ακολουθούν.

Η ΠΡΑΞΗ ΤΗΣ ΕΠΙΛΟΓΗΣ (SELECT OPERATION)

Η πράξη της επιλογής χρησιµοποιείται για να επιλέξει ένα σύνολο από


πλειάδες κάποιου πίνακα οι οποίες ικανοποιούν µια συγκεκριµένη συνθήκη
(selection condition). Εποµένως η πραγµατοποίησή της, απαιτεί τον καθορισµό τόσο
του ονόµατος του πίνακα επί του οποίου θα εφαρµοσθεί – ας σηµειωθεί πως η πράξη
αυτή εφαρµόζεται µόνο σε ένα πίνακα (unary operation)– όσο και της συνθήκης
επιλογής που καθορίζει τις πλειάδες που θα εµφανιστούν στο τελικό αποτέλεσµα.
Έτσι η πράξη αυτή καλείται µε τη σύνταξη

σ <selection condition> (<relation name>)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 66

Για παράδειγµα, εάν επιθυµούµε να ανακτήσουµε τους εργαζόµενους της ε-


ταιρείας που εργάζονται στο τµήµα µε κωδικό 4 θα καλέσουµε την πράξη µε τη µορ-
φή

σ DNO=4 (EMPLOYEE)

ενώ για να λάβουµε όλους τους εργαζόµενους της εταιρείας µε µισθό µεγαλύτερο από
30000, θα γράψουµε

σ SALARY>30000 (EMPLOYEE)

Στην παραπάνω σύνταξη, η συνθήκη επιλογής µπορεί να είναι όσο πολύπλοκη


επιθυµούµε, ενώ επιπλέον έχουµε και τη δυνατότητα να καταχωρήσουµε το αποτέλε-
σµα σε ένα ενδιάµεσο πίνακα δια της χρήσης του τελεστή «←». Έτσι η πράξη

RESULT ←σ DNO=5 AND SALARY>25000 (EMPLOYEE)

επιλέγει τις πλειάδες του πίνακα EMPLOYEE που εργάζονται στο τµήµα µε κωδικό
5 και ο µισθός τους είναι µεγαλύτερος από 25000, και στη συνέχεια, καταχωρεί το
αποτέλεσµα στον πίνακα RESULT.

Εκτός από το σύµβολο της ισότητας, στην παραπάνω συνθήκη επιλογής, µπο-
ρούν να χρησιµοποιηθούν όλοι οι γνωστοί τελεστές σύγκρισης {<, ≤, >, ≥, ≠} µε την
προϋπόθεση πως οι τιµές που παίρνουν τα πεδία πάνω στα οποία εφαρµόζονται,
να είναι διατεταγµένες, έτσι ώστε να είναι δυνατή η εφαρµογή αυτών των τελεστών
– αυτό ισχύει πάντα όταν τα πεδία αυτά είναι αριθµοί ή ηµεροµηνίες. Στην περίπτω-
ση κατά την οποία τα πεδία της συνθήκης επιλογής είναι συµβολοσειρές, τότε χρησι-
µοποιείται η αλφαβητική ταξινόµηση για τη σύγκρισή τους, ενώ όταν είναι αλφα-
ριθµητικά, η σύγκρισή τους γίνεται µε βάση τους κώδικες ASCII των χαρακτήρων
τους. Τέλος, όταν αναφερόµαστε σε πεδία τιµών τα οποία δεν είναι δυνατόν να ταξι-
νοµηθούν, µπορούµε να χρησιµοποιήσουµε µόνο τους τελεστές {=, ≠}. Για παρά-
δειγµα εάν κάποιο από τα πεδία αναπαριστά κάποιο χρώµα που παίρνει τιµές από το
σύνολο Color = {red, green, blue, black, yellow, white}, µπορούµε να χρησιµο-
ποιήσουµε µόνο τους δύο προαναφερόµενους τελεστές, διότι δεν έχει νόηµα να πούµε
πως κάποιο χρώµα είναι µεγαλύτερο ή µικρότερο από κάποιο άλλο – αλλά µπορούµε
να γράψουµε color = black ή color ≠ red.

Εκτός από τους τελεστές σύγκρισης, σε µια συνθήκη επιλογής µπορούµε να


χρησιµοποιήσουµε και τους λογικούς τελεστές AND, OR και NOT. Στην ειδική πε-
ρίπτωση του τελεστή AND που χρησιµοποιείται για να συσχετίσει δύο πράξεις σύ-
γκρισης τιµών, το αποτέλεσµα που θα προκύψει είναι το ίδιο µε εκείνο που θα παίρ-
ναµε εάν εφαρµόζαµε τη SELECT µε την πρώτη συνθήκη, και στον πίνακα που θα
προέκυπτε, εφαρµόζαµε ξανά τη SELECT, αυτή τη φορά µε τη δεύτερη συνθήκη.
Για παράδειγµα η πράξη

RESULT ←σ DNO=5 AND SALARY>25000 (EMPLOYEE)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 67

είναι ισοδύναµη µε την ακολουθία πράξεων

RESULT ←σ DNO=5 (σ SALARY>25000 (EMPLOYEE) )


Ο τρόπος µε τον οποίο λειτουργεί η SELECT, είναι ο εξής: η εντολή διαβάζει
µια - µια τις πλειάδες του πίνακα και σε κάθε µία από αυτές εφαρµόζει τη συν-
θήκη επιλογής. Για να το κάνει αυτό, διαβάζει τις τιµές των πεδίων που εµφανί-
ζονται στη συνθήκη επιλογής, και τις συγκρίνει µε τις αντίστοιχες που καθορίζο-
νται στην εν λόγω συνθήκη. Εάν αυτή η συνθήκη ικανοποιείται, τότε αυτή η
πλειάδα προστίθεται στο τελικό αποτέλεσµα – στην αντίθετη περίπτωση απορ-
ρίπτεται. Επίσης είναι προφανές πως αφού η SELECT επιστρέφει πλειάδες, ο πίνα-
κας που θα προκύψει ως αποτέλεσµα, θα έχει την ίδια δοµή µε τον πίνακα πάνω
στον οποίο εφαρµόζεται η εντολή.

Η ΠΡΑΞΗ ΤΗΣ ΠΡΟΒΟΛΗΣ (PROJECT OPERATION)

Η πράξη της προβολής χρησιµοποιείται για να επιλέξει όχι γραµµές του πίνα-
κα όπως η SELECT, αλλά στήλες. Με άλλα λόγια ο πίνακας που θα προκύψει ως
αποτέλεσµα εφαρµογής της PROJECT, δεν θα έχει την ίδια δοµή µε τον πίνακα πά-
νω στον οποίο εφαρµόζεται, αλλά θα έχει γενικά λιγότερες στήλες.

Εφ’ όσον η PROJECT χρησιµοποιείται για την επιλογή στηλών από ένα πί-
νακα, θα πρέπει να κληθεί µε τρόπο που να καθορίζει τόσο τον πίνακα πάνω στον ο-
ποίο θα εφαρµοσθεί, όσο και τις στήλες αυτού του πίνακα που θα επιστρέψει. Έτσι, η
εντολή PROJECT καλείται µε τη µορφή

π <attribute list> (<relation name>)

Ένα παράδειγµα χρήσης της PROJECT είναι η κλήση της µε τη µορφή

π LNAME, FNAME, SSN, ADDRESS (EMPLOYEE)

που θα επιστρέψει αυτές τις τέσσερις στήλες του πίνακα EMPLOYEE οδηγώντας
έτσι στο αποτέλεσµα που ακολουθεί στη συνέχεια. Επίσης είναι προφανές πως η
PROJECT - όπως και η SELECT – εφαρµόζεται µόνο σε ένα πίνακα κάθε φορά.

FNAME LNAME SSN ADDRESS


John Smith 123456789 731 Fondren, Houston, TX
Franklin Wong 333445555 638 Vass, Houston, TX
Alicia Zelaya 999887777 3321 Castle, Spring, TX
Jennifer Wallace 987654321 291 Berry, Bellaire, TX
Ramesh Narayan 666884444 975 Fire Oak, Humble, TX
Joyce English 453453453 5631 Rice, Houston, TX
Ahmad Jabbar 987987987 980 Dallas, Houston, TX
James Borg 888665555 450 Stone, Houston, TX

Στην περίπτωση κατά την οποία η λίστα των στηλών που θέλουµε να ανακτή-
σουµε δεν περιλαµβάνει το πρωτεύον κλειδί του πίνακα, υπάρχει η πιθανότητα το τε-
λικό αποτέλεσµα να περιέχει επαναλαµβανόµενες εγγραφές. Στην περίπτωση αυτή η

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 68

PROJECT κρατά µόνο ένα αντίγραφο από κάθε εγγραφή, οδηγώντας έτσι σε ένα
έγκυρο αποτέλεσµα. Η διαδικασία αυτή είναι γνωστή και ως εξάλειψη διπλοεγγρα-
φών (duplicate elimination).

Επειδή η εντολή SELECT επιστρέφει πλειάδες του πίνακα ενώ η PROJECT


επιστρέφει στήλες, είναι προφανές πως εάν εφαρµόσουµε και τις δύο εντολές ταυτό-
χρονα πάνω σε κάποιο πίνακα, θα πάρουµε µόνο ένα τµήµα του το οποίο θα περιέχει
ένα συγκεκριµένο αριθµό γραµµών και στηλών. Ένα παράδειγµα συνδυασµένης χρή-
σης της SELECT και της PROJECT είναι ο πίνακας που προκύπτει από την πράξη

π LNAME, FNAME, SALARY (σ DNO=5 AND SALARY>25000 (EMPLOYEE) )


και περιέχει τα ονόµατα και το µισθό των υπαλλήλων της εταιρείας που εργάζο-
νται στο τµήµα µε κωδικό 5 και έχουν µισθό µεγαλύτερο από 25000. Το αποτέλε-
σµα αυτής της συνδυασµένης χρήσης των δύο εντολών παρουσιάζεται στον ακόλου-
θο πίνακα:

FNAME LNAME SALARY


John Smith 30000
Franklin Wong 40000
Ramesh Narayan 38000

Ας σηµειωθεί πως εάν το επιθυµούµε, έχουµε τη δυνατότητα να µην χρησιµο-


ποιήσουµε τις δύο εντολές µε αυτό το συνδυασµένο τρόπο σύνταξης, αλλά να εκτε-
λέσουµε την πράξη σε δύο βήµατα, και χρησιµοποιώντας ένα ενδιάµεσο πίνακα. Έτσι
µπορούµε να γράψουµε

DEP5_EMPS ←σ DNO=5 AND SALARY>25000 (EMPLOYEE)

RESULT ← π LNAME, FNAME, SALARY (DEP5_EMPS)

µε τον πίνακα DEP5_EMPS να περιέχει το αποτέλεσµα εφαρµογής της SELECT


πάνω στον πίνακα EMPLOYEE, και τον πίνακα RESULT να περιέχει το αποτέλε-
σµα της PROJECT πάνω στον πίνακα DEP5_EMPS.

Τέλος είναι σηµαντικό να αναφέρουµε πως ο νέος πίνακας που προκύπτει από
την χρήση των παραπάνω εντολών διατηρεί τα ίδια ονόµατα πεδίων µε τους πίνα-
κες από τους οποίους προέρχεται. Εάν ωστόσο επιθυµούµε να αλλάξουµε τα ονόµα-
τα αυτών των πεδίων, µπορούµε να το κάνουµε γράφοντάς τα εντός παρενθέσεων µε-
τά το όνοµα του πίνακα. Έτσι στην προηγούµενη περίπτωση, τα πεδία του πίνακα
RESULT, φέρουν τα ονόµατα LNAME, FNAME και SALARY, ενώ εάν γράψουµε

RESULT (FIRSTNAME, LASTNAME, SALARY) ←


π LNAME, FNAME, SALARY (DEP5_EMPS)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 69

η δοµή του πίνακα RESULT θα είναι η {FIRSTNAME, LASTNAME, SALARY}.


Ας σηµειωθεί πως οι δύο τελευταίες παρατηρήσεις σχετικά µε τη βηµατική εκτέλεση
των εντολών και τη µετονοµασία των πεδίων του τελικού πίνακα, δεν ισχύουν µόνο
για τις πράξεις της επιλογής και της προβολής, αλλά για όλες τις πράξεις της σχεσια-
κής άλγεβρας.

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

Στην ενότητα αυτή θα µελετήσουµε τις βασικές πράξεις που µπορούµε να


πραγµατοποιήσουµε ανάµεσα σε δύο σύνολα, και οι οποίες όπως έχουµε ήδη αναφέ-
ρει, µπορούνε να εφαρµοσθούνε και στους πίνακες µιας βάσης δεδοµένων, διότι σύµ-
φωνα µε τον ορισµό τους οι πίνακες είναι σύνολα από πλειάδες. Οι πράξεις αυτές
είναι η ένωση (union), η τοµή (intersection), η διαφορά (difference) και το καρτε-
σιανό γινόµενο (Cartesian product). Οι πράξεις αυτές είναι δυαδικές, διότι εφαρ-
µόζονται πάντα ανάµεσα σε δύο πίνακες της βάσης.

Απαραίτητη προϋπόθεση για την εφαρµογή των τριών πρώτων πράξεων είναι
οι πίνακες επί των οποίων εφαρµόζονται, να είναι συµβατοί ως προς την ένωση
(union compatible). ∆ύο πίνακες R(A1, A2, ….., An) και S(B1, B2, ….., Bn) θεωρού-
νται συµβατοί ως προς την ένωση, εάν έχουν το ίδιο πλήθος πεδίων, n, και επιπλέον
ισχύει η συνθήκη dom(Ai) = dom(Bi) (1 ≤ i ≤ n), που σηµαίνει πως τα αντίστοιχα
πεδία των δύο πινάκων να έχουν το ίδιο πεδίο τιµών. Στην περίπτωση αυτή οι πρά-
ξεις της ένωσης, της τοµής και της διαφοράς των πινάκων R και S, ορίζονται µε τον
ακόλουθο τρόπο:

Η ένωση δύο πινάκων, R ∪ S, είναι ένας νέος πίνακας που περιλαµβάνει όλες
τις πλειάδες των δύο πινάκων, οι οποίες µπορεί να ανήκουν µόνο στον R, µόνο
στον S ή και στους δύο πίνακες ταυτόχρονα. Εάν µετά την ένωση των δύο πινάκων
υπάρχουν εγγραφές που εµφανίζονται περισσότερες από µία φορά, αυτές αποµακρύ-
νονται από το τελικό αποτέλεσµα, έτσι ώστε να υπάρχει µόνο ένα αντίγραφο από κά-
θε εγγραφή.

Η τοµή δύο πινάκων, R ∩ S, είναι ένας νέος πίνακας, που περιλαµβάνει όλες
τις πλειάδες οι οποίες είναι κοινές στους δύο πίνακες.

Τέλος η διαφορά των πινάκων, R – S, είναι ένας νέος πίνακας, που περιλαµ-
βάνει όλες τις πλειάδες που ανήκουν στον R, αλλά δεν ανήκουν στον S.

Για τις πράξεις της τοµής και της ένωσης, ισχύει η αντιµεταθετική ιδιότητα,
µπορούµε δηλαδή να γράψουµε R ∩ S = S ∩ R και R ∪ S = S ∪ R, κάτι όµως που
δεν ισχύει για τη διαίρεση, όπου είναι R – S ≠ S – R.

Προκειµένου να κατανοήσουµε καλύτερα τον τρόπο λειτουργίας αυτών των


τριών πράξεων, ας θεωρήσουµε τους πίνακες STUDENT και INSTRUCTOR.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 70

STUDENT INSTRUCTOR
FIRSTNAME LASTNAME FNAME LNAME
Susan Yao John Smith
Ramesh Shah Ricardo Browne
Johnny Kohler Susan Yao
Barbara Jones Francis Johnson
Amy Ford Ramesh Shah
Jimmy Wang
Ernest Gilbert

Η εφαρµογή των πράξεων της ένωσης, της τοµής και της αφαίρεσης πάνω σε
αυτούς τους δύο πίνακες – οι οποίοι είναι συµβατοί ως προς την ένωση έτσι ώστε να
µπορούν να εφαρµοσθούν οι εν λόγω πράξεις – παρουσιάζεται στη συνέχεια

FIRSTNAME LASTNAME FIRSTNAME LASTNAME


Susan Yao Johnny Kohler
Ramesh Shah Barbara Jones
Johnny Kohler Amy Ford
Barbara Jones Jimmy Wang
Amy Ford Ernest Gilbert
Jimmy Wang
Ernest Gilbert STUDENT – INSTRUCTOR
John Smith
Ricardo Browne FIRSTNAME LASTNAME
Francis Johnson John Smith
Ricardo Browne
STUDENT ∪ INSTRUCTOR Francis Johnson

INSTRUCTOR – STUDENT
FIRSTNAME LASTNAME
Susan Yao
Ramesh Shah

STUDENT ∩ INSTRUCTOR

Τέλος, το καρτεσιανό γινόµενο (Cartesian product) εφαρµόζεται ανάµεσα


σε δύο πίνακες R και S – οι οποίοι στην προκειµένη περίπτωση δεν είναι υποχρεω-
τικό να είναι συµβατοί ως προς την ένωση – και δηµιουργεί έναν τρίτο πίνακα που
περιέχει τους συνδυασµούς όλων των πλειάδων του ενός, µε όλες τις πλειάδες του
άλλου. Με τον τρόπο αυτό είναι δυνατόν να εντοπίσουµε πλειάδες στους δύο πίνα-
κες, οι οποίοι συσχετίζονται µεταξύ τους.

Στη γενική περίπτωση, το καρτεσιανό γινόµενο ανάµεσα σε δύο πίνακες


R(A1, A2, ….., An) και S(B1, B2, ….., Bm) ορίζεται ως ένας καινούριος πίνακας Q που
περιλαµβάνει συνολικά m+n πεδία και η δοµή του είναι η {A1, A2, ….., An, B1, B2,
….., Bm}. Εάν ο πίνακας R περιέχει Μ πλειάδες και ο πίνακας S περιέχει N πλειάδες,
ο πίνακας Q = R X S θα περιέχει συνολικά M*N πλειάδες.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 71

Ας δούµε τώρα ένα παράδειγµα που να περιλαµβάνει τη συνδυασµένη χρήση


των πράξεων της επιλογής, της προβολής, και του καρτεσιανού γινοµένου. Έστω
ότι θέλουµε για κάθε γυναίκα υπάλληλο της εταιρείας να ανακτήσουµε τα ονόµα-
τα των προστατευόµενων µελών της. Για να το κάνουµε αυτό, θα ακολουθήσουµε
την επόµενη διαδικασία:

(α) Βρίσκουµε όλες τις γυναίκες υπαλλήλους της εταιρείας

FEMALE_EMPS ←σ SEX=’F’ (EMPLOYEE)


(β) Από όλα τα πεδία του πίνακα που θα προκύψει, κρατάµε µόνο το
LNAME, το FNAME, και το SSN

EMPNAMES ←π LNAME, FNAME, SSN (FEMALE_EMPS)

(γ) Επειδή τα ονόµατα των προστατευόµενων µελών των υπαλλήλων της ε-


ταιρείας βρίσκονται στον πίνακα DEPENDENT θα πρέπει να συνδυάσουµε τους πί-
νακες EMPNAMES και DEPENDENT έτσι ώστε να ανακτήσουµε όλους τους δυ-
νατούς συνδυασµούς των πλειάδων των δύο πινάκων

EMP_DEP ← EMPNAMES X DEPENDENTS


(δ) Για κάθε υπάλληλο, τα προστατευόµενα µέλη του βρίσκονται καταχωρη-
µένα στις πλειάδες του πίνακα DEPENDENT για τις οποίες το πεδίο ESSN έχει την
ίδια τιµή µε το πεδίο SSN του θεωρούµενου υπαλλήλου. Εποµένως από όλες τις
πλειάδες που περιλαµβάνονται στο καρτεσιανό γινόµενο των δύο πινάκων, θα κρατή-
σουµε µόνο εκείνες για τις οποίες ισχύει η σχέση ESSN = SSN.

ACTUAL_DEP ←σ SSN=ESSN (EMP_DEP)

(ε) Τέλος από όλα τα πεδία των πλειάδων που ανακτήσαµε, κρατάµε µόνο το
ονοµατεπώνυµο του υπαλλήλου και τα ονόµατα των προστατευόµενων µελών του:

RESULT ←π LNAME, FNAME, DEP_NAME (ACTUAL_DEP)

Από το παραπάνω παράδειγµα διαπιστώνουµε πως σε όλες σχεδόν τις περι-


πτώσεις η πράξη του καρτεσιανού γινοµένου ακολουθείται πάντα από την πράξη
της επιλογής προκειµένου να επιλέξουµε εκείνους τους συνδυασµούς πλειάδων που
πληρούν κάποια συγκεκριµένη συνθήκη. Αυτό σηµαίνει πως το να καλέσουµε το
καρτεσιανό γινόµενο από µόνο του, δεν έχει κάποια πρακτική εφαρµογή, αφού το µό-
νο που κάνει είναι να επιστρέφει όλους τους δυνατούς συνδυασµούς των πλειάδων
των δύο πινάκων. Εάν όµως από όλες αυτές τις πλειάδες κρατήσουµε µόνο όσες πλη-
ρούν κάποια συνθήκη, η ακολουθία αυτών των δύο πράξεων, έχει νόηµα διότι ανα-
κτούµε επιλεκτικά πληροφορία από δύο – ή περισσότερους – πίνακες της βάσης. Ε-
πειδή αυτή η ακολουθία CARTESIAN PRODUCT + SELECT χρησιµοποιείται πά-
ρα πολύ συχνά, έχει ορισθεί µια νέα πράξη – η πράξη της σύζευξης – η οποία επι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 72

τρέπει την εκτέλεση όλης αυτής της διαδικασίας σε ένα και µόνο βήµα. Αυτή η πράξη
αποτελεί το αντικείµενο της επόµενης ενότητας.

Η ΠΡΑΞΗ ΤΗΣ ΣΥΖΕΥΞΗΣ (JOIN OPERATION)

Όπως έχει αναφερθεί στην προηγούµενη παράγραφο, η πράξη της σύζευξης


µπορεί να ορισθεί ως η εφαρµογή της πράξης του καρτεσιανού γινοµένου ανάµε-
σα σε δύο πίνακες R και S, συνοδευόµενη από την πράξη της επιλογής (select),
που επιστρέφει, όχι όλους τους συνδυασµούς πλειάδων των δύο πινάκων, αλλά
µόνο εκείνους που ικανοποιούν κάποια συγκεκριµένη συνθήκη επιλογής. Αυτό
σηµαίνει πως για να ορίσουµε την πράξη της σύζευξης, χρειαζόµαστε δύο πίνακες και
µια συνθήκη. Στην περίπτωση αυτή µπορούµε να γράψουµε

RESULT ← S ⋈<selection condition> R


σύνταξη, η οποία είναι ισοδύναµη µε την ακολουθία πράξεων

σ <selection condition> (S X R)
Έτσι, στο προηγούµενο παράδειγµα, οι πράξεις

EMP_DEP ← EMPNAMES X DEPENDENTS


ACTUAL_DEP ← σ (EMP_DEP) SSN=ESSN

µπορούνε να αντικατασταθούνε από τη σύζευξη

ACTUAL_DEP ← EMPNAMES ⋈ SSN=ESSN DEPENDENTS

Το αποτέλεσµα της πράξης της σύζευξης ανάµεσα σε δύο πίνακες R(A1, A2,
….., An) και S(B1, B2, ….., Bm), είναι ένας καινούριος πίνακας Q µε δοµή {A1, A2,
….., An, B1, B2, ….., Bm} που περιλαµβάνει µόνο τις πλειάδες του καρτεσιανού γι-
νοµένου οι οποίες πληρούν τη συνθήκη επιλογής που χρησιµοποιείται. Αυτή άλ-
λωστε είναι και η βασική διαφορά που υφίσταται ανάµεσα στις πράξεις της σύζευξης
και του καρτεσιανού γινοµένου: στο καρτεσιανό γινόµενο περιλαµβάνονται όλοι οι
δυνατοί συνδυασµοί των πλειάδων των δύο πινάκων, ενώ στο αποτέλεσµα της
σύζευξης υπάρχουν µόνο εκείνες οι πλειάδες οι οποίες πληρούν τη συνθήκη επι-
λογής. Αυτή η συνθήκη επιλογής – όπως έχουµε ήδη αναφέρει στην εντολή
SELECT – εφαρµόζεται σε κάθε πλειάδα του καρτεσιανού γινοµένου ξεχωριστά, και
στο τελικό αποτέλεσµα, προστίθενται µόνο εκείνες οι εγγραφές για τις οποίες ισχύει.
Ας σηµειωθεί πως αυτή η συνθήκη επιλογής µπορεί να είναι τόσο απλή όσο και σύν-
θετη, και να περιλαµβάνει τόσο τελεστές σύγκρισης όσο και λογικούς τελεστές.

Στην περίπτωση κατά την οποία η συνθήκη επιλογής πλειάδων από το καρτε-
σιανό γινόµενο των δύο πινάκων, περιλαµβάνει µόνο τον τελεστή της ισότητας (=)
όπως συµβαίνει στο προηγούµενο παράδειγµα, η πράξη της σύζευξης ονοµάζεται

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 73

EQUIJOIN. Στην περίπτωση αυτή, στο τελικό αποτέλεσµα, θα υπάρχουν δύο στή-
λες µε διαφορετικά ονόµατα που προέρχονται από τους δύο πίνακες – µία στήλη
από κάθε πίνακα – αλλά έχουν ακριβώς τα ίδια αποτελέσµατα. Για παράδειγµα, εάν
θεωρήσουµε την σύζευξη

DEPT_MGR ← DEPARTMENT ⋈ MGRSSN=SSN EMPLOYEE

η οποία για κάθε DEPARTMENT επιστρέφει το MANAGER που το διευθύνει, ο


πίνακας DEPT_MGR θα έχει την ακόλουθη δοµή :

DEPT_MGR {DNAME, DNUMBER, MGRSSN, MGRSTARTDATE, FNAME,


MINIT, LNAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPERSSN, DNO}

Εάν εκτυπώσουµε τα περιεχόµενα του πίνακα, θα διαπιστώσουµε πως οι στή-


λες SSN και MGRSSN έχουν ακριβώς τα ίδια περιεχόµενα, κάτι βέβαια είναι αναµε-
νόµενο αφού ως συνθήκη επιλογής χρησιµοποιήσαµε την MGRSSN = SSN. Με άλλα
λόγια, η πράξη της σύζευξης έτσι όπως την έχουµε ορίσει επιστρέφει δυο στήλες οι
οποίες είναι ακριβώς οι ίδιες. Εάν θέλουµε στο αποτέλεσµα που θα λάβουµε να
κρατήσουµε µόνο τη µια από τις δύο στήλες, καλούµε µια διαφορετική µορφή της
σύζευξης που λέγεται φυσική σύζευξη (natural join) και κρατά µόνο τη µια από τις
δύο ίδιες στήλες και πιο συγκεκριµένα εκείνη που βρίσκεται στο αριστερό µέρος της
ισότητας που καθορίζουµε στη συνθήκη επιλογής. Η πράξη της φυσικής σύζευξης
συµβολίζεται µε το «*» και επειδή σε όλες τις περιπτώσεις προϋποθέτει τη χρήση του
τελεστή ισότητας (=) στη συνθήκη επιλογής, αυτός µπορεί να παραλειφθεί. Έτσι, η
προηγούµενη πράξη µπορεί τώρα να γραφεί µε τη µορφή

DEPT_MGR ← DEPARTMENT * (MGRSSN), (SSN) EMPLOYEE

µε το τελικό αποτέλεσµα να περιλαµβάνει µόνο τη στήλη MGRSSN, ενώ, για να κρα-


τήσουµε τη στήλη SSN, θα πρέπει να γράψουµε

DEPT_MGR ← EMPLOYEE * (SSN), (MGRSSN) DEPARTMENT

Τέλος εάν τα δύο πεδία στη συνθήκη επιλογής έχουν το ίδιο όνοµα, µπορούµε
να τα παραλείψουµε τελείως κατά τη σύνταξη της εντολής. Εάν για παράδειγµα το
πεδίο MGRSSN του πίνακα DEPARTMENT είχε και αυτό το όνοµα SSN θα µπο-
ρούσαµε απλά να γράψουµε

DEPT_MGR ← EMPLOYEE * DEPARTMENT


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 74

OUTER JOIN ΚΑΙ OUTER UNION

Εκτός από τις πράξεις της σύζευξης και της ένωσης που ορίσαµε στις προη-
γούµενες παραγράφους, υπάρχουν και κάποιες παραλλαγές τους οι οποίες δεν αποτε-
λούν τµήµα της σχεσιακής άλγεβρας, αλλά έχουν υποστηρίζονται από όλα τα µοντέρ-
να σχεσιακά συστήµατα διαχείρισης βάσεων δεδοµένων. Αυτές οι πράξεις είναι η
εξωτερική σύζευξη (outer join) και η εξωτερική ένωση (outer union).

Η διαφορά της εξωτερικής σύζευξης από την απλή σύζευξη, έχει να κάνει µε
το πλήθος του συνδυασµού των πλειάδων των δύο πινάκων που επιστρέφονται. Στην
απλή σύζευξη, όπως είναι γνωστό, επιστρέφονται µόνο οι συνδυασµοί εκείνων των
πλειάδων τα στοιχεία των οποίων ικανοποιούν τη συνθήκη επιλογής που καθορί-
ζουµε στη σύζευξη. Αντίθετα, στην πράξη της εξωτερικής σύζευξης, διατηρούνται
όλες οι πλειάδες, ακόµη και εκείνες που δεν πληρούν τον κανόνα επιλογής. Αυτές
οι πλειάδες, συνδυάζονται µε «κενές» πλειάδες του άλλου πίνακα, δηλαδή µε πλειά-
δες που έχουν σε όλα τα πεδία τους την τιµή NULL. Η πράξη της εξωτερικής σύζευ-
ξης µπορεί να είναι τόσο αριστερή (left outer join) όσο και δεξιά (right outer join)
και ένα από τα σύµβολα που χρησιµοποιούνται για την αναπαράστασή της είναι το
(+).

Ας υποθέσουµε για παράδειγµα πως θέλουµε να ανακτήσουµε τα ονόµατα


των υπαλλήλων της εταιρείας, καθώς και τα ονόµατα των τµηµάτων που διευθύ-
νουν – εάν τυχαίνει να διευθύνουν κάποιο τµήµα. Στην περίπτωση αυτή, ο πίνακας
που θα περιέχει το αποτέλεσµα του ερωτήµατος, θα έχει τη δοµή {FNAME, MINIT,
LNAME, DNAME} µε το πεδίο DNAME να περιέχει το όνοµα του τµήµατος, για
όσους υπαλλήλους διευθύνουν κάποιο τµήµα, και την τιµή NULL για όλους τους υ-
πόλοιπους. Προκειµένου να απαντήσουµε σε αυτό το ερώτηµα, θα πρέπει να πραγµα-
τοποιήσουµε την επόµενη ακολουθία εντολών

TEMP ← EMPLOYEE (+) MGRSSN=SSN DEPARTMENT

RESULT ← π LNAME, MINIT, FNAME, DNAME (TEMP)

η οποία θα µας δώσει τα ακόλουθα αποτελέσµατα

FNAME MINIT LNAME DNAME


John B Smith NULL
Franklin T Wong Research
Alicia J Zelaya NULL
Jennifer S Wallace Administration
Ramesh K Narayan NULL
Joyce A English NULL
Ahmad V Jabbar NULL
James E Borg Headquarters

Ας περάσουµε τώρα στην πράξη της εξωτερικής ένωσης (outer union). Η


διαφορά που υφίσταται ανάµεσα στην εξωτερική ένωση και στην πράξη της ένωσης

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 75

πινάκων που µελετήσαµε σε προηγούµενες παραγράφους, είναι πως η εξωτερική


ένωση ανάµεσα σε δύο πίνακες µπορεί να πραγµατοποιηθεί, ακόµη και εάν οι δύο
πίνακες δεν είναι συµβατοί ως προς την ένωση (union compatible). Με άλλα λό-
για η προϋπόθεση της συµβατότητας ως προς την ένωση, δεν ισχύει για όλα τα
πεδία των πινάκων αλλά µόνο για µερικά από αυτά – στην περίπτωση αυτή λέµε
πως οι δύο πίνακες είναι µερικώς συµβατοί ως προς την ένωση (partially union
compatible). Ένα παράδειγµα εφαρµογής αυτής της πράξης, είναι η εξωτερική ένωση
των πινάκων STUDENT {Name, SSN, Department, Advisor} και FACULTY
{Name, SSN, Department, Rank}. Στην περίπτωση αυτή το αποτέλεσµα αυτής της
πράξης, θα είναι ένας πίνακας µε δοµή {Name, SSN, Department, Advisor, Rank}
που θα περιέχει όλες τις πλειάδες των δύο πινάκων. Επειδή όµως στον πίνακα
STUDENT δεν υπάρχει το πεδίο rank, η τιµή αυτού του πεδίου σε όλες τις εγγραφές
που προέρχονται από αυτόν τον πίνακα, θα είναι η τιµή NULL. Με τον ίδιο τρόπο, σε
όλες τις εγγραφές που προέρχονται από τον πίνακα FACULTY, το πεδίο Advisor θα
έχει τιµή NULL,διότι αυτό το πεδίο δεν υπάρχει στον πίνακα FACULTY.

Η ΠΡΑΞΗ ΤΗΣ ∆ΙΑΙΡΕΣΗΣ (DIVISION OPERATION)

Η πράξη της διαίρεσης εφαρµόζεται σε δύο πίνακες Α και Β εκ των οποίων ο


Α έχει περισσότερες στήλες από τον Β, και επιστρέφει ένα νέο πίνακα που περιέχει
τις στήλες του Α που δεν ανήκουν στον Β, και εκείνες τις τιµές που πίνακα Α που
συνδυάζονται µε όλες τις τιµές του πίνακα Β. Για την αναπαράσταση της πράξης
της διαίρεσης, χρησιµοποιείται το σύµβολο «÷»

Για να κατανοήσουµε την πράξη της διαίρεσης ας θεωρήσουµε το ακόλουθο


παράδειγµα. Έστω ότι θέλουµε να βρούµε τα ονόµατα όλων των υπαλλήλων που
δουλεύουν σε όλα τα PROJECTS στα οποία δουλεύει ο John Smith. Για να απα-
ντήσουµε σε αυτό το ερώτηµα, αρχικά θα πρέπει να ανακτήσουµε τη λίστα µε τους
κωδικούς των PROJECTS στα οποία δουλεύει ο John Smith – το αποτέλεσµα αυ-
τού του ερωτήµατος θα καταχωρηθεί στον πίνακα SMITH_PROJ {PNO}.

SMITH←σ FNAME=’JOHN’ AND LNAME=’SMITH’ (EMPLOYEE)

SMITH_PROJ ← π PNO (WORKS_ON *ESSN=SSN SMITH)

Στο επόµενο βήµα της διαδικασίας, θα πρέπει να ανακτήσουµε για κάθε


EMPLOYEE τον κωδικό του SSN, και τους κωδικούς των PROJECTS στα οποία
απασχολείται, κάτι που µπορεί να γίνει πολύ απλά γράφοντας

SSN_PROJ ←π PNO, ESSN (WORKS_ON)

Από τους δύο πίνακες στους οποίους έχουµε καταλήξει, ο πίνακας


SSN_PROJ {PNO, ESSN} περιλαµβάνει τους κωδικούς SSN όλων των
EMPLOYEES που δουλεύουν σε κάποιο PROJECT καθώς και τον κωδικό του κά-
θε PROJECT, ενώ ο πίνακας SMITH_PROJ {PNO}, περιλαµβάνει τους κωδικούς
των PROJECTS στα οποία δουλεύει ο John Smith. Για να βρούµε τώρα τους κωδι-
κούς ESSN των EMPLOYEES που δουλεύουν σε όλα τα PROJECTS στα οποία

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 76

δουλεύει ο John Smith, θα εφαρµόσουµε την πράξη της διαίρεσης ανάµεσα στους
δύο πίνακες :

SSNS (SSN) ← SSN_PROJ ÷ SMITH_PROJ


Σύµφωνα µε τον ορισµό της διαίρεσης πινάκων, η παραπάνω πράξη θα δη-
µιουργήσει ένα πίνακα που θα έχει όλες τις στήλες του SSN_PROJ που δεν ανήκουν
στον SMITH_PROJ. Επειδή η δοµή των δύο πινάκων είναι SSN_PROJ {PNO,
ESSN} και SMITH_PROJ {PNO}, είναι προφανές, πως ο πίνακας SSNS που θα ε-
πιστρέψει η πράξη της διαίρεσης θα έχει µόνο µια στήλη, την ESSN – στο παραπάνω
παράδειγµα χρησιµοποιούµε τη σύνταξη SSNS (SSN) για να µετονοµάσουµε την
στήλη ESSN σε SSN. Ποιες τιµές όµως θα περιέχει αυτή η στήλη για τους κωδικούς
SSN? Θα περιέχει µόνο εκείνους τους κωδικούς που συνδυάζονται µε όλες τις τιµές
PNO στον πίνακα SMITH_PROJ. Επειδή όµως ο πίνακας SMITH_PROJ {PNO}
περιλαµβάνει µόνο τους κωδικούς των PROJECTS στους οποίους εργάζεται ο John
Smith, η παραπάνω διαίρεση θα δώσει τους κωδικούς SSN των υπαλλήλων που ερ-
γάζονται σε όλα αυτά τα PROJECTS. Για να κατανοήσουµε καλύτερα αυτή τη δια-
δικασία, ας δούµε τα περιεχόµενα των πινάκων SMITH_PROJ και SSN_PROJ κα-
θώς και της διαίρεσής τους, SSNS, σύµφωνα µε τα δεδοµένα που έχουµε καταχωρή-
σει στους πίνακες της βάσης δεδοµένων της εταιρείας:

SSN_PROJ SMITH_PROJ
ESSN PNO PNO
123456789 1 1
123456789 2 2
666884444 3
453453453 1
453453453 2 SSNS
333445555 2 SSN
333445555 3 123456789
333445555 10 453453453
333445555 20
999887777 30
999887777 10
987987987 10
987987987 30
987654321 30
987654321 20
888665555 20

Εάν παρατηρήσουµε προσεκτικά τα περιεχόµενα αυτών των πινάκων θα δια-


πιστώσουµε πως υπάρχουν µόνο δύο κωδικοί ESSN στον πίνακα SSN_PROJ που να
συνδυάζονται τόσο µε το PNO = 1 όσο και µε το PNO = 2. Αυτοί οι δύο κωδικοί εί-
ναι ο 123456789 και ο 453453453. Επειδή όµως οι κωδικοί PNO = 1 και PNO = 2
είναι οι κωδικοί των PROJECTS στα οποία εργάζεται ο Smith, έπεται πως οι δύο
παραπάνω κωδικοί SSN είναι αναφέρονται στους υπαλλήλους που εργάζονται σε όλα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 77

αυτά τα PROJECTS – και προφανώς κάποιος από αυτούς τους δύο κωδικούς (ο
123456789) θα ανήκει στον John Smith, αφού και αυτός συµπεριλαµβάνεται ανάµε-
σα σε αυτούς τους υπαλλήλους.

Τέλος, για να πάρουµε τα ονόµατα όλων αυτών των υπαλλήλων, δεν έχουµε
παρά να γράψουµε

RESULT ←π FNAME, LNAME (SNNS * EMPLOYEE)

ΑΘΡΟΙΣΤΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ (AGGREGATE FUNCTIONS)

Οι αθροιστικές συναρτήσεις δεν αποτελούν µέρος της σχεσιακής άλγεβρας


αλλά έχουν ορισθεί προκειµένου να πραγµατοποιήσουµε κάποιες µαθηµατικές πρά-
ξεις πάνω στα δεδοµένα των πινάκων της βάσης. Οι πιο σηµαντικές από αυτές τις
πράξεις είναι η καταµέτρηση των εγγραφών ενός πίνακα (COUNT), ο υπολογι-
σµός αθροίσµατος (SUM) και του µέσου όρου των τιµών µιας στήλης
(AVERAGE), καθώς και η εύρεση της µέγιστης (MAXIMUM) και της ελάχιστης
(MINIMUM) από αυτές τις τιµές. Οι παραπάνω συναρτήσεις µπορούν να εφαρµο-
σθούν πάνω σε όλες τις γραµµές του πίνακα, αλλά εναλλακτικά έχουµε τη δυνατότη-
τα να οµαδοποιήσουµε τις εγγραφές του πίνακα µε βάση ένα ή περισσότερα πεδία και
στη συνέχεια να εφαρµόσουµε αυτές τις συναρτήσεις, σε κάθε οµάδα ξεχωριστά.

Ο τρόπος µε τον οποίο µπορούµε να καλέσουµε αυτές τις συναρτήσεις χαρα-


κτηρίζεται από µια σύνταξη της µορφής

<grouping attributes> ℱ<function list> (<relation name>)


όπου <grouping attributes> είναι η λίστα των πεδίων του πίνακα ως προς τα οποία
θα λάβει χώρα οµαδοποίηση των εγγραφών πριν την εφαρµογή των αθροιστικών συ-
ναρτήσεων, <function list> είναι η λίστα των αθροιστικών συναρτήσεων που θα
χρησιµοποιηθούνε, και <relation name> είναι το όνοµα του πίνακα στα δεδοµένα
του οποίου θα εφαρµοσθούν οι εν λόγω συναρτήσεις. Κάθε στοιχείο της λίστας των
αθροιστικών συναρτήσεων, είναι ένα ζεύγος της µορφής (<function name>,
<attribute name>) που καθορίζει ποια συνάρτηση θα χρησιµοποιηθεί και πάνω σε
πιο πεδίο του πίνακα θα εφαρµοσθεί. Έτσι, η εντολή

R ← DNO ℱCOUNT SSN, AVERAGE SALARY (EMPLOYEE)


οµαδοποιεί τους υπαλλήλους της εταιρείας µε κριτήριο τον κωδικό του τµήµα-
τος στο οποίο εργάζονται, και στη συνέχεια, για τους υπαλλήλους του κάθε τµή-
µατος, καταµετρά τον αριθµό τους και υπολογίζει το µέσο όρο των µισθών τους.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 78

Το αποτέλεσµα της παραπάνω εντολής, παρουσιάζεται στον ακόλουθο πίνακα.

DNO EMP_NO AVG_SAL


5 4 33250
4 3 31000
1 1 55000

Στην περίπτωση κατά την οποία δεν καθορίσουµε κάποιο πεδίο ως προς το
οποίο θα λάβει χώρα η οµαδοποίηση των εγγραφών, το αποτέλεσµα της παραπάνω
εντολής είναι ένας πίνακας µε µια µόνο γραµµή, αφού οι συναρτήσεις που θα καθο-
ρίσουµε, θα εφαρµοσθούν σε όλες τις εγγραφές του πίνακα, και όχι σε κάποια οµάδα
εγγραφών. Έτσι, η εντολή

R ←ℱ COUNT SSN, AVERAGE SALARY (EMPLOYEE)

θα δώσει ως αποτέλεσµα τον πίνακα που ακολουθεί.

EMP_NO AVG_SAL
8 35125

ΠΑΡΑ∆ΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΗΣ ΤΩΝ ΤΕΛΕΣΤΩΝ


ΤΗΣ ΣΧΕΣΙΑΚΗΣ ΑΛΓΕΒΡΑΣ

Στις σελίδες που ακολουθούν παρουσιάζονται υποδειγµατικά λυµένες ασκή-


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

ΑΣΚΗΣΗ 1: Να βρεθούνε τα ονόµατα και οι διευθύνσεις όλων των υπαλλή-


λων που εργάζονται στο Research Department

ΑΠΑΝΤΗΣΗ: (α) Από τον πίνακα DEPARTMENT κρατάµε µόνο τη στήλη


που αναφέρεται στο Research Department

RESEARCH ←σ DNAME=’RESEARCH’ (DEPARTMENT)

(β) Εφαρµόζουµε την πράξη της σύζευξης ανάµεσα στους πίνακες


RESEARCH και EMPLOYEE µε συνθήκη επιλογής την DNUMBER=DNO προ-
κειµένου να ανακτήσουµε όλους τους EMPLOYEES που δουλεύουν στο Research
Department

RES_EMP ← RESEARCH ⋈ DNUMBER=DNO EMPLOYEE

(γ) Τέλος, από τον πίνακα RES_EMP, κρατάµε µόνο τα ονόµατα και τις διευ-
θύνσεις αυτών των υπαλλήλων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 79

RESULT ←π FNAME, LNAME, ADDRESS (RES_EMP)

ΑΣΚΗΣΗ 2: Για κάθε PROJECT που πραγµατοποιείται στο Stafford να


βρεθεί ο κωδικός του (PNUMBER), ο κωδικός του τµήµατος που το παρακολουθεί,
καθώς και το επώνυµο, η διεύθυνση και η ηµεροµηνία γέννησης του MANAGER αυ-
τού του τµήµατος.

ΑΠΑΝΤΗΣΗ: (α) Αρχικά, βρίσκουµε όλα τα PROJECTS που πραγµατο-


ποιούνται στο Stafford.

STAFFORD ←σ PLOCATION=’STAFFORD’ (PROJECT)

(β) Στη συνέχεια βρίσκουµε τα τµήµατα που ελέγχουν όλα τα PROJECTS


που γίνονται στο Stafford

DEPT_PROJ ← STAFFORD ⋈ DNUM=DNUMBER DEPARTMENT

(γ) Στο επόµενο βήµα βρίσκουµε τους MANAGERS των τµηµάτων που ε-
λέγχουν όλα τα PROJECTS που γίνονται στο Stafford

MAN_DEP_PRO ← DEPT_PROJ ⋈ MGRSSN=SSN EMPLOYEE

(δ) Τέλος, από όλες τις πληροφορίες που περιέχει ο πίνακας MAN_DEP_
PROJ, κρατάµε µόνο τον κωδικό του PROJECT, τον κωδικό του τµήµατος που το
ελέγχει, και το επώνυµο, τη διεύθυνση και την ηµεροµηνία γέννησης του
MANAGER για αυτό το τµήµα

RESULT ←π PNUMBER,DNUM,LNAME,ADDRESS,BDATE (MAN_DEP_PRO)

ΑΣΚΗΣΗ 3: Να βρεθούνε τα ονόµατα των υπαλλήλων που εργάζονται σε


όλα τα projects τα οποία παρακολουθούνται από το DEPARTMENT µε κωδικό 5.

ΑΠΑΝΤΗΣΗ: (α) Αρχικά βρίσκουµε τους κωδικούς όλων των PROJECTS


που πραγµατοποιούνται από το DEPARTMENT µε κωδικό αριθµό 5. Για να το κά-
νουµε αυτό χρησιµοποιούµε ένα συνδυασµό των πράξεων SELECT και PROJECT
όπως φαίνεται στη συνέχεια:

DEPT5_PROJS ←π PNUMBER (σ DNUM=5 (EMPLOYEE) )


(β) Στη συνέχεια για κάθε υπάλληλο που εργάζεται σε κάποιο PROJECT α-
νακτούµε τον κωδικό του και τον κωδικό του τµήµατος στο οποίο εργάζεται από τον
πίνακα WORKS_ON

EMP_PROJ (SSN, PNO) ←π ESSN, PNO (WORKS_ON)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 80

(γ) Οι κωδικοί των υπαλλήλων που εργάζονται σε όλα τα PROJECTS που


παρακολουθούνται από το DEPARTMENT µε κωδικό αριθµό 5, είναι όσοι κωδικοί
του πίνακα EMP_PROJ συνδυάζονται µε όλους τους κωδικούς του πίνακα
DEPT5_PROJS. Εποµένως θα ανακτηθούν ως το αποτέλεσµα της διαίρεσης των δύο
πινάκων, και θα καταχωρηθούν στον πίνακα EMP_SSNS ο οποίος προκύπτει ως

EMP_SSNS ← EMP_PROJ ÷ DEPT5_PROJ


(δ) Τέλος, για να ανακτήσουµε τα ονοµατεπώνυµα όλων αυτών των υπαλλή-
λων θα εκτελέσουµε την πράξη της φυσικής σύζευξης ανάµεσα στους πίνακες
EMP_SSNS και EMPLOYEE και από τον πίνακα που θα προκύψει, θα κρατήσουµε
µόνο τα πεδία LNAME και LNAME:

RESULT ←π LNAME, FNAME (EMP_SSNS * EMPLOYEE)

ΑΣΚΗΣΗ 4: Να βρεθεί ο κωδικός των PROJECT στα οποία εργάζεται ο


υπάλληλος µε το επώνυµο Smith, τόσο ως εργαζόµενος, όσο και ως MANAGER
κάποιου τµήµατος.

ΑΠΑΝΤΗΣΗ: Για να απαντήσουµε σε αυτό το ερώτηµα, θα πρέπει να βρού-


µε τους κωδικούς των PROJECT στα οποία ο Smith εργάζεται (1) ως εργαζόµενος
και (2) ως MANAGER και στη συνέχεια να ενώσουµε τους δύο πίνακες σε ένα και
µοναδικό πίνακα, που θα περιέχει τους κωδικούς των PROJECTS στα οποία εργάζε-
ται ο Smith, τόσο ως εργαζόµενος όσο και ως MANAGER.

(α) Βρίσκουµε από τον πίνακα EMPLOYEE τον κωδικό SSN του Smith

SMITHS(ESSN) ←π (σ SSN LNAME=’SMITH’ (EMPLOYEE) )


(β) Ανακτούµε τους κωδικούς των PROJECTS στα οποία εργάζεται ο Smith
ως EMPLOYEE

SMITH_WORKER ←π PNO (WORKS_ON*SMITHS)

(γ) Βρίσκουµε όλους τους EMPLOYEES που δουλεύουν ως MANAGER σε


οποιοδήποτε τµήµα, και για κάθε έναν από αυτούς, κρατάµε το επώνυµό του και τον
κωδικό του τµήµατος που διευθύνει.

MGR ←π LNAME,DNUMBER(EMPLOYEE ⋈SSN=MRGSSN DEPARTMENT)


(δ) Από όλες τις γραµµές του παραπάνω πίνακα κρατάµε µόνο εκείνη που α-
ναφέρεται στον Smith

SMITH_MGR ←σ LNAME=’SMITH’ (MGR)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 81

(ε) Από την παραπάνω γραµµή κρατάµε µόνο τον κωδικό του τµήµατος που
διευθύνει ο John Smith

SMITH_DEPT ←π DNUMBER (SMITH_MGR)

(στ) Στη συνέχεια βρίσκουµε τους κωδικούς των PROJECTS που πραγµατο-
ποιούνται από το τµήµα το οποίο διευθύνεται από τον John Smith

SMITH_MGR ←π PNUMBER (SMITH_DEPT * PROJECT)

(ζ) Έχοντας ανακτήσει τους κωδικούς των PROJECTS στα οποία ο Smith
εργάζεται σαν EMPLOYEE καθώς και εκείνων στα οποία ο Smith εργάζεται ως
MANAGER, δεν έχουµε παρά να ενώσουµε τους αντίστοιχους πίνακες προκειµένου
να λάβουµε τους κωδικούς των PROJECTS στα οποία ο Smith εργάζεται είτε ως
EMPLOYEE είτε ως MANAGER. Έτσι τελικά θα έχουµε

RESULT ← SMITH_WORKER ∪ SMITH_MGR


ΑΣΚΗΣΗ 5: Να βρεθούν τα ονόµατα των υπαλλήλων που δεν έχουν προστα-
τευόµενα µέλη.

ΑΠΑΝΤΗΣΗ: Για να απαντήσουµε στο ερώτηµα αυτό θα πρέπει να βρούµε


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

(α) Αρχικά βρίσκουµε το σύνολο των κωδικών όλων των υπαλλήλων

ALL_EMPS ←π SSN (EMPLOYEE)

(β) Στη συνέχεια βρίσκουµε τους κωδικούς των υπαλλήλων που έχουν προ-
στατευόµενα µέλη

EMP_WITH_DEP ←π ESSN (DEPENDENT)

(γ) Οι κωδικοί των υπαλλήλων που δεν έχουν προστατευόµενα µέλη, είναι αυ-
τοί που αποµένουν εάν αφαιρέσουµε τους κωδικούς των υπαλλήλων που έχουν προ-
στατευόµενα µέλη από το σύνολο των κωδικών των υπαλλήλων

EMP_WITHOUT_DEP ← (ALL_EMPS – EMP_WITH_DEP)


(δ) Τέλος ανακτούµε τα ονόµατα και τα επώνυµα αυτών των υπαλλήλων

RESULT ←π LNAME, FNAME(EMP_WITHOUT_DEPS * EMPLOYEE)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 82

ΑΣΚΗΣΗ 6: Να βρεθούν τα ονόµατα των MANAGERS που έχουν τουλάχι-


στον ένα προστατευόµενο µέλος.

ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς SSN των MANAGERS


όλων των τµηµάτων

MGRS (SSN) ←π MGRSSN (DEPARTMENT)

(β) Στη συνέχεια διαβάζουµε τους κωδικούς SSN όλων των EMPLOYEES
που έχουν προστατευόµενα µέλη

EMP_WITH_DEP ←π ESSN (DEPENDENT)

(γ) Επειδή και οι MANAGERS είναι EMPLOYEES, οι κωδικοί SSN όλων


των MANAGERS που έχουν προστατευόµενα µέλη, θα ανήκουν και αυτοί στον πί-
νακα EMP_WITH_DEP. Εποµένως, οι κωδικοί των MANAGERS που έχουν προ-
στατευόµενα µέλη, θα ανήκουν, τόσο στον πίνακα MGRS όσο και στον πίνακα
EMP_WITH_DEP, και εποµένως για να τους ανακτήσουµε θα πάρουµε την τοµή
των δύο πινάκων:

MGRS_WITH_DEP ← MGRS ∩ EMP_WITH_DEP


(δ) Τέλος ανακτούµε τα ονόµατα και τα επώνυµα αυτών των MANAGERS

RESULT ←π LNAME, FNAME(MGRS_WITHOUT_DEPS * EMPLOYEE)

ΑΣΚΗΣΗ 7: Να βρεθούν τα ονόµατα των υπαλλήλων που ανήκουν στο τµή-


µα µε κωδικό 5, και εργάζονται περισσότερες από 10 ώρες την εβδοµάδα στον
PROJECT µε όνοµα ProductX

ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς των υπαλλήλων που ερ-
γάζονται στο τµήµα µε κωδικό 5

SSNS ← π (σ SSN DNO=5 (EMPLOYEE) )


(β) Στη συνέχεια βρίσκουµε τον κωδικό του PROJECT µε όνοµα ProductX

PRODX (PNO) ←π PNUMBER (σ PNAME=’PRODUCTX’ (PROJECT) )


(γ) Από τον πίνακα WORKS_ON βρίσκουµε κρατάµε µόνο τις εγγραφές που
αφορούν το PROJECT ProductX και αναφέρονται στους υπαλλήλους όλων των
τµηµάτων της εταιρείας που απασχολούνται σε αυτό

WORKS_PRODX ← PRODX * WORKS_ON

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 83

(δ) Από τον πίνακα WORKS_PRODX κρατάµε µόνο εκείνες τις εγγραφές
που αφορούν τους υπαλλήλους του τµήµατος 5 που εργάζονται στο PROJECT
ProductX περισσότερες από 10 ώρες την εβδοµάδα.

EMP_PRODX ←σ HOURS>10(WORKS_PRODX * SSNS)

(ε) Τέλος βρίσκουµε το όνοµα και τον επώνυµο για όλους αυτούς τους υπαλ-
λήλους.

RESULT ←π LNAME, FNAME(EMP_PRODX * EMPLOYEE)

ΑΣΚΗΣΗ 8: Να βρεθούν τα ονόµατα των υπαλλήλων που έχουν κάποιο


προστατευόµενο µέλος, το µικρό όνοµα του οποίου είναι ίδιο µε το δικό τους.

ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς των υπαλλήλων που έ-


χουν προστατευόµενα µέλη

EMP_WITH_DEP ←π ESSN (DEPENDENT)

(β) Στη συνέχεια ανακτούµε τα µικρά ονόµατα αυτών των υπαλλήλων

EMP_NAMES ←π FNAME (EMP_WITH_DEP * EMPLOYEE)

(γ) Κατόπιν βρίσκουµε τους υπαλλήλους που έχουν το ίδιο µικρό όνοµα µε
κάποιο από τα προστατευόµενα µέλη του

EMP_DEP ←EMP_NAMES ⋈ FNAME=DEPENDENT_NAME DEPENDENT

(δ) Ανακτούµε τους κωδικούς αυτών των υπαλλήλων

EMP_DEP_SSN ←π ESSN (EMP_DEP)

(ε) Ανακτούµε το όνοµα και το επώνυµο αυτών των υπαλλήλων

RESULT ←π LNAME, FNAME (EMP_DEP_SSN * EMPLOYEE)

ΑΣΚΗΣΗ 9: Να βρεθούν τα ονόµατα των υπαλλήλων που εποπτεύονται α-


πευθείας από τον Franklin Wong

ΑΠΑΝΤΗΣΗ: (α) Βρίσκουµε τον κωδικό SSN του Franklin Wong

WONG_SSN ←σ FNAME=’FRANKLIN’ AND LNAME=’WONG’ (EMPLOYEE)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 84

(β) Βρίσκουµε τους υπαλλήλους που εποπτεύονται απευθείας από τον Franklin
Wong

WONG_EMP ←WONG_SSN ⋈ SSN=SUPERSSN EMPLOYEE

(γ) Κρατάµε µόνο τα ονόµατα και τα επώνυµα αυτών των υπαλλήλων

RESULT ←π LNAME, FNAME (WONG_EMP)

ΑΣΚΗΣΗ 10: Για κάθε PROJECT να βρεθεί το όνοµα του PROJECT και ο
συνολικός αριθµός των ωρών ανά εβδοµάδα που αναλώνεται σε αυτό το PROJECT
από όλους τους υπαλλήλους

ΑΠΑΝΤΗΣΗ: (α) Στο πρώτο βήµα θα οµαδοποιήσουµε τις εγγραφές του πί-
νακα WORKS_ON ως προς τον κωδικό του project και για κάθε ένα από τα
projects της εταιρείας, θα αθροίσουµε τις ώρες που αφιερώνονται σε αυτό, από όλους
τους υπαλλήλους της εταιρείας.

PROJ_SUM (PNUMBER, HOURS) ← PNO ℱSUM HOURS (WORKS_ON)


(β) Τέλος για κάθε project ανακτούµε από τον πίνακα PROJECT το όνοµά του, και
το επιστρέφουµε µαζί µε το συνολικό πλήθος των ωρών ανά εβδοµάδα που
απασχολούνται σε αυτό όλοι οι υπάλληλοι της εταιρείας.

RESULT ←π PNAME, HOURS (PROJ_NUM * PROJECT)

ΑΣΚΗΣΗ 11: Να ανακτηθούν τα ονόµατα των υπαλλήλων που δουλεύουν σε


όλα τα projects

ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς όλων των projects που
πραγµατοποιούνται από την εταιρεία.

PROJ ←π PNUMBER (PROJECT)

(β) Στη συνέχεια, από τον πίνακα WORKS_ON ανακτούµε για κάθε υπάλλη-
λο, τον κωδικό του, καθώς και τον κωδικό των projects στα οποία απασχολείται.

SSN_PROJ ←π PNO, ESSN (WORKS_ON)

Οι υπάλληλοι που εργάζονται σε όλα τα projects έχουν κωδικούς στον πίνακα


SSN_PROJ, οι οποίοι συνδυάζονται µε όλους των κωδικούς των projects που βρί-
σκονται στον πίνακα PROJ. Εποµένως για να ανακτήσουµε τους κωδικούς αυτών
των υπαλλήλων, θα πρέπει να διαιρέσουµε τους δύο παραπάνω πίνακες. Έτσι θα έ-
χουµε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 85

SSNS (SSN) ← SSN_PROJ ÷ PROJ


(δ) Τέλος, ανακτούµε τα ονόµατα και τα επώνυµα αυτών των υπαλλήλων
γράφοντας

RESULT ←π FNAME, LNAME (SNNS * EMPLOYEE)

ΑΣΚΗΣΗ 12: Να ανακτηθούν τα ονόµατα των υπαλλήλων που δεν εργάζο-


νται σε κανένα project

ΑΠΑΝΤΗΣΗ: Οι κωδικοί των υπαλλήλων που δεν εργάζονται σε κανένα


project προκύπτον αν ανακτήσουµε τους κωδικούς των υπαλλήλων που εργάζονται
στα διάφορα projects της εταιρείας, και τους αφαιρέσουµε από το σύνολο των κωδι-
κών όλων των υπαλλήλων. Πιο αναλυτικά, έχουµε

(α) Βρίσκουµε τους κωδικούς των υπαλλήλων που εργάζονται στα διάφορα
projects της εταιρείας.

WORKER_SSN (SSN) ←π ESSN (WORKS_ON)

(β) Βρίσκουµε τους κωδικούς όλων των υπαλλήλων της εταιρείας

SSN (SSN) ←π SSN (EMPLOYEE)

(γ) Για να βρούµε τους κωδικούς των υπαλλήλων που δεν εργάζονται σε κα-
νένα project αφαιρούµε από το σύνολο των κωδικών των υπαλλήλων τους κωδικούς
εκείνων των υπαλλήλων που εργάζονται στα διάφορα projects.

NO_WORKER_SSN ← SNN – WORKER_SSN


(δ) Τέλος, βρίσκουµε το όνοµα και το επώνυµο αυτών των υπαλλήλων, γρά-
φοντας

RESULT ←π FNAME, LNAME (NO_WORKER_SSN * EMPLOYEE)

ΑΣΚΗΣΗ 13: Για κάθε τµήµα να ανακτηθεί το όνοµά του και ο µέσος όρος
των µισθών για τους υπαλλήλους που δουλεύουν σε αυτό το τµήµα

ΑΠΑΝΤΗΣΗ: (α) Αρχικά βρίσκουµε τους υπαλλήλους που δουλεύουν σε


όλα τα τµήµατα της εταιρείας

EMP_DEP ← EMPLOYEE ⋈ DNO=DNUMBER DEPARTMENT

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 5 : Σχεσιακή Άλγεβρα 86

(β) Στη συνέχεια οµαδοποιούµε τους υπαλλήλους µε κριτήριο το τµήµα στο


οποίο εργάζονται και υπολογίζουµε για κάθε τµήµα, το µέσο όρο των µισθών των
υπαλλήλων που δουλεύουν σε αυτό.

DEP_AVG (DNUMBER, AVG) ← DNUMBER ℱAVERAGE SALARY (EMP_DEP)


(γ) Τέλος διαβάζουµε το όνοµα του τµήµατος και το επιστρέψουµε µαζί µε το
µέσο όρο των µισθών των υπαλλήλων που υπολογίσαµε παραπάνω.

RESULT ←π DNAME, AVG (DEP_AVG * DEPARTMENT)

ΑΣΚΗΣΗ 14: Να ανακτηθεί ο µέσος όρος των µισθών για όλες τις γυναίκες
υπαλλήλους

ΑΠΑΝΤΗΣΗ: (α) Αρχικά βρίσκουµε όλες τις γυναίκες υπαλλήλους

FEMALE_EMPS ←σ SEX=’F’ (EMPLOYEE)

(β) Στη συνέχεια επιστρέφουµε τον µέσο όρο των µισθών τους

AVG_FEM_SALARY ←ℱ AVERAGE SALARY (FEMALE_EMPS)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6
SQL
Στο κεφάλαιο αυτό παρουσιάζεται η δοµηµένη γλώσσα
ερωτοαποκρίσεων (Structured Query Language, SQL) που
χρησιµοποιείται για τη διαχείριση των δεδοµένων της βάσης.
Η διαχείριση αυτή περιλαµβάνει τόσο τη δηµιουργία και µε-
ταβολή των πινάκων της εφαρµογής, όσο και την καταχώρη-
ση και ανάκτηση δεδοµένων µε βάση συγκεκριµένα κριτήρια
επιλογής.

Όπως έχει ήδη αναφερθεί, µια από τις βασικές λειτουργίες ενός σχεσιακού
συστήµατος διαχείρισης βάσεων δεδοµένων, είναι η διαχείριση του πληροφοριακού
περιεχοµένου που είναι αποθηκευµένο στη βάση, και οργανωµένο σε πίνακες οι
οποίοι συσχετίζονται µεταξύ τους. Οι πιο σηµαντικές µορφές αυτής της διαχείρισης
είναι η εισαγωγή, µεταβολή και διαγραφή των εγγραφών των πινάκων της βάσης
– διεργασίες οι οποίες οδηγούν στη µεταβολή του πληροφοριακού περιεχοµένου –
αλλά και η επιλογή και εµφάνιση των εγγραφών των πινάκων µε βάση κάποια
κριτήρια αναζήτησης. Πριν βέβαια πραγµατοποιηθούν όλες οι παραπάνω ενέργειες,
θα πρέπει να δηµιουργήσουµε τους πίνακες της βάσης και να ορίσουµε τις συσχετί-
σεις που υφίστανται ανάµεσά στα πεδία τους, µε βάση το λογικό σχεδιασµό του συ-
στήµατος που έχουµε περιγράψει σε προηγούµενο κεφάλαιο.

Αυτές δύο βασικές οµάδες λειτουργιών – η δηµιουργία του σχεσιακού σχή-


µατος και η διαχείριση του πληροφοριακού περιεχοµένου που περιέχεται σε αυτό
– πραγµατοποιούνται από κατάλληλα εργαλεία που είναι ειδικά σχεδιασµένα για αυτό
το σκοπό. Πιο συγκεκριµένα, η διαχείριση των πινάκων της βάσης, πραγµατοποιείται
χρησιµοποιώντας τη γλώσσα ορισµού δεδοµένων (Data Definition Language,
DDL), ενώ για τη διαχείριση των δεδοµένων της εφαρµογής, χρησιµοποιείται η
γλώσσα χειρισµού δεδοµένων (Data Manipulation Language, DML). Αυτές οι δύο
γλώσσες συναντώνται σε όλα τα µοντέρνα συστήµατα διαχείρισης βάσεων δεδοµέ-
νων και αποτελούν τµήµα µιας πιο γενικευµένης γλώσσας η οποία ονοµάζεται δοµη-
µένη γλώσσα ερωτοαποκρίσεων (Structured Query Language, SQL) και έχει κα-
θιερωθεί ως το διεθνές πρότυπο διαχείρισης των δεδοµένων µιας εφαρµογής.

Υπάρχουν πολλές παραλλαγές της γλώσσας SQL που κυκλοφορούν στην α-


γορά, οι οποίες ωστόσο χαρακτηρίζονται από την ίδια δοµή και την ίδια φιλοσοφία..
Έτσι, µια τυπική γλώσσα SQL, θα περιλαµβάνει τις επόµενες δοµικές µονάδες:
Κεφάλαιο 6 : SQL 88

Γλώσσα ορισµού δεδοµένων (Data Definition Language, DDL): Η γλώσσα


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

Γλώσσα χειρισµού δεδοµένων (Data Manipulation Language, DML): Η


γλώσσα αυτή επιτρέπει τη διαχείριση των δεδοµένων της εφαρµογής, όπως την εισα-
γωγή, διαγραφή, ανάκτηση και τροποποίηση δεδοµένων.

Ορισµός όψεων της βάσης (View Definition): Επιτρέπει τη δηµιουργία ό-


ψεων της βάσης δεδοµένων οι οποίες όπως θα δούµε στη συνέχεια, ορίζονται ως ει-
κονικοί πίνακες (virtual tables) οι οποίοι περιέχουν δεδοµένα από έναν ή περισσό-
τερους πίνακες της βάσης.

Ορισµός εξουσιοδοτήσεων (Authorization): Επιτρέπει τη δηµιουργία οµά-


δων χρηστών, και την απόδοση διαφορετικών δικαιωµάτων πρόσβασης σε κάθε έναν
από αυτούς, προκειµένου η κάθε οµάδα χρηστών, να διαχειρίζεται µόνο τα δικά της
δεδοµένα.

∆ιαχείρισης ακεραιότητας (Integrity): Επιτρέπει το λεπτοµερή έλεγχο των


δεδοµένων που καταχωρούνται στη βάση, έτσι ώστε να µην παραβιάζονται οι κανό-
νες ακεραιότητας (integrity constraints) που έχουµε ορίσει και οι οποίοι όταν τη-
ρούνται, αποµακρύνουν τον κίνδυνο καταχώρησης ασυνεπών δεδοµένων
(inconsistent data).

Η αναλυτική περιγραφή της γλώσσας SQL αποτελεί αντικείµενο των σελίδων


που ακολουθούν.

Η ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ ∆Ε∆ΟΜΕΝΩΝ

Η γλώσσα ορισµού δεδοµένων (Data Definition Language, DDL), επιτρέ-


πει τη διαχείριση πινάκων (tables), όψεων (views) και δεικτών (indices) σε µια βά-
ση δεδοµένων. Αυτή η διαχείριση περιλαµβάνει τον ορισµό και τη µεταβολή της
δοµής αυτών των αντικειµένων, καθώς επίσης και τη διαγραφή τους. Από τα τρία
αυτά αντικείµενα, οι πίνακες είναι το δοµικό χαρακτηριστικό µιας σχεσιακής βά-
σης δεδοµένων, καθώς περιέχουν τα δεδοµένα που καταχωρούνται σε αυτή, ενώ
οι όψεις, όπως έχουµε δει, προκύπτουν από έναν ή περισσότερους πίνακες και συ-
σχετίζουν δεδοµένα που είναι αποθηκευµένα σε αυτούς. Τέλος οι δείκτες είναι
ειδικές δοµές δεδοµένων, οι οποίες επιταχύνουν τη διαδικασία της αναζήτησης
πληροφοριών από τη βάση. Αναλυτική περιγραφή των όψεων και των δεικτών, θα
δοθεί στη συνέχεια. Στις επόµενες σελίδες παρουσιάζονται οι εντολές της γλώσσας
ορισµού δεδοµένων µε τις οποίες µπορούµε να διαχειριστούµε τους πίνακες, τις όψεις
και τους δείκτες µιας σχεσιακής βάσης δεδοµένων.

(α) ∆ιαχείριση πινάκων

Η διαχείριση των πινάκων από τις εντολές της γλώσσας ορισµού δεδοµένων,
περιλαµβάνει τη δηµιουργία και διαγραφή πινάκων από τη βάση δεδοµένων κα-
θώς και την προσθήκη πεδίων στους πίνακες, µετά τη δηµιουργία τους. Οι εντο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 89

λές που πραγµατοποιούν αυτές τις διαδικασίες, είναι οι CREATE TABLE, DROP
TABLE και ALTER TABLE.

Η εντολή CREATE TABLE χρησιµοποιείται για τη δηµιουργία ενός καινού-


ριου πίνακα στη βάση δεδοµένων. Η εντολή δέχεται ως παράµετρο το όνοµα του πί-
νακα που θέλουµε να δηµιουργήσουµε και τη δοµή αυτού του πίνακα, που περι-
λαµβάνει το σύνολο των πεδίων που θα περιέχονται σε αυτόν. Για κάθε πεδίο κα-
θορίζουµε το όνοµά του και τον τύπο του ενώ προαιρετικά µπορούµε να θέσουµε
και κάποιους περιορισµούς όσον αφορά το σύνολο και τα χαρακτηριστικά των τιµών
του.

Οι πιο συνηθισµένοι τύποι δεδοµένων που µπορούµε να χρησιµοποιήσουµε


για τα πεδία των πινάκων, είναι αριθµητικοί τύποι και συµβολοσειρές. Ένα πεδίο
στο οποίο θα καταχωρηθεί κάποιος αριθµός, µπορεί να είναι µικρός (SMALLINT µε
µέγιστη τιµή 32767) ή µεγάλος (INTEGER) ακέραιος ή πραγµατικός αριθµός
(FLOAT), ενώ εάν θέλουµε να καταχωρήσουµε επ’ ακριβώς τη µορφή του πραγµα-
τικού αριθµού, µπορούµε να χρησιµοποιήσουµε τον τύπο DECIMAL (i, j) όπου i
είναι το συνολικό πλήθος των ψηφίων του αριθµού, και j το πλήθος των ψηφίων µετά
την υποδιαστολή. Εάν σε ένα πεδίο πρόκειται να καταχωρηθεί συµβολοσειρά, µπο-
ρούµε να χρησιµοποιήσουµε τον τύπο CHAR (n) ή VARCHAR (n) όπου n είναι το
πλήθος των χαρακτήρων που θα χρησιµοποιηθούνε. Η διαφορά ανάµεσα σε αυτούς
τους δύο τύπους, είναι πως στον τύπο CHAR χρησιµοποιούνται ακριβώς n χαρακτή-
ρες, ενώ στον τύπο VARCHAR το πλήθος των χαρακτήρων είναι µεταβλητό, αλλά
σε κάθε περίπτωση, όχι µεγαλύτερο από n χαρακτήρες. Στα µοντέρνα συστήµατα
διαχείρισης βάσεων δεδοµένων, υπάρχει και ένας τύπος δεδοµένων DATE τον οποίο
χρησιµοποιούµε όταν θέλουµε να καταχωρήσουµε ηµεροµηνίες.

Τέλος, οι περιορισµοί τους οποίους µπορούµε να θέσουµε για κάθε πεδίο, α-


φορούν κυρίως το δικαίωµα καταχώρησης ή όχι της τιµής NULL, σε αυτό το πε-
δίο. Έτσι, για όσα πεδία δεν επιτρέπεται η απόδοσης τιµής NULL σε αυτά, χρησιµο-
ποιούµε κατά την κλήση της εντολής, τον κανόνα «NOT NULL».

Χρησιµοποιώντας την εντολή CREATE TABLE, µπορούµε να κατασκευά-


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 90

CREATE TABLE EMPLOYEE (

FNAME VARCHAR (15) NOT NULL,


MINIT CHAR (1),
LNAME VARCHAR (15) NOT NULL,
SSN CHAR (9) NOT NULL,
BDATE DATE,
ADDRESS VARCHAR (30),
SEX VARCHAR (30),
SALARY INTEGER,
SUPERSSN CHAR (9),
DNO INTEGER );

CREATE TABLE DEPARTMENT (

DNAME VARCHAR (15) NOT NULL,


DNUMBER INTEGER NOT NULL,
MGRSSN CHAR (9),
MGRDATE DATE );

CREATE TABLE DEPT_LOCATIONS (

DNUMBER INTEGER NOT NULL,


DLOCATION VARCHAR (15) NOT NULL );

CREATE TABLE PROJECT (

PNAME VARCHAR (15) NOT NULL,


PNUMBER INTEGER NOT NULL,
PLOCATION VARCHAR (15),
DNUM INTEGER NOT NULL );

CREATE TABLE WORKS_ON (

ESSN CHAR (9) NOT NULL,


PNO INTEGER NOT NULL,
HOURS DECIMAL (3,1) NOT NULL );

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 91

CREATE TABLE DEPENDENT (

ESSN CHAR (9) NOT NULL,


DEP_NAME VARCHAR (15) NOT NULL,
SEX CHAR (1),
BDATE CHAR (9),
RELATION VARCHAR (8) );

∆εν είναι δύσκολο να διαπιστώσει κανείς, πως στην παραπάνω σύνταξη της
εντολής CREATE TABLE δεν έχουµε τη δυνατότητα να καθορίσουµε ποιο είναι το
πρωτεύον κλειδί του πίνακα. Αυτό είναι κάτι που ποικίλλει από γλώσσα σε γλώσσα,
καθώς σε άλλες εκδόσεις της SQL, είναι δυνατός ο καθορισµός των κλειδιών των πι-
νάκων, κατά τη φάση της δηµιουργίας τους, µε την CREATE TABLE. Η παράµε-
τρος που καθορίζει το πρωτεύον κλειδί σε αυτές τις περιπτώσεις, είναι η UNIQUE η
οποία χρησιµοποιείται ως κανόνας µαζί µε τον κανόνα NOT NULL. Έτσι για να δεί-
ξουµε πως το πεδίο SSN είναι πρωτεύον κλειδί του πίνακα EMPLOYEE µπορούµε
να το δηλώσουµε στην CREATE TABLE ως

SSN CHAR (9) NOT NULL UNIQUE

Χρησιµοποιώντας την παράµετρο UNIQUE µπορούµε να ορίσουµε µόνο α-


πλά και όχι σύνθετα πρωτεύοντα κλειδιά. Για να ορίσουµε ένα σύνθετο κλειδί, θα
πρέπει όπως θα δούµε στη συνέχεια, να δηµιουργήσουµε ένα δείκτη χρησιµοποιώ-
ντας την εντολή CREATE UNIQUE INDEX.

Ας σηµειωθεί επιπλέον, πως οι πίνακες που δηµιουργούνται µε την εντολή


CREATE TABLE, είναι οι βασικοί πίνακες της βάσης (base tables), διότι τα δε-
δοµένα που περιέχουν, αποθηκεύονται σε αρχεία του συστήµατος. Αντίθετα, οι
όψεις, είναι εικονικοί πίνακες (virtual tables), που µπορεί να αποθηκεύονται και
αυτοί σε αρχείο, χωρίς όµως κάτι τέτοιο να είναι υποχρεωτικό. Τέλος, θα πρέπει να
αναφερθεί, πως η σειρά µε την οποία αποθηκεύονται οι τιµές των πεδίων στους
πίνακες, είναι ίδια µε τη σειρά µε την οποία έχουν δηλωθεί τα πεδία των πινάκων
κατά την κλήση της εντολής. Αυτό σηµαίνει, πως στον πίνακα EMPLOYEE, η η-
µεροµηνία γέννησης (BDATE) για τον κάθε εργαζόµενο, αποθηκεύεται µετά από
τον κωδικό SSN, διότι το πεδίο BDATE στην εντολή CREATE TABLE έχει δηλω-
θεί µετά το πεδίο SSN στον πίνακα EMPLOYEE.

Οι άλλες δύο εντολές που περιλαµβάνονται στη γλώσσα ορισµού δεδοµένων,


είναι η DROP TABLE και η ALTER TABLE. Η εντολή DROP TABLE χρησιµο-
ποιείται για τη διαγραφή ενός πίνακα από τη βάση δεδοµένων, ενέργεια, η οποία
διαγράφει όχι µόνο τα δεδοµένα του πίνακα, αλλά και τον ίδιο τον πίνακα. Παράδειγ-
µα χρήσης της εντολής είναι η κλήση της µε τη µορφή

DROP TABLE DEPENDENTS

η οποία διαγράφει τον πίνακα DEPENDENTS µαζί µε όλα τα δεδοµένα που περιέχει,
από τη βάση δεδοµένων της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 92

Τέλος, η εντολή ALTER TABLE επιτρέπει την τροποποίηση της δοµής του
πίνακα µετά τη δηµιουργία του, και πιο συγκεκριµένα, την προσθήκη νέων πεδίων
σε αυτόν – αν και σε ορισµένες περιπτώσεις επιτρέπεται τόσο η διαγραφή όσο και η
µεταβολή του τύπου δεδοµένων για κάποιο από τα πεδία του πίνακα. Για να προσθέ-
σουµε ένα νέο πεδίο σε κάποιο πίνακα, θα πρέπει να καθορίσουµε το όνοµά του και
τον τύπο του. Για παράδειγµα η εντολή

ALTER TABLE EMPLOYEE ADD JOB VARCHAR (12)

προσθέτει στον πίνακα EMPLOYEE το πεδίο JOB που είναι συµβολοσειρά µε µέ-
γιστο µήκος ίσο µε 12 χαρακτήρες.

(β) ∆ιαχείριση όψεων

Η όψη (view), στην ορολογία της SQL, ορίζεται ως ένας απλός πίνακας, ο
οποίος προκύπτει από το συνδυασµό των πεδίων ενός ή περισσοτέρων πινάκων.
Αυτοί οι πίνακες, µε τη σειρά τους, µπορεί να είναι είτε βασικοί πίνακες τα δεδοµένα
των οποίων αποθηκεύονται στα αρχεία του συστήµατος, ή άλλες όψεις, οι οποίες θε-
ωρούνται εικονικοί πίνακες που τους χρησιµοποιούµε χωρίς να αποθηκεύουµε τα
περιεχόµενά τους.

∆ηµιουργώντας µια όψη, µπορούµε να έχουµε εύκολη προσπέλαση σε πεδία


τα οποία χρησιµοποιούµε πολύ συχνά. Ας υποθέσουµε για παράδειγµα πως για κά-
ποιο υπάλληλο χρησιµοποιούµε συνέχεια το όνοµά του, καθώς και τα ονόµατα
των projects στα οποία εργάζεται. Αυτά τα δεδοµένα βρίσκονται αποθηκευµένα σε
τρεις διαφορετικούς πίνακες – τους πίνακες EMPLOYEE, PROJECT και
WORKS_ON – και αυτό σηµαίνει πως κάθε φορά που θέλουµε να τα χρησιµοποιή-
σουµε θα πρέπει να καταφύγουµε στις πράξεις της σύζευξης αυτών των πινάκων. ∆η-
µιουργώντας όµως µια όψη, η οποία θα προκύπτει από αυτές τις συζεύξεις των τριών
πινάκων, µπορούµε να χρησιµοποιούµε αυτά τα πεδία πάρα πολύ εύκολα, θεωρώντας
τα ως πεδία τα οποία ανήκουν στον ίδιο πίνακα. Οι βασικοί πίνακες από τους οποίους
δηµιουργείται µια όψη, αναφέρονται και ως πίνακες ορισµού της όψης (defining
tables).

Για να δηµιουργήσουµε µια όψη, χρησιµοποιούµε την εντολή CREATE


VIEW. Η εντολή δέχεται ως όρισµα το όνοµα της όψης που πρόκειται να δηµιουρ-
γήσουµε. Επίσης, εάν το επιθυµούµε, µπορούµε να καθορίσουµε και τα ονόµατα των
πεδίων αυτής της όψης – στην αντίθετη περίπτωση, θα χρησιµοποιηθούν τα ονόµατα
των πεδίων των πινάκων ορισµού της. Τέλος επειδή τα πεδία της όψης θα καθορι-
στούν εφαρµόζοντας ένα ερώτηµα (query) επί των βασικών πινάκων της βάσης, θα
πρέπει να περάσουµε ως παράµετρο στην εντολή και ένα τέτοιο ερώτηµα. Ένα παρά-
δειγµα χρήστης της CREATE VIEW παρουσιάζεται στη συνέχεια:

CREATE VIEW WORKS_ON1


AS SELECT FNAME, LNAME, PNAME, HOURS
FROM EMPLOYEE, PROJECT, WORKS_ON
WHERE SSN = ESSN AND PNO = PNUMBER

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 93

Η παραπάνω εντολή δηµιουργεί µια καινούρια όψη που φέρει το όνοµα


WORKS_ON1 και περιέχει τα πεδία FNAME, LNAME, PNAME και HOURS των
πινάκων EMPLOYEE, PROJECT και WORKS_ON. Έχοντας δηµιουργήσει τώρα
αυτή την όψη, µπορούµε να τη χρησιµοποιήσουµε σαν ένα απλό πίνακα εφαρµόζο-
ντας πάνω του όλες τις πράξεις που έχουν να κάνουν µε τη διαχείριση πινάκων. Για
παράδειγµα, προκειµένου να βρούµε τα ονοµατεπώνυµα των υπαλλήλων που εργάζο-
νται σε όλα τα PROJECTS περισσότερες από 10 ώρες την εβδοµάδα, δεν χρειάζε-
ται να συνδυάσουµε τους πίνακες EMPLOYEE, PROJECT και WORKS_ON, αλ-
λά µπορούµε απλά να γράψουµε

SELECT FNAME, LNAME


FROM WORKS_ON1
WHERE HOURS > 10

Ένα δεύτερο παράδειγµα χρήσης της CREATE VIEW παρουσιάζεται στη


συνέχεια:

CREATE VIEW DEPT_INFO (DNAME, EMP_NO, AVG_SAL)


AS SELECT DNAME, COUNT (*), SUM (SALARY)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER, DNO
GROUP BY DNAME

Αυτή η εντολή δηµιουργεί µια καινούρια όψη µε το όνοµα DEPT_INFO που


για κάθε τµήµα περιέχει το όνοµά του, το πλήθος των υπαλλήλων που εργάζονται σε
αυτό, καθώς και το µέσο όρο των µισθών τους. Στην προκειµένη περίπτωση, τα ονό-
µατα των πεδίων της όψης, δεν είναι τα ίδια µε τα ονόµατα των αντίστοιχων πε-
δίων του πίνακα, αλλά τα καθορίζουµε επ’ ακριβώς κατά την κλήση της εντολής.
Περισσότερες λεπτοµέρειες όσον αφορά τη χρήση της εντολής SELECT που χρησι-
µοποιείται στα δύο παραπάνω παραδείγµατα, θα δοθεί στις επόµενες σελίδες.

Τέλος, η διαγραφή µιας όψης γίνεται µε την εντολή DROP VIEW. Παρά-
δειγµα χρήσης της εντολής αυτής, είναι η κλήση της µε τη µορφή

DROP VIEW WORKS_ON1

η οποία διαγράφει την όψη WORKS_ON1 από τη βάση δεδοµένων της εταιρείας.

(γ) ∆ιαχείριση δεικτών

Η έννοια του δείκτη (index) σε όλα τα συστήµατα διαχείρισης βάσεων δεδο-


µένων, είναι στενά συνυφασµένη µε την έννοια της αναζήτησης πληροφορίας. Ο
δείκτης δεν είναι τίποτε άλλο από µια δοµή δεδοµένων που αποθηκεύεται σε ειδικά
αρχεία της βάσης (index files) και έχει ως στόχο να επιταχύνει τη διαδικασία α-
ναζήτησης πληροφορίας από τους πίνακες της βάσης. Οι δείκτες συνήθως ορίζο-
νται για συγκεκριµένα πεδία αυτών των πινάκων (indexing fields) και για κάθε τιµή
των εν λόγω πεδίων, αποθηκεύουν ένα σύνολο από pointers που δείχνουν όλες τις
περιοχές της συσκευής δευτερεύουσας αποθήκευσης στις οποίες βρίσκονται αποθη-
κευµένα, τα δεδοµένα της κάθε εγγραφής. Τα αρχεία των δεικτών είναι εποµένως αρ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 94

κετά µικρότερα σε µέγεθος σε σχέση µε τα αρχεία δεδοµένων, και η διαδικασία ανα-


ζήτησης της πληροφορίας δια της χρήσης τους, λαµβάνει χώρα δια της εφαρµογής
γνωστών τεχνικών αναζήτησης, όπως είναι για παράδειγµα η δυαδική αναζήτηση
(binary search).

Η δηµιουργία ενός δείκτη στη γλώσσα SQL, γίνεται χρησιµοποιώντας την


εντολή CREATE INDEX, και περιλαµβάνει τον καθορισµό του ονόµατος του δεί-
κτη, και του πεδίου του πίνακα για το οποίο θα δηµιουργηθεί. Για παράδειγµα,
προκειµένου να δηµιουργήσουµε ένα δείκτη για το πεδίο LNAME του πίνακα
EMPLOYEE, θα καλέσουµε την εντολή CREATE INDEX µε τη µορφή

CREATE INDEX LNAME_INDEX


ON EMPLOYEE (LNAME)

Η ταξινόµηση των τιµών του πεδίου πάνω στο οποίο θα δηµιουργηθεί ο δεί-
κτης, µπορεί να είναι είτε αύξουσα (ascending) είτε φθίνουσα (descending), και κα-
θορίζεται από το χρήστη, αναγράφοντας τις παραµέτρους ASC και DESC αντίστοιχα,
αµέσως µετά το όνοµα του πεδίου. Εάν δεν χρησιµοποιήσουµε αυτή την παράµετρο,
όπως στο παραπάνω παράδειγµα, ο δείκτης χρησιµοποιεί την αύξουσα ταξινόµηση
για τη διάταξη των τιµών του πεδίου. Η δηµιουργία ενός δείκτη για ένα συνδυασµό
πεδίων είναι επίσης δυνατή, και µάλιστα έχουµε τη δυνατότητα να καθορίσουµε δια-
φορετικό είδος ταξινόµησης για κάθε απλό πεδίο. Έτσι η εντολή

CREATE INDEX NAMES_INDEX


ON EMPLOYEE (LNAME ASC, FNAME DESC, MINIT)

δηµιουργεί ένα δείκτη πάνω στα πεδία LNAME, MINIT και FNAME, εκ των οποί-
ων το LNAME ταξινοµείται κατά αύξουσα διάταξη ενώ το FNAME ταξινοµείται
κατά φθίνουσα διάταξη. Τέλος όταν δεν έχουµε τη δυνατότητα να ορίσουµε κατά το
στάδιο δηµιουργίας των πινάκων το πρωτεύον κλειδί του πίνακα, µπορούµε να το κά-
νουµε δηµιουργώντας ένα INDEX για αυτό το πεδίο, και ταυτόχρονα δηλώνοντας
πως οι τιµές που καταχωρούνται σε αυτό, θα πρέπει να είναι µοναδικές:

CREATE UNIQUE INDEX SSN_INDEX


ON EMPLOYEE (SSN)

Ας σηµειωθεί πως ο καθορισµός του πρωτεύοντος κλειδιού του πίνακα µε τον


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

Η διαγραφή ενός δείκτη από τη βάση δεδοµένων, γίνεται χρησιµοποιώντας


την εντολή DROP_INDEX. Παράδειγµα χρήσης αυτής της εντολής είναι η κλήση
της µε τη µορφή DROP INDEX LNAME_INDEX η οποία διαγράφει το δείκτη
LNAMES_INDEX, από τη βάση δεδοµένων της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 95

Η ΓΛΩΣΣΑ ΧΕΙΡΙΣΜΟΥ ∆Ε∆ΟΜΕΝΩΝ

Η γλώσσα χειρισµού δεδοµένων (Data Manipulation Language, DML), ε-


πιτρέπει τη διαχείριση των δεδοµένων των πινάκων της βάσης, και πιο συγκεκριµένα,
την εισαγωγή, διαγραφή, και τροποποίηση των εγγραφών των πινάκων. Επιπλέον,
έχουµε τη δυνατότητα να ανακτήσουµε από τους πίνακες, δεδοµένα, τα οποία πλη-
ρούν κάποια συγκεκριµένα κριτήρια. Η πραγµατοποίηση όλων αυτών των διαδικα-
σιών, γίνεται χρησιµοποιώντας τις εντολές INSERT, DELETE, UPDATE και
SELECT, η αναλυτική παρουσίαση των οποίων, αποτελεί αντικείµενο των σελίδων
που ακολουθούν.

ΕΙΣΑΓΩΓΗ ΕΓΓΡΑΦΩΝ ΣΕ ΠΙΝΑΚΑ ΤΗΣ ΒΑΣΗΣ – Η ΕΝΤΟΛΗ INSERT

Η εισαγωγή µιας νέας εγγραφής σε κάποιον από τους πίνακες της βάσης δε-
δοµένων, γίνεται δια της χρήσης της εντολής INSERT, η οποία στη γενική περίπτω-
ση, καλείται µε τη µορφή

INSERT INTO <TABLE NAME>


VALUES (<v1>, <v2>, …… , <vn>)

όπου <TABLE NAME> είναι το όνοµα του πίνακα στον οποίο θα καταχωρηθεί η
νέα εγγραφή, και <v1>, <v2>, …… , <vn>, είναι οι τιµές των πεδίων της εγγραφής
που θέλουµε να καταχωρήσουµε. Έτσι η εντολή

INSERT INTO EMPLOYEE


VALUES (‘Richard’, ‘K’, ‘Marini’, ‘653298653’, ’30-Dec-52’,
’98 Oak Forest, Katy, TX’, ‘M’, 37000, ‘987654321’, 4)

καταχωρεί στον πίνακα EMPLOYEE ένα νέο υπάλληλο µε όνοµα Richard K.


Marini, που έχει κωδικό SSN 653298653, ηµεροµηνία γέννησης 30 ∆εκεµβρίου
1952, ∆ιεύθυνση 98 Oak Forest, Katy, TX, φύλλο άρρεν, µισθό 37000, ο οποίος
εποπτεύεται από τον MANAGER µε κωδικό SSN 987654321, και έχει τοποθετηθεί
στο τµήµα µε κωδικό αριθµό 4.

Από το παραπάνω παράδειγµα, διαπιστώνουµε πως οι τιµές των πεδίων στην


εντολή INSERT, θα πρέπει να αναγραφούν µε τη σειρά µε την οποία δηλώθηκαν τα
πεδία του πίνακα στην εντολή CREATE TABLE, έτσι ώστε η κάθε τιµή να κατα-
χωρηθεί στη σωστή στήλη του πίνακα, και να διασφαλισθεί η συµβατότητα ανάµε-
σα στον τύπο δεδοµένων του πεδίου, και στον τύπο δεδοµένων των καταχωρηµένων
τιµών. Εάν για κάποιο πεδίο δεν επιθυµούµε να καταχωρήσουµε κάποια τιµή, τότε η
αντίστοιχη τιµή στην εγγραφή που θα καταχωρήσουµε θα είναι ίση µε NULL. Εναλ-
λακτικά, µπορούµε να παραλείψουµε τις τιµές NULL, για κάποια πεδία του πίνακα.
Στην περίπτωση αυτή όµως θα πρέπει να καθορίσουµε επ’ ακριβώς σε ποιες στήλες
του πίνακα θα καταχωρηθούν οι τιµές που καθορίζουµε. Έτσι η εντολή

INSERT INTO EMPLOYEE (FNAME, LNAME, SSN)


VALUES (‘Richard’, ‘Marini’, ‘653298653’)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 96

υποδηλώνει ξεκάθαρα, πως η νέα εγγραφή που θα καταχωρήσουµε περιλαµβάνει µό-


νο το όνοµα, το επώνυµο και τον κωδικό SSN για τον νέο EMPLOYEE. Θα πρέ-
πει ωστόσο η σειρά µε την οποία αναγράφονται οι τιµές της νέας εγγραφής, να είναι
και πάλι ίδια µε τη σειρά µε την οποία αναγράφονται τα ονόµατα των πεδίων, δίπλα
από το όνοµα του πίνακα, έτσι ώστε η κάθε τιµή να καταχωρηθεί στο σωστό πεδίο.

Ας σηµειωθεί πως στη γενική περίπτωση η γλώσσα ορισµού δεδοµένων, δεν


ελέγχει εάν η εγγραφή που πρόκειται να καταχωρηθεί ικανοποιεί τους κανόνες
ακεραιότητας (integrity constraints) που έχουµε καθορίσει κατά το λογικό σχε-
διασµό του σχήµατος της βάσης. Έτσι, η παραπάνω εγγραφή θα προστεθεί στον πί-
νακα EMPLOYEE, ακόµη και εάν ο κωδικό του τµήµατος στον οποίο πρόκειται να
καταχωρηθεί ο νέος υπάλληλος, αναφέρεται σε ένα ανύπαρκτο τµήµα. Είναι λοιπόν
καθήκον του χρήστη να εξετάσει εάν πληρούνται οι κανόνες ακεραιότητας κάθε φορά
που επιχειρεί να προσθέσει µια νέα εγγραφή. Αντίθετα η εντολή INSERT δεν θα ε-
κτελεστεί εάν καταχωρήσουµε τιµή NULL σε κάποια από τα πεδία του πίνακα, για τα
οποία στην CREATE TABLE έχουµε καθορίσει τον κανόνα «NOT NULL» - στην
περίπτωση αυτή, η διαδικασία καταχώρησης της νέας εγγραφής, θα αποτύχει.

Τέλος, έχουµε τη δυνατότητα να συνδυάσουµε τις εντολές INSERT και


SELECT προκειµένου να καταχωρήσουµε σε ένα πίνακα, περισσότερες από µια εγ-
γραφές ταυτόχρονα. Για παράδειγµα η εντολή

INSERT INTO DEPTS_INFO (DNAME, EMP_NO, TOTAL_SAL)


SELECT DNAME, COUNT (*), SUM (SALARY)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER = DNO
GROUP BY DNAME

καταχωρεί στον πίνακα DEPTS_INFO ένα πλήθος εγγραφών, που για κάθε τµήµα
της εταιρείας, περιλαµβάνει το όνοµα του τµήµατος, το πλήθος των υπαλλήλων
που εργάζονται σε αυτό, και το σύνολο των µισθών τους. Είναι προφανές πως για
να εκτελεστεί η παραπάνω εντολή, ο πίνακας DEPTS_INFO θα πρέπει να έχει δη-
µιουργηθεί σε προηγούµενο στάδιο της διαδικασίας, και η δοµή του θα πρέπει να εί-
ναι συµβατή µε τη δοµή του πίνακα που επιστρέφει η SELECT έτσι ώστε να είναι
δυνατή η προσθήκη σε αυτόν των νέων εγγραφών.

∆ΙΑΓΡΑΦΗ ΕΓΓΡΑΦΩΝ ΑΠΟ ΠΙΝΑΚΑ ΤΗΣ ΒΑΣΗΣ


Η ΕΝΤΟΛΗ DELETE

Η εντολή DELETE, χρησιµοποιείται για τη διαγραφή εγγραφών από κάποιο


πίνακα. Οι εγγραφές διαγράφονται µόνο από ένα πίνακα κάθε φορά και καθορίζο-
νται δια της χρήσης της πρότασης WHERE η οποία χρησιµοποιείται µε τον ίδιο τρό-
πο που χρησιµοποιείται και στη SELECT. Εάν δεν χρησιµοποιηθεί η πρόταση
WHERE, η εντολή DELETE διαγράφει όλες τις εγγραφές του πίνακα πάνω στον
οποίο εφαρµόζεται. Αυτό βέβαια δεν σηµαίνει πως λαµβάνει χώρα και διαγραφή του
πίνακα από τη βάση – για να αποµακρυνθεί και ο ίδιος ο πίνακας θα πρέπει να χρη-
σιµοποιηθεί και η εντολή DROP TABLE.

Παραδείγµατα χρήσης της εντολής DELETE παρουσιάζονται στη συνέχεια:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 97

DELETE FROM EMPLOYEE


WHERE LNAME = ‘Brown’

DELETE FROM EMPLOYEE


WHERE SSN = ‘123456789’

DELETE FROM EMPLOYEE


WHERE DNO IN ( SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME = ‘Research’ )

Στα δύο πρώτα παραδείγµατα η εντολή DELETE διαγράφει µια εγγραφή κά-
θε φορά – αυτή που αναφέρεται στον Brown, και αυτή που αναφέρεται στον υπάλλη-
λο µε κωδικό SSN = 123456789. Στο τρίτο παράδειγµα οι εγγραφές που πρόκειται να
διαγραφούν, καθορίζονται από µια πρόταση SELECT η οποία επιστρέφει τον κωδικό
του τµήµατος µε όνοµα DEPARTMENT. Εποµένως, η παραπάνω εντολή, διαγράφει
όλους τους υπαλλήλους της εταιρείας, που ανήκουν στο Research Department.

Τέλος, η εντολή DELETE FROM EMPLOYEE διαγράφει όλες τις εγγρα-


φές του πίνακα EMPLOYEE, δηλαδή όλους τους υπαλλήλους της εταιρείας.

ΤΡΟΠΟΠΟΙΗΣΗ ΤΟΥ ΠΕΡΙΕΧΟΜΕΝΟΥ ΤΩΝ ΕΓΓΡΑΦΩΝ ΤΩΝ


ΠΙΝΑΚΩΝ ΤΗΣ ΒΑΣΗΣ – Η ΕΝΤΟΛΗ UPDATE

Η εντολή UPDATE, χρησιµοποιείται για την τροποποίηση των τιµών των πε-
δίων επιλεγµένων εγγραφών κάποιου από τους πίνακες της βάσης. Αυτές οι εγγραφές,
καθορίζονται όπως και στην εντολή DELETE, από µια πρόταση WHERE, που κα-
θορίζει τα χαρακτηριστικά των εγγραφών που θέλουµε να τροποποιήσουµε. Τα
πεδία των οποίων οι τιµές θα µεταβληθούν, καθώς επίσης και οι νέες τιµές που θα
καταχωρήσουµε σε αυτά, καθορίζονται, χρησιµοποιώντας την πρόταση SET. Έτσι, η
εντολή

UPDATE PROJECT
SET PLOCATION = ‘Bellaire’, DNUM = 5
WHERE PNUMBER = 10

τροποποιεί τις τιµές των πεδίων της εγγραφής του πίνακα PROJECT για την οποία
το πεδίο PNUMBER έχει την τιµή 10, και αποδίδει στο πεδίο PLOCATION την τι-
µή Bellaire, και στο πεδίο DNUM, την τιµή 5.

Τέλος, όπως και στην εντολή DELETE, µπορούµε να τροποποιήσουµε τις


τιµές πολλών εγγραφών ταυτόχρονα, εάν συνδυάσουµε την εντολή UPDATE µε την
εντολή SELECT. Έτσι η εντολή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 98

UPDATE EMPLOYEE
SET SALARY = SALARY * 1.1
WHERE DNO IN ( SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME = ‘Research’ )

τροποποιεί τους µισθούς όλων των υπαλλήλων που εργάζονται στο Research
Department, προκαλώντας αύξηση της τιµής τους κατά 10%.

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


Η ΕΝΤΟΛΗ SELECT

Εκτός από την οµάδα διαδικασιών η οποία τροποποιεί το περιεχόµενο των πι-
νάκων της βάσης, υπάρχουν και άλλες διαδικασίες, οι οποίες δε µεταβάλλουν τα δε-
δοµένα των πινάκων, αλλά αναζητούν και εµφανίζουν δεδοµένα, τα οποία πληρούν
κάποια συγκεκριµένα κριτήρια επιλογής. Αυτού του είδους οι διαδικασίες ονοµά-
ζονται ερωτήµατα (queries) και πραγµατοποιούνται δια της χρήσης µιας εκ των ε-
ντολών της γλώσσας χειρισµού δεδοµένων (Data Manipulation Language, DML),
που φέρει το όνοµα SELECT.

Η χρήση της εντολής SELECT ακολουθεί τη σύνταξη

SELECT <attribute list>


FROM <table list>
WHERE <condition>

όπου ο κατάλογος <attribute list> περιέχει τα ονόµατα των πεδίων που θέλουµε να
ανακτήσουµε, ο κατάλογος <table list> περιέχει τα ονόµατα των πινάκων που θα
χρησιµοποιηθούνε στη δηµιουργία του ερωτήµατος, ενώ <condition>, είναι το
κριτήριο αναζήτησης, που θα πρέπει να ικανοποιείται από τα δεδοµένα των πι-
νάκων, προκειµένου αυτά να εµφανιστούν στο τελικό αποτέλεσµα.

Ένα παράδειγµα της εντολής SELECT είναι η κλήση της µε τη µορφή

SELECT BDATE, ADDRESS


FROM EMPLOYEE
WHERE FNAME=’John’ AND MINIT=’B’ AND LNAME=’Smith’

Η εντολή αυτή εφαρµόζεται πάνω στον πίνακα EMPLOYEE και επιστρέφει


την ηµεροµηνία γέννησης και τη διεύθυνση του υπαλλήλου, που φέρει το όνοµα
John B. Smith.

Εάν τα δεδοµένα που περιλαµβάνονται στο ερώτηµα ανήκουν σε περισσότε-


ρους από έναν πίνακες, τότε η εντολή SELECT θα εφαρµοσθεί πάνω σε όλους αυ-
τούς τους πίνακες. Επιπλέον, στην προκειµένη περίπτωση, εκτός από τις επιθυµητές
τιµές των πεδίων που θέλουµε να εµφανίσουµε, θα πρέπει στην πρόταση WHERE,
να συµπεριλάβουµε και τη συνθήκη σύζευξης (join condition) που καθορίζει ποιες
στήλες των δύο πινάκων συσχετίζονται µεταξύ τους. Ας πάρουµε για παράδειγµα την
εντολή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 99

SELECT FNAME, LNAME, ADDRESS


FROM EMPLOYEE
WHERE DNAME = ‘Research’ AND DNUMBER = DNO

η οποία εµφανίζει το ονοµατεπώνυµο και τη διεύθυνση όλων των υπαλλήλων που


εργάζονται στο Research Department. Στο ερώτηµα αυτό, τα πεδία που θα ανακτή-
σουµε ανήκουν στον πίνακα EMPLOYEE, αλλά το πεδίο DNAME που περιλαµβά-
νεται στην πρόταση WHERE, ανήκει στον πίνακα DEPARTMENT. Αυτό σηµαίνει
πως στη σύνταξη της εντολής, θα εµφανιστούν και οι δύο πίνακες. Λόγω της εµφάνι-
σης περισσότερων από ένα πινάκων, δεν αρκεί µόνο ο καθορισµός του κριτηρίου
επιλογής, αλλά θα πρέπει να συµπεριλάβουµε στο εν λόγω ερώτηµα και τα κοινά
πεδία των δύο πινάκων τα οποία συσχετίζονται µεταξύ τους. Για το λόγο αυτό, στην
πρόταση WHERE, εκτός από το κριτήριο επιλογής DNAME = ‘Research’,
καθορίζουµε και τη συνθήκη σύζευξης που είναι η DNUMBER = DNO.

Οι δύο αυτές συνθήκες, θα πρέπει να ικανοποιούνται ταυτόχρονα – και αυτό


πραγµατοποιείται, δια της χρήσης του λογικού τελεστή AND. Η χρήση των άλλων
λογικών τελεστών OR και NOT είναι επίσης δυνατή, ενώ στη συνθήκη καθορισµού
των κριτηρίων αναζήτησης µπορούµε να χρησιµοποιήσουµε και όλους τους τελεστές
σύγκρισης που είχαµε αναλύσει στο προηγούµενο κεφάλαιο. Έτσι για να βρούµε ό-
λους τους υπαλλήλους που έχουν µισθό µεγαλύτερο από 30000, θα πρέπει στην πρό-
ταση WHERE να συµπεριλάβουµε τη συνθήκη SALARY > 30000.

Σε περιπτώσεις κατά της οποίες υπάρχουν πεδία που ανήκουν σε διαφορετι-


κούς πίνακες, αλλά φέρουν το ίδιο όνοµα, το ερώτηµα χαρακτηρίζεται από κάποιο
βαθµό ασάφειας, όσον αφορά τον πίνακα στον οποίο ανήκει το κάθε πεδίο. Για να
αναδείξουµε αυτή την ασάφεια, ας υποθέσουµε πως στον πίνακα EMPLOYEE, το
πεδίο που περιέχει τον κωδικό του τµήµατος στον οποίο εργάζεται, δεν ονοµάζεται
DNO, αλλά DNUMBER, έχει δηλαδή το ίδιο όνοµα µε το αντίστοιχο πεδίο του πίνα-
κα DEPARTMENT. Στην περίπτωση αυτή η πρόταση WHERE του προηγούµενου
ερωτήµατος θα λάβει τη µορφή

WHERE DNAME = ‘Research’ AND DNUMBER = DNUMBER

η οποία ασφαλώς περιέχει µεγάλο ποσοστό απροσδιοριστίας, καθώς δεν αποσαφηνί-


ζει σε ποιο πίνακα ανήκει το κάθε ένα από τα δύο πεδία DNUMBER. Για να αποµα-
κρύνουµε αυτή την ασάφεια, θα πρέπει να αναφερθούµε στα πεδία των πινάκων,
χρησιµοποιώντας ένα πιο πλήρη τρόπο σύνταξης που έχει τη µορφή

TABLE_NAME.ATTRIBUTE_NAME

περιλαµβάνει δηλαδή, τον καθορισµό, όχι µόνο του ονόµατος του πεδίου, αλλά και το
όνοµα του πίνακα στον οποίο ανήκει το εν λόγω πεδίο. Έτσι η ασάφεια που χαρακτη-
ρίζει το προηγούµενο ερώτηµα, αίρεται, εάν το επαναδιατυπώσουµε στη µορφή

SELECT FNAME, LNAME, ADDRESS


FROM EMPLOYEE
WHERE DNAME = ‘Research’ AND
DEPARTMENT.DNUMBER = EMPLOYEE.DNUMBER

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 100

Μια ακόµη ιδιάζουσα περίπτωση που αξίζει να αναφερθεί, αφορά την εµφά-
νιση της ασάφειας µε τον τρόπο που την ορίσαµε παραπάνω, όχι όσον αφορά τα πε-
δία των πινάκων, αλλά όσον αφορά τους ίδιους τους πίνακες. Χαρακτηριστικό παρά-
δειγµα αυτής της περίπτωσης είναι οι αναδροµικές συσχετίσεις (recursive
relationships) που υφίστανται ανάµεσα σε δύο αντίγραφα του ίδιου πίνακα. Αυτό
π.χ. συµβαίνει στην περίπτωση κατά την οποία θέλουµε για κάθε υπάλληλο, να ανα-
κτήσουµε το ονοµατεπώνυµό του, καθώς και το ονοµατεπώνυµο του MANAGER
που τον εποπτεύει. Επειδή όµως και ο MANAGER είναι και ο ίδιος ένας υπάλλη-
λος, και εποµένως τα προσωπικά του στοιχεία βρίσκονται και αυτά αποθηκευµένα
στον πίνακα EMPLOYEE, θα πρέπει στη σύνταξη του ερωτήµατος, να χρησιµο-
ποιήσουµε δύο φορές τον πίνακα EMPLOYEE, µε αποτέλεσµα την εµφάνιση α-
προσδιοριστίας όσον αφορά τον ακριβή ρόλο του κάθε αντιγράφου του πίνακα κατά
την εκτέλεση του παραπάνω ερωτήµατος.

Η άρση της απροσδιοριστίας στην περίπτωση αυτή, λαµβάνει χώρα δια της
χρήσης για κάθε αντίγραφο του πίνακα και ενός διαφορετικού ονόµατος. Αυτό το ό-
νοµα δεν επηρεάζει τις ιδιότητες του πίνακα, αλλά πρόκειται απλά για ένα ψευδώνυ-
µο (alias). Έτσι, το παραπάνω ερώτηµα θα διατυπωθεί µε τη µορφή

SELECT E.FNAME, E.LNAME, S.FNAME, F.LNAME


FROM EMPLOYEE E S
WHERE E.SUPERSSN = S.SSN

στην οποία έχουµε ορίσει για κάθε αντίγραφο του πίνακα EMPLOYEE και ένα δια-
φορετικό ψευδώνυµο. Πιο συγκεκριµένα, το ψευδώνυµο E, αναφέρεται στον πίνακα
EMPLOYEE µε το ρόλο του υπαλλήλου, ενώ το ψευδώνυµο S, αναφέρεται στον
πίνακα EMPLOYEE µε το ρόλο του επόπτη. Στην περίπτωση αυτή αίρεται κάθε
µορφή απροσδιοριστίας όσον αφορά τον τρόπο ερµηνείας του παραπάνω ερωτήµα-
τος, καθώς το κάθε αντίγραφο του πίνακα παίζει πλέον το δικό του ρόλο ο οποίος εί-
ναι διακριτός και πλήρως ορισµένος.

Στην περίπτωση κατά την οποία καλέσουµε την εντολή SELECT χωρίς την
πρόταση WHERE, το αποτέλεσµα που θα λάβουµε θα περιλαµβάνει όλες τις εγγρα-
φές του πίνακα, καθώς δεν καθορίζουµε κάποιο συγκεκριµένο κριτήριο αναζήτησης.
Για παράδειγµα, εάν γράψουµε

SELECT FNAME, LNAME


FROM EMPLOYEE

θα λάβουµε τα ονοµατεπώνυµα όλων των υπαλλήλων της εταιρείας, ενώ για να λά-
βουµε όλα τα πεδία της κάθε εγγραφής, θα χρησιµοποιήσουµε τον τελεστή «*». Έτσι
η εντολή

SELECT *
FROM EMPLOYEE
WHERE DNO = 5

θα επιστρέψει όλα τα πεδία των υπαλλήλων της εταιρείας, για τους οποίους ο κωδι-
κός του τµήµατος στο οποίο απασχολούνται έχει την τιµή 5.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 101

Η παράµετρος DISTINCT: Σε αντίθεση µε τη σχεσιακή άλγεβρα όπου οι πί-


νακες διαπραγµατεύονται ως σύνολα από πλειάδες, η γλώσσα SQL δεν ακολουθεί
αυτή την προσέγγιση, και δεν διαγράφει από µόνη της τις διπλοεγγραφές που ενδέ-
χεται να εµφανιστούν στο τελικό αποτέλεσµα. Εάν για παράδειγµα χρησιµοποιήσου-
µε την εντολή

SELECT SALARY
FROM EMPLOYEE

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

SELECT DISTINCT SALARY


FROM EMPLOYEE

Στον επόµενο πίνακα παρουσιάζουµε το αποτέλεσµα των παραπάνω εντολών,


προκειµένου να γίνει καλύτερα κατανοητός, ο τρόπος λειτουργίας της DISTINCT.

SALARY SALARY
30000 30000
40000 40000
25000 25000
43000 43000
38000 38000
25000 55000
25000
55000

Στον παραπάνω πίνακα η αριστερή στήλη περιέχει το αποτέλεσµα της εντολής


χωρίς τη χρήση της παραµέτρου DISTINCT, η οποία χρησιµοποιείται στη δεύτερη
περίπτωση. Όπως φαίνεται από τα περιεχόµενα των πινάκων, η χρήση της
DISTINCT αποµακρύνει τις τιµές που εµφανίζονται περισσότερες από µιας φορά, µε
αποτέλεσµα το σύνολο των τιµών που επιστρέφεται από τη SELECT να είναι πλέον
διακριτό, και να περιλαµβάνει µόνο διαφορετικές τιµές.

Η παράµετρος UNION: σε ορισµένες εκδόσεις της SQL υποστηρίζεται η ε-


φαρµογή επί των πινάκων της βάσης των πράξεων που εφαρµόζονται ανάµεσα σε
σύνολα. Στην περίπτωση αυτή, οι πίνακες διαπραγµατεύονται ως σύνολα από πλειά-
δες, µε αποτέλεσµα τη διαγραφή των διπλοεγγραφών εάν αυτές εµφανιστούν. Υ-
πενθυµίζουµε από τη θεωρία της σχεσιακής άλγεβρας πως για να είναι δυνατή η ε-
φαρµογή των πράξεων από τη θεωρία συνόλων πάνω στους πίνακες της βάσης – οι
πράξεις αυτές είναι η ένωση (UNION), η τοµή (INTERSECTION) και η διαφορά
(DIFFERENCE) – θα πρέπει οι πίνακες να είναι συµβατοί ως προς την ένωση
(union compatible), δηλαδή να έχουν το ίδιο πλήθος πεδίων, και τα αντίστοιχα πε-
δία των πινάκων να έχουν το ίδιο σύνολο τιµών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 102

Ως παράδειγµα εφαρµογής της ένωσης δύο πινάκων, θα επαναδιατυπώσουµε


σε γλώσσα SQL ένα από τα παραδείγµατα του προηγούµενου κεφαλαίου και πιο συ-
γκεκριµένα εκείνο που ζητούσε να ανακτηθούν οι κωδικοί των PROJECTS στα ο-
ποία δουλεύει ο υπάλληλος µε το επώνυµο Smith, τόσο ως εργαζόµενος όσο και ως
MANAGER κάποιου τµήµατος. Για να απαντήσουµε σε αυτό το ερώτηµα, θα πρέπει
να βρούµε τους κωδικούς των PROJECTS στα οποία ο Smith συµµετέχει ως εργα-
ζόµενος και τους κωδικούς των PROJECTS στα οποία ο Smith συµµετέχει ως
MANAGER, οπότε, το τελικό αποτέλεσµα θα αποτελείται από την ένωση των δύο
συνόλων. Έτσι, το ερώτηµα αυτό σε γλώσσα SQL θα διατυπωθεί ως εξής:

SELECT PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN = SSN AND
LNAME = ‘Smith’
UNION
SELECT PNUMBER
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER = PNO AND ESSN = SSN AND
LNAME = ‘Smith’

Σύνολα τιµών και φωλιασµένα ερωτήµατα (nested queries): Σε ορισµένες


περιπτώσεις, είναι δυνατή η χρήση στην πρόταση WHERE ενός συνόλου (set), από
το οποίο θα πρέπει να παίρνει τιµές, κάποιο από τα πεδία του πίνακα. Εάν για παρά-
δειγµα ζητούµε τους κωδικούς SSN των υπαλλήλων που εργάζονται στα
PROJECTS µε κωδικό 1, 2 ή 3, µπορούµε να γράψουµε το ερώτηµα µε τη µορφή

SELECT DISTINCT ESSN


FROM WORKS_ON
WHERE PNUMBER = 1 OR PNUMBER = 2 OR
PNUMBER = 3

Εναλλακτικά, µπορούµε να χρησιµοποιήσουµε τη σύνταξη

SELECT DISTINCT ESSN


FROM WORKS_ON
WHERE PNUMBER IN (1, 2, 3)

Στην παραπάνω σύνταξη ο τελεστής σύγκρισης (comparison operator) IN,


συγκρίνει την τιµή του πεδίου πάνω στο οποίο εφαρµόζεται µε όλες τις τιµές του συ-
νόλου, και επιστρέφει την τιµή TRUE, εάν διαπιστώσει ταύτιση µε κάποια από αυτές
τις τιµές.

Είναι προφανές πως στη γενική περίπτωση είναι πρακτικά δύσκολο να χρησι-
µοποιήσουµε ένα σύνολο τιµών µε τον τρόπο που το κάναµε παραπάνω. Αυτό συµ-
βαίνει διότι αφ’ ενός δεν µπορούµε να γνωρίζουµε τις τιµές που θα περιλαµβάνο-
νται σε αυτό, έτσι ώστε να τις παραθέσουµε τη µία µετά την άλλη, και αφ’ ετέρου,
αυτές οι τιµές ενδέχεται να αλλάξουν στο µέλλον, καθώς η βάση χαρακτηρίζεται
από συνεχή εισαγωγή, διαγραφή και τροποποίηση εγγραφών. Για το λόγο αυτό,

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 103

δεν καταχωρούµε απευθείας αυτές τις τιµές, αλλά τις ανακτούµε µε µία πρόταση
SELECT την οποία διαβιβάζουµε ως παράµετρο στον τελεστή σύγκρισης IN. Με τον
τρόπο αυτό καλούµε την εντολή SELECT µέσα από κάποια άλλη SELECT, κάτι
που έχει ως αποτέλεσµα τη δηµιουργία των επονοµαζόµενων φωλιασµένων ερωτη-
µάτων (nested queries). Η εντολή SELECT που χρησιµοποιείται µαζί µε τον τελε-
στή σύγκρισης IN στην πρόταση WHERE, ονοµάζεται εσωτερικό ερώτηµα (inner
query), ενώ η SELECT µέσα από την οποία καλείται το εσωτερικό ερώτηµα, ονοµά-
ζεται εξωτερικό ερώτηµα (outer query). Χρησιµοποιώντας φωλιασµένα ερωτήµα-
τα, το παραπάνω παράδειγµα που ζητούσε τους κωδικούς των PROJECTS στα οποία
ο Smith συµµετέχει τόσο ως εργαζόµενος, όσο και ως MANAGER, µπορεί να επα-
ναδιατυπωθεί ως εξής:

SELECT DISTINCT PNAME


FROM PROJECT
WHERE PNUMBER IN (
SELECT PNUMBER
FROM PROJECT, DEPARTMENT
EMPLOYEE
WHERE DNUM = DNUMBER AND
MGRSSN = SSN AND
LNAME = ‘Smith’ )
OR
PNUMBER IN (
SELECT PNO
FROM WORKS_ON, EMPLOYEE
WHERE ESSN = SSN AND
LNAME = ‘Smith’ )

Εκείνο που κάνουµε στην παραπάνω εντολή είναι να βρούµε το σύνολο των
κωδικών των PROJECTS στα οποία ο Smith συµµετέχει τόσο ως εργαζόµενος όσο
και ως MANAGER, και στη συνέχεια χρησιµοποιώντας τον λογικό τελεστή OR να
ενώσουµε στην ουσία αυτά τα σύνολα. Επειδή δεν είναι δυνατόν να γνωρίζουµε σε
κάθε χρονική στιγµή τις τιµές αυτών των συνόλων, τις ανακτούµε µε δύο φωλιασµέ-
νες SELECT, έτσι ώστε σε κάθε περίπτωση τα σύνολα αυτά, να περιέχουν τις σω-
στές τιµές.

Μιλώντας γενικά, µπορούµε να έχουµε όσες φωλιασµένες SELECT θέλουµε,


τη µία µέσα στην άλλη. Σε περιπτώσεις δε, κατά τις οποίες υπάρχει κάποια ασάφεια
όσον αφορά τα ονόµατα των πεδίων ή των πινάκων που περιλαµβάνονται στο ερώτη-
µα, µπορούµε να χρησιµοποιήσουµε ψευδώνυµα (aliases) για αυτούς τους πίνακες,
µε τον τρόπο που έχουµε περιγράψει στα προηγούµενα παραδείγµατα. Ας θεωρήσου-
µε π.χ. το ερώτηµα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 104

SELECT E.FNAME , E.LNAME


FROM EMPLOYEE E
WHERE E.SSN IN (
SELECT ESSN
FROM DEPENDENT
WHERE ESSN = E.SSN AND
E.FNAME = DEPENDENT_NAME
AND SEX = E.SEX )

το οποίο επιστρέφει το όνοµα και το επώνυµο κάθε υπαλλήλου, που έχει ένα προ-
στατευόµενο µέλος µε το ίδιο όνοµα και το ίδιο φύλλο µε το δικό του. Επειδή ο
πίνακας EMPLOYEE εµφανίζεται τόσο στο εσωτερικό όσο και στο εξωτερικό ε-
ρώτηµα, θα πρέπει αφ ενός µεν, να δηµιουργήσουµε ένα ψευδώνυµό του, Ε, έτσι ώ-
στε να καταστήσουµε διακριτό το ρόλο των δύο αντιγράφων του, αφ ετέρου δε, να
χρησιµοποιήσουµε τον πλήρη τρόπο σύνταξης κάθε φορά που χρησιµοποιούµε κά-
ποιο πεδίο, έτσι ώστε να ξέρουµε σε ποιο πίνακα αναφέρεται.

Ολοκληρώνουµε την περιγραφή των φωλιασµένων SELECT στη γλώσσα


SQL, µε την περιγραφή των παραµέτρων EXISTS και NOT EXISTS, οι οποίες χρη-
σιµοποιούνται για να ελέγξουν εάν κάποιο φωλιασµένο ερώτηµα έχει επιστρέψει
πλειάδες ή όχι. Εάν η εσωτερική SELECT έχει επιστρέψει πλειάδες οι οποίες θα
χρησιµοποιηθούνε από το εξωτερικό ερώτηµα, η παράµετρος EXISTS θα επιστρέψει
την τιµή TRUE, ενώ στην αντίθετη περίπτωση θα επιστρέψει την τιµή FALSE. Ε-
ντελώς ανάλογος είναι και ο ρόλος της NOT EXISTS η οποία για τις δύο παραπάνω
περιπτώσεις θα επιστρέψει τις τιµές FALSE και TRUE αντίστοιχα.

Για να κατανοήσουµε καλύτερα τη λειτουργία αυτών των δύο παραµέτρων, ας


θεωρήσουµε το επόµενο ερώτηµα : έστω ότι θέλουµε να βρούµε τα ονοµατεπώνυ-
µα όλων των υπαλλήλων της εταιρείας που δεν έχουν προστατευόµενα µέλη. Η
εντολή SELECT που θα απαντήσει σε αυτό το ερώτηµα, έχει τη µορφή

SELECT LNAME, FNAME


FROM EMPLOYEE
WHERE NOT EXISTS (
SELECT *
FROM DEPENDENT
WHERE SSN = ESSN )

Σε αυτό το ερώτηµα, η εσωτερική SELECT, επιστρέφει όλες τις πλειάδες του


πίνακα DEPENDENT που συσχετίζονται µε κάποιο από τους υπαλλήλους της εται-
ρείας. Εάν αυτή η SELECT δεν επιστρέψει καµία πλειάδα, αυτό σηµαίνει πως ο υ-
πάλληλος αυτός δεν έχει προστατευόµενα µέλη, και εποµένως ικανοποιεί τη συν-
θήκη για αυτό το ερώτηµα – µε τον τρόπο αυτό µπορούµε τελικά να ανακτήσουµε
όλους τους υπαλλήλους που χαρακτηρίζονται από αυτή την ιδιότητα. Εντελώς ανάλο-
γη είναι και η χρήση της παραµέτρου EXISTS.

Αθροιστικές συναρτήσεις (aggregate functions) : όπως έχει ήδη αναφερθεί


στο προηγούµενο κεφάλαιο, σε ένα σχεσιακό σχήµα βάσεων δεδοµένων, υπάρχει η
δυνατότητα να εφαρµόσουµε πάνω στα δεδοµένα των πινάκων, ένα σύνολο συναρτή-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 105

σεων οι οποίες επιστρέφουν κάποιες τιµές. Στη γλώσσα SQL οι συναρτήσεις αυτές
είναι η COUNT η οποία επιστρέφει το πλήθος των εγγραφών ενός πίνακα ή το
πλήθος κάποιων τιµών ανάλογα µε τον τρόπο µε τον οποίο καλείται, η MIN και η
MAX οι οποίες επιστρέφουν την ελάχιστη και τη µέγιστη τιµή κάποιου συνόλου, η
SUM που επιστρέφει το άθροισµα κάποιων τιµών, και η AVG που επιστρέφει το
µέσο όρο τους. Στις επόµενες παραγράφους παρουσιάζουµε κάποια παραδείγµατα
που θα µας επιτρέψουν να κατανοήσουµε τον τρόπο µε τον οποίο χρησιµοποιούνται
αυτές οι συναρτήσεις µέσα από τη γλώσσα χειρισµού δεδοµένων.

1) Να βρεθεί το άθροισµα των µισθών όλων των υπαλλήλων που δουλεύ-


ουν στο Research Department, καθώς επίσης ο µεγαλύτερος και ο µικρότερος µι-
σθός και ο µέσος όρος τους

SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY),


AVG (SALARY)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO = DNUMBER AND DNAME = “Research”.

2) Να βρεθεί το πλήθος των υπαλλήλων που δουλεύουν στο Research


Department

SELECT COUNT (*)


FROM EMPLOYEE, DEPARTMENT
WHERE DNO = DNUMBER AND DNAME = “Research”.

3) Να ανακτηθεί το όνοµα και το επώνυµο των υπαλλήλων της εταιρείας


που έχουν περισσότερα από δύο προστατευόµενα µέλη.

SELECT LNAME, FNAME


FROM EMPLOYEE
WHERE ( SELECT COUNT (*)
FROM DEPENDENT
WHERE SSN=ESSN ) ≥ 2

Οι παράµετροι GROUP BY και HAVING: Σε ορισµένες περιπτώσεις, επιθυ-


µούµε την εφαρµογή των αθροιστικών συναρτήσεων, όχι σε όλες τις πλειάδες του
πίνακα, αλλά µόνο σε ένα σύνολο από αυτές, οι οποίες έχουν ένα κοινό χαρακτηρι-
στικό, Ας υποθέσουµε για παράδειγµα πως για κάθε τµήµα της εταιρείας ζητούµε
να ανακτήσουµε το πλήθος των υπαλλήλων που εργάζονται σε αυτό, καθώς και
το µέσο όρο των µισθών τους. Στην περίπτωση αυτή είναι προφανές πως θα πρέπει
να οµαδοποιήσουµε τις εγγραφές των υπαλλήλων µε κριτήριο τον κωδικό του
τµήµατος στο οποίο απασχολούνται, και στη συνέχεια να εφαρµόσουµε τις αθροι-
στικές συναρτήσεις, σε κάθε µια από αυτές τις οµάδες. Το σύνολο των πεδίων ως
προς τα οποία θα λάβει χώρα αυτή η οµαδοποίηση (grouping attributes) πρέπει υπο-
χρεωτικά να είναι ανάµεσα στα πεδία που θα επιστρέψει η SELECT έτσι ώστε να
γνωρίζουµε σε ποιο πεδίο αναφέρεται η κάθε µια από τις εγγραφές που θα εµφανι-
στούν στο τελικό αποτέλεσµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 106

Χαρακτηριστικό παράδειγµα χρήσης της παραµέτρου GROUP BY είναι το


ερώτηµα

SELECT DNO, COUNT (*), AVG (SALARY)


FROM EMPLOYEE
GROUP BY DNO

που για κάθε τµήµα της εταιρείας, επιστρέφει τον κωδικό του, το πλήθος των υπαλ-
λήλων που εργάζονται σε αυτό, και το µέσο όρο των µισθών τους.

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως σε περιπτώσεις κατά τις
οποίες τα δεδοµένα που θέλουµε να ανακτήσουµε ανήκουν σε δύο ή περισσότερους
πίνακες, η παράµετρος GROUP BY θα κληθεί µετά την πράξη της σύζευξης των δύο
πινάκων. Ας θεωρήσουµε για παράδειγµα το ερώτηµα

SELECT PNUMBER, PNAME, COUNT (*)


FROM PROJECTS, WORKS_ON
WHERE PNUMBER = PNO
GROUP BY PNUMBER, PNAME

που για κάθε PROJECT της εταιρείας, επιστρέφει τον κωδικό του, το όνοµά του,
καθώς και το πλήθος των υπαλλήλων που εργάζονται σε αυτό. Επειδή στην περί-
πτωση αυτή θα λάβει χώρα συσχέτιση πληροφορίας από δύο διαφορετικούς πίνακες,
θα πρέπει να χρησιµοποιηθεί η πράξη της σύζευξης (join) που στην προκειµένη πε-
ρίπτωση θα συσχετίσει το πεδίο PNUMBER του πίνακα PROJECT, µε το πεδίο
PNO του πίνακα WORKS_ON. Έτσι, η οµαδοποίηση των εγγραφών µε βάση τον
κωδικό και το όνοµα του PROJECT, θα πρέπει να εφαρµοσθεί πάνω στο αποτέλε-
σµα της σύζευξης των δύο πινάκων, κάτι που σηµαίνει πως η παράµετρος GROUP
BY θα χρησιµοποιηθεί τελευταία.

Επιπλέον, είναι πιθανό να µην επιθυµούµε την εφαρµογή των αθροιστικών


συναρτήσεων, πάνω σε όλες τις οµάδες εγγραφών που οποίες προκύπτουν δια της
χρήσης της παραµέτρου GROUP BY, αλλά µόνο πάνω σε εκείνες που πληρούν
κάποια συγκεκριµένη συνθήκη. Στην περίπτωση κατά την οποία είµαστε υποχρεω-
µένοι να διαλέξουµε αυτές τις οµάδες, µπορούµε να χρησιµοποιήσουµε την παράµε-
τρο HAVING συνοδευόµενη από κάποια συνθήκη επιλογής. Ας υποθέσουµε για
παράδειγµα ότι ζητούµε το όνοµα και τον κωδικό του PROJECT καθώς και το πλή-
θος των υπαλλήλων που εργάζονται σε αυτό, όχι όµως για όλα τα PROJECTS, αλλά
µόνο για εκείνα στα οποία εργάζονται περισσότεροι από δύο υπάλληλοι. Στην
περίπτωση αυτή θα επαναδιατυπώσουµε το προηγούµενο ερώτηµα, ως εξής :

SELECT PNUMBER, PNAME, COUNT (*)


FROM PROJECTS, WORKS_ON
WHERE PNUMBER = PNO
GROUP BY PNUMBER, PNAME
HAVING COUNT (*) > 2.

Η διαφορά ανάµεσα στα τελευταία δύο ερωτήµατα, έχει να κάνει µε το πλή-


θος των οµάδων εγγραφών που θα περιλαµβάνοντα στο τελικό αποτέλεσµα. Και

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 107

στις δύο περιπτώσεις, θα λάβει χώρα η σύζευξη ανάµεσα στους πίνακες, καθώς και
η οµαδοποίηση των πλειάδων του ενδιάµεσου πίνακα που θα προκύψει από τη
αυτή τη σύζευξη, µε κριτήριο τον κωδικό και το όνοµα του PROJECT. Η πρότα-
ση SELECT όµως δεν θα επιστρέψει όλες τις εγγραφές αλλά µόνο εκείνες που αντι-
στοιχούν σε πλήθος υπαλλήλων µεγαλύτερο του 2. Εποµένως η παράµετρος
HAVING επιτρέπει την επιλογή συγκεκριµένων οµάδων εγγραφών.

Τέλος, ιδιαίτερη προσοχή απαιτείται σε περιπτώσεις κατά τις οποίες υπάρχουν


δύο συνθήκες επιλογής, µια στην πρόταση SELECT, και µια στην παράµετρο
HAVING. Έστω για παράδειγµα ότι για κάθε τµήµα, ζητούµε το πλήθος των υπαλ-
λήλων που εργάζονται σε αυτό και έχουν µισθό µεγαλύτερο από 40000, αλλά την
πληροφορία αυτή τη θέλουµε µόνο για εκείνα τα τµήµατα στα οποία εργάζονται
περισσότεροι από 5 υπάλληλοι. Στην περίπτωση αυτή έχουµε δύο συνθήκες – τη
συνθήκη SALARY > 40000 που αναφέρεται στους µισθούς των υπαλλήλων, και τη
συνθήκη COUNT (*) > 5 – που αναφέρεται στο πλήθος των υπαλλήλων που δουλεύ-
ουν σε κάθε τµήµα. Η σωστή απάντηση σε αυτό το ερώτηµα έχει τη µορφή

SELECT DNAME, COUNT (*)


FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER = DNO AND
SALARY > 40000 AND
DNO IN (
SELECT DNO
FROM EMPLOYEE
GROUP BY DNO
HAVING COUNT (*) > 5 )
GROUP BY DNAME

Συγκρίσεις ανάµεσα σε συµβολοσειρές, αριθµητικοί τελεστές, και ταξινό-


µηση εγγραφών: Σε ορισµένα συστήµατα διαχείρισης βάσεων δεδοµένων, υπάρχει η
δυνατότητα να καθορίσουµε κριτήρια αναζήτησης στην πρόταση WHERE που να
περιλαµβάνουν συγκρίσεις ανάµεσα σε συµβολοσειρές. Μια συµβολοσειρά ορίζε-
ται ως ένα σύνολο χαρακτήρων – όπως είναι για παράδειγµα ένα επώνυµο ή µια δι-
εύθυνση. Σε µια εντολή SELECT, η πρόταση WHERE επιτρέπει τη σύγκριση ανά-
µεσα σε τµήµατα συµβολοσειρών δια της χρήσης της παραµέτρου LIKE. Η LIKE
δέχεται ως όρισµα ένα τµήµα συµβολοσειράς, και το διαβιβάζει στην πρόταση
WHERE η οποία συγκρίνει αυτό το τµήµα µε την τιµή του αντίστοιχου πεδίου, και
επιστρέφει µόνο εκείνες τις εγγραφές, οι οποίες ικανοποιούν τη συνθήκη επιλογής.

Επειδή η LIKE συγκρίνει τµήµατα συµβολοσειρών, θα πρέπει µε κάποιο


τρόπο να καθορίσουµε, σε ποιο τµήµα της συµβολοσειράς αναφέρεται το όρισµά
της. Για να το κάνουµε αυτό, µπορούµε να χρησιµοποιήσουµε τα ειδικά σύµβολα
«%» και «_» εκ των οποίων το πρώτο αναφέρεται σε ένα αυθαίρετο πλήθος χαρα-
κτήρων, ενώ το δεύτερο σε ένα απλό χαρακτήρα. Εάν για παράδειγµα θέλουµε να
ανακτήσουµε όλους τους υπαλλήλους της εταιρείας των οποίων η διεύθυνση περι-
λαµβάνει τη λέξη Houston, µπορούµε να χρησιµοποιήσουµε την εντολή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 6 : SQL 108

SELECT FNAME, LNAME


FROM EMPLOYEE
WHERE ADDRESS LIKE ‘%HOUSTON%’

Η εντολή αυτή επιστρέφει όλους τους υπαλλήλους της εταιρείας, η διεύθυνση


των οποίων περιέχει τη συµβολοσειρά «HOUSTON». Τα σύµβολα «%» που υπάρ-
χουν πριν και µετά τη συµβολοσειρά, υποδηλώνουν πως πριν και µετά τη λέξη
HOUSTON µπορεί να βρίσκεται ένα αυθαίρετο πλήθος χαρακτήρων – το µόνο
πράγµα που ενδιαφέρει την εντολή είναι η ύπαρξη ή όχι της συµβολοσειράς
HOUSTON µέσα στην τιµή της διεύθυνσης για κάθε υπάλληλο.

Σε περιπτώσεις κατά τις οποίες θέλουµε να αναφερθούµε σε συγκεκριµένο


χαρακτήρα µέσα στη συµβολοσειρά, µπορούµε να χρησιµοποιήσουµε το σύµβολο
«_». Ας υποθέσουµε για παράδειγµα πως θέλουµε να ανακτήσουµε όλους τους εργα-
ζόµενους που έχουν γεννηθεί τη δεκαετία του 1950. Εάν λάβουµε υπ΄ όψιν το φορ-
µαλισµό που χρησιµοποιούµε για να καταχωρήσουµε τις ηµεροµηνίες – µια τυπική
ηµεροµηνία είναι π.χ. η 12/6/1957 – δεν είναι δύσκολο να διαπιστώσουµε πως οι ερ-
γαζόµενοι που έχουν γεννηθεί το παραπάνω χρονικό διάστηµα, θα έχουν ως όγδοο
ψηφίο στην τιµή της ηµεροµηνίας γέννησής τους, τον αριθµό 5. Εποµένως µπο-
ρούµε να επαναδιατυπώσουµε το παραπάνω ερώτηµα, ζητώντας από τη βάση να µας
επιστρέψει όλους τους εργαζόµενους, η ηµεροµηνία γέννησης των οποίων, έχει ο-
ποιαδήποτε τιµή σε όλα τα ψηφία της, µε εξαίρεση το όγδοο ψηφίο, το οποίο θα
πρέπει υποχρεωτικά να έχει την τιµή 5. Η εντολή που περιγράφει αυτό το ερώτηµα,
έχει τη µορφή

SELECT LNAME, FNAME


FROM EMPLOYEE
WHERE BDATE LIKE ‘_ _ _ _ _ _ _ 5 _’

Με άλλα λόγια το σύµβολο «_» αντικαθιστά ένα χαρακτήρα κάθε φορά, ενώ
το σύµβολο «%», αντικαθιστά ένα σύνολο χαρακτήρων, αυθαίρετου µεγέθους.

Ένα άλλο ενδιαφέρον χαρακτηριστικό που συναντάται σε πολλές εκδόσεις της


γλώσσας χειρισµού δεδοµένων, είναι η δυνατότητα χρήσης αριθµητικών τελεστών,
µέσα στην πρόταση SELECT. Τυπικό παράδειγµα µιας τέτοιας περίπτωσης είναι το
ερώτηµα

SELECT FNAME, LNAME, 1.1*SALARY


FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN = ESSN AND PNO = PNUMBER AND
PNAME = ‘ProductX’

που για όλους τους υπαλλήλους που εργάζονται στο PROJECT µε όνοµα ProductX,
επιστρέφει το όνοµά τους, το επώνυµό τους, και το µισθό τους αυξηµένο κατά
10%. Με τον ίδιο τρόπο µπορούµε να χρησιµοποιήσουµε και τους αριθµητικούς τε-
λεστές «+», «–» και «/».

Τέλος, εάν το επιθυµούµε, µπορούµε να εµφανίσουµε τις εγγραφές των πινά-


κων που επιστρέφονται από ένα ερώτηµα, όχι µε τη σειρά µε την οποία είναι καταχω-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 109

ρηµένες στους πίνακες της βάσης, αλλά ταξινοµηµένες, κατά αύξουσα ή κατά φθί-
νουσα ταξινόµηση. Για να το κάνουµε αυτό θα χρησιµοποιήσουµε την παράµετρο
ORDER BY συνοδευόµενη από τα πεδία ως προς τα οποία θέλουµε να λάβει χώρα
αυτή η ταξινόµηση. Εάν δεν καθορίσουµε κάποιο είδος ταξινόµησης, τα αποτελέσµα-
τα του ερωτήµατος θα ταξινοµηθούν κατά αύξουσα σειρά. Έτσι η εντολή

SELECT DNAME, LNAME, FNAME, PNAME


FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT
WHERE DNUMBER = DNO AND SSN = ESSN AND
PNO = PNUMBER
ORDER BY DNAME, LNAME, FNAME

θα επιστρέψει τα ονόµατα των υπαλλήλων, των τµηµάτων στα οποία εργάζονται,


και των έργων στα οποία απασχολούνται, ταξινοµηµένων κατά αύξουσα σειρά,
ως προς το όνοµα του τµήµατος, το επώνυµο του υπαλλήλου, και το όνοµα του
υπαλλήλου. Αντίθετα εάν χρησιµοποιήσουµε την ORDER BY µε τη µορφή

ORDER BY DNAME DESC, LNAME ASC, FNAME ASC

τότε η ταξινόµηση ως προς το όνοµα του τµήµατος θα γίνει κατά φθίνουσα σειρά,
ενώ η ταξινόµηση ως προς το επώνυµο και το όνοµα του υπαλλήλου, θα γίνει κατά
αύξουσα σειρά.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7
Εισαγωγή στη
Microsoft Access
Το κεφάλαιο αυτό περιλαµβάνει µια συνοπτική εισαγωγή
στην Microsoft Access 2000, που είναι και το σχεσιακό σύ-
στηµα διαχείρισης βάσεων δεδοµένων µε το οποίο θα ασχο-
ληθούµε. Αυτή η εισαγωγή αναφέρεται στις πιο σηµαντικές
συνιστώσες της εφαρµογής καθώς και στον τρόπο µε τον ο-
ποίο είναι δυνατή η διαχείριση µιας σχεσιακής βάσης δεδοµέ-
νων.

Η Microsoft Access είναι ένα από τα πιο δηµοφιλή προγράµµατα διαχείρι-


σης βάσεων δεδοµένων που κυκλοφορούν στην αγορά. Η µεγάλη διάδοσή της τα
τελευταία χρόνια, οφείλεται στην απλότητα και ευκολία στη χρήση της, καθώς και
στη δυνατότητά της να δηµιουργεί εφαρµογές διαχείρισης βάσεων δεδοµένων σε
σχετικά µικρό χρονικό διάστηµα. Από τα τρία µοντέλα βάσεων δεδοµένων που έ-
χουµε περιγράψει στο πρώτο κεφάλαιο, η Microsoft Access επιτρέπει τη δηµιουργία
βάσεων που στηρίζονται στο σχεσιακό µοντέλο (relational database model).

Ιστορικά, η Microsoft Access εµφανίστηκε στην αγορά στις αρχές της δεκαε-
τίας του 1990, όταν πλέον η τεχνολογία των βάσεων δεδοµένων είχε ωριµάσει, και η
κατασκευή ισχυρών επεξεργαστών και υπολογιστικών συστηµάτων, επέτρεπε τη µε-
ταφορά τέτοιων προγραµµάτων σε προσωπικούς υπολογιστές. Αυτό ήταν αδιανόητο
πριν από λίγα χρόνια, όπου, την ευθύνη διαχείρισης µεγάλων βάσεων δεδοµένων την
είχαν αποκλειστικά τα mainframes και τα µεγάλα συστήµατα. Γρήγορα η Access
γνώρισε πολύ µεγάλη επιτυχία, και σήµερα, µετά από δέκα και πλέον χρόνια, έχει
φτάσει στην πέµπτη έκδοσή της µε το όνοµα Microsoft Access 2000 που τρέχει κάτω
από τα λειτουργικά συστήµατα Windows Me και Windows 2000 – ας σηµειωθεί πως
πριν από λίγο καιρό κυκλοφόρησε και η Microsoft Access XP που τρέχει κάτω από
το λειτουργικό σύστηµα των Windows XP. Στις επόµενες σελίδες θα παρουσιάσουµε
τις βασικές συνιστώσες του προγράµµατος, καθώς και τον τρόπο µε τον οποίο είναι
δυνατή η διαχείριση µιας σχεσιακής βάσεως δεδοµένων µέσα από την εν λόγω ε-
φαρµογή.
Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 112

ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΗΣ MICROSOFT ACCESS

Ως ένα µοντέρνο σχεσιακό σύστηµα διαχείρισης βάσεων δεδοµένων (Rela-


tional Database Management System, RDBMS), η Microsoft Access, είναι εφο-
διασµένη µε όλα εκείνα τα χαρακτηριστικά που επιτρέπουν την εύκολη και αποτελε-
σµατική διαχείριση των δεδοµένων ενός πληροφοριακού συστήµατος. Αυτά τα δεδο-
µένα, σε πλήρη εφαρµογή των αρχών που διέπουν την αρχιτεκτονική του σχεσιακού
µοντέλου, είναι οργανωµένα σε πίνακες, οι οποίοι συσχετίζονται µεταξύ τους. Η δο-
µή αυτών των πινάκων καθώς και των συσχετίσεων που υφίστανται ανάµεσα στα πε-
δία τους, µπορεί να ορισθεί κατά τρόπο πλήρως συµβατό µε το µοντέλο οντοτήτων
συσχετίσεων που έχουµε δηµιουργήσει κατά το στάδιο του λογικού σχεδιασµού της
εφαρµογής. Αυτό σηµαίνει πως θα δηµιουργήσουµε πίνακες τόσο για τους τύπους
οντότητας που περιλαµβάνονται στο λογικό µοντέλο του συστήµατος, όσο και για
εκείνους τους τύπους συσχέτισης των οποίων η πολλαπλότητα είναι M:N. Μετά
τον καθορισµό της δοµής των πινάκων της βάσης, µπορεί να αρχίσει η διαδικασία
καταχώρησης δεδοµένων σε αυτούς, είτε απευθείας, είτε δια της χρήσης κατάλληλα
σχεδιασµένων φορµών, οι οποίες καθιστούν την εφαρµογή µας εύκολη και προσιτή
στον απλό χρήστη.

Η διαχείριση των δεδοµένων της εφαρµογής, αµέσως µετά την καταχώρησή


τους, µπορεί να γίνει χρησιµοποιώντας εντολές της γλώσσας SQL, η οποία υποστηρί-
ζεται πλήρως. Ο χρήστης έχει τη δυνατότητα να δηµιουργήσει µόνος του τα ερωτή-
µατα προς τη βάση γράφοντας κατευθείαν κώδικα σε SQL, αλλά εάν το επιθυµεί,
µπορεί να το κάνει µέσα από ένα εύχρηστο περιβάλλον αυτοµατοποιηµένης
δηµιουργίας ερωτηµάτων, το οποίο, ζητά από το χρήστη να καθορίσει τις
πληροφορίες που θέλει να ανακτήσει, και στη συνέχεια, δηµιουργεί τον κώδικα SQL
από µόνο του. Εφόσον ο χρήστης ανακτήσει τα αποτελέσµατα που θέλει, µπορεί στη
συνέχεια να τα εκτυπώσει δηµιουργώντας τις κατάλληλες σε κάθε περίπτωση
αναφορές – ας σηµειωθεί πως µε τον ίδιο τρόπο µπορεί να εκτυπώσει και τα
δεδοµένα ενός ολόκληρου πίνακα. Σε όλες σχεδόν τις περιπτώσεις η αλληλεπίδραση
του χρήστη µε το σύστηµα επιταχύνεται δια της χρήσης κατάλληλα σχεδιασµένων
µακροεντολών, ενώ σε περιπτώσεις κατά τις οποίες οι απαιτήσεις του δεν
καλύπτονται από όλες τις παραπάνω λειτουργίες, έχει τη δυνατότητα να γράψει ο
ίδιος τις δικές του υπορουτίνες αλληλεπίδρασης µε το σύστηµα, χρησιµοποιώντας τη
γλώσσα VBA (Visual Basic for Applications).

Από την παραπάνω περιγραφή, είναι προφανές, πως η Microsoft Access απο-
τελείται από ένα σύνολο συνιστωσών, οι οποίες σε γενικές γραµµές είναι οι ακόλου-
θες :

Πίνακες (Tables) : Όπως έχει ήδη αναφερθεί στην προηγούµενη παράγραφο,


οι πίνακες της βάσης περιέχουν τα δεδοµένα που καταχωρούνται σε αυτή, και
σύµφωνα µε το σχεσιακό µοντέλο, αποτελούνται από ένα πλήθος γραµµών (rows)
και στηλών (columns). Η κάθε γραµµή περιέχει τα δεδοµένα µιας εγγραφής
(record), ενώ οι στήλες του πίνακα αντιστοιχούν στα πεδία της εγγραφής, τα ο-
ποία ορίζουν και τη δοµή του κάθε πίνακα. Προκειµένου οι διάφορες εγγραφές του
πίνακα να διακρίνονται µεταξύ τους, επιλέγουµε κάποιο από τα πεδία του πίνακα και
το χαρακτηρίζουµε ως το πρωτεύον κλειδί του (primary key). Σύµφωνα µε τη θεω-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 113

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

Φόρµες (Forms) : Η βασική λειτουργία των φορµών σε µια εφαρµογή της


Microsoft Access, είναι η διευκόλυνση που παρέχουν στο χρήστη, όσον αφορά την
αλληλεπίδρασή του µε την εφαρµογή. Στις πιο πολλές περιπτώσεις, οι φόρµες χρησι-
µοποιούνται κατά τη διαδικασία εισαγωγής δεδοµένων, αλλά µιλώντας γενικά,
µπορούν να χρησιµοποιηθούν οπουδήποτε. Μια φόρµα αποτελείται από ένα πλήθος
στοιχείων αλληλεπίδρασης, δια τη χρήσης των οποίων είναι δυνατή η πραγµατοποί-
ηση των πιο σηµαντικών λειτουργιών που συσχετίζονται µε µια βάση δεδοµένων,
όπως είναι για παράδειγµα η εισαγωγή, διαγραφή, και τροποποίηση εγγραφών.
Περισσότερα στοιχεία για τις φόρµες και για τον τρόπο µε τον οποίο χρησιµοποιού-
νται, θα δοθούν στο οµώνυµο κεφάλαιο.

Ερωτήµατα (Queries) : Τα ερωτήµατα του χρήστη προς τη βάση προκειµέ-


νου να ανακτήσει δεδοµένα που χαρακτηρίζονται από κάποια συγκεκριµένα κριτήρια,
µπορούν να δηµιουργηθούν πάρα πολύ εύκολα χρησιµοποιώντας τον οδηγό ερωτη-
µάτων (query wizard) της Microsoft Access. Τα αποτελέσµατα αυτών των ερωτη-
µάτων αποθηκεύονται σε ενδιάµεσους πίνακες, οι οποίοι χρησιµοποιούνται µε τον
ίδιο τρόπο µε τον οποίο χρησιµοποιούνται και οι βασικοί πίνακες της εφαρµογής. Αυ-
τό σηµαίνει για παράδειγµα πως µπορούµε να δηµιουργήσουµε µια φόρµα η οποία να
δέχεται τιµές από ένα ερώτηµα προς τη βάση.

Αναφορές (Reports) : Περιλαµβάνουν τα δεδοµένα των πινάκων καθώς επί-


σης και τα αποτελέσµατα των ερωτηµάτων που υποβάλλουµε προς τη βάση, σε έντυ-
πη µορφή. Οι αναφορές δηµιουργούνται πολύ εύκολα από το κατάλληλο πρόγραµµα
διαχείρισης, ενώ ταυτόχρονα παρέχεται στο χρήστη η δυνατότητα να αλλάξει τόσο
την εµφάνισή τους – για παράδειγµα τη σειρά των πεδίων πάνω στο χαρτί ή τη γραµ-
µατοσειρά που χρησιµοποιείται για την εµφάνιση του τίτλου της αναφοράς – όσο και
τη δοµή τους – για παράδειγµα να προσθέσει ή να αφαιρέσει πεδία.

Μακροεντολές (Macros) : Πρόκειται για ένα πλήθος διαδικασιών της Mi-


crosoft Access, οι οποίες εκτελούνται σαν µια και µοναδική εντολή. Οι διαδικασίες
που µπορούµε να τοποθετήσουµε µέσα σε µια µακροεντολή είναι εντελώς συγκεκρι-
µένες και επιλέγονται µέσα από ένα κατάλογο, χωρίς ο χρήστης να έχει τη δυνατότη-
τα να ορίσει τις δικές του διαδικασίες. Μια διαδικασία µπορεί να χρησιµοποιηθεί µέ-
σα σε µια µακροεντολή, περισσότερες από µια φορές.

Λειτουργικές Μονάδες (Modules) : Επειδή ο αριθµός των διαδικασιών που


χρησιµοποιούνται σε µια µακροεντολή είναι εντελώς συγκεκριµένος, υπάρχει περί-
πτωση, να µην µπορούµε, δια της χρήσης των µακροεντολών, να πραγµατοποιήσου-
µε κάποια πολύπλοκη διαδικασία. Για τις περιπτώσεις αυτές, η Microsoft Access,
προσφέρει µια ολόκληρη γλώσσα προγραµµατισµού, την VBA (Visual Basic for
Applications), µέσω της οποίας µπορούµε να υλοποιήσουµε οποιαδήποτε διαδικασία,
όσο πολύπλοκη και αν είναι.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 114

∆ΙΑΧΕΙΡΙΣΗ ΒΑΣΕΩΝ ∆Ε∆ΟΜΕΝΩΝ

Η πρώτη εικόνα που παρουσιάζεται στην οθόνη µας αµέσως µετά την εκκίνη-
ση της Microsoft Access, είναι το παράθυρο του επόµενου σχήµατος, από το οποίο
µπορούµε να καθορίσουµε τη βάση που θέλουµε να χρησιµοποιήσουµε. Για τον
καθορισµό αυτής της βάσης έχουµε δύο δυνατότητες: είτε να δηµιουργήσουµε µια
καινούρια βάση δεδοµένων, είτε να ανοίξουµε µια υπάρχουσα βάση, και να εργα-
σθούµε µε αυτή. Στην πρώτη περίπτωση, µπορούµε να ζητήσουµε από την Access να
µας ανοίξει µια κενή βάση – οπότε θα πρέπει να καθορίσουµε µόνοι µας το πλήθος
και τη δοµή των πινάκων – η να δηµιουργήσουµε τη βάση µε τη βοήθεια της
Access, η οποία θα µας βοηθήσει να ορίσουµε το σχήµα της µέσα από ένα εύχρηστο
και φιλικό περιβάλλον (Database Wizard). Εφ’ όσον επιλέξουµε να ανοίξουµε µια
υπάρχουσα βάση δεδοµένων που έχουµε χρησιµοποιήσει στο παρελθόν, µπορούµε να
επιλέξουµε τη βάση αυτή από τον κατάλογο βάσεων δεδοµένων που εµφανίζεται στο
κάτω µέρος του διαλόγου.

Σχήµα 12 : Καθορισµός της τρέχουσας βάσης δεδοµένων

Στην προκειµένη περίπτωση, θα επιλέξουµε τη δηµιουργία κενής βάσης


δεδοµένων. Αυτό συνήθως γίνεται σε περιπτώσεις κατά τις οποίες έχουµε σχεδιάσει
τη δοµή της βάσης ανάλογα µε τις ανάγκες που θέλουµε να καλύψουµε. Για να
δηµιουργήσουµε µια κενή βάση, διαλέγουµε την πρώτη επιλογή από το παραπάνω
παράθυρο, και πατάµε το κουµπί OK. Στην περίπτωση αυτή, εµφανίζεται το επόµενο
παράθυρο, µέσα από το οποίο θα πρέπει να καθορίσουµε το όνοµα του αρχείου που
θα περιέχει τη βάση δεδοµένων που θα δηµιουργήσουµε. Ως όνοµα για αυτό το
αρχείο, ας δώσουµε το sample.mdb.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 115

Σχήµα 13 : Καθορισµός του ονόµατος της τρέχουσας βάσης δεδοµένων

Στο παραπάνω παράθυρο, το όνοµα της νέας βάσης, καταχωρείται στο πλαί-
σιο «Όνοµα Αρχείου», ενώ ως τύπο αρχείου αφήνουµε το προεπιλεγµένο «Βάσεις
∆εδοµένων Microsoft Access» που βρίσκεται ακριβώς από κάτω. Καταχωρώντας
αυτή την πληροφορία, µπορούµε στη συνέχεια να δηµιουργήσουµε τη βάση δεδοµέ-
νων στον κατάλογο που έχουµε επιλέξει, πατώντας το κουµπί που φέρει την ετικέτα
«∆ηµιουργία». Στην περίπτωση αυτή, η Access δηµιουργεί το αρχείο της βάσης στο
σκληρό δίσκο του υπολογιστή µας, και εµφανίζει στην οθόνη µας το κεντρικό παρά-
θυρο διαχείρισης της βάσης δεδοµένων, που παρουσιάζεται στη συνέχεια.

Σχήµα 14 : Το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων


Στο παραπάνω παράθυρο, και στο αριστερό µέρος του, παρατηρούµε τα έξι
βασικά αντικείµενα που περιλαµβάνονται στη Microsoft Access, και τα οποία εί-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 116

ναι οι πίνακες, οι φόρµες, τα ερωτήµατα, οι αναφορές, οι µακροεντολές και οι


λειτουργικές µονάδες. Η επιπλέον επιλογή «Σελίδες», αναφέρεται στη δυνατότητα
δηµιουργίας σελίδων για το παγκόσµιο διαδίκτυο µέσα από την εφαρµογή, ένα χαρα-
κτηριστικό, που δεν θα µας απασχολήσει για την ώρα. Επιλέγοντας κάποιο από αυτά
τα αντικείµενα, στο δεξί τµήµα του παραθύρου, εµφανίζονται όλα τα αντικείµενα αυ-
τού του τύπου που έχουµε δηµιουργήσει µέσα από την Access. Για την ώρα αυτή η
λίστα είναι άδεια, διότι δεν έχουµε δηµιουργήσει απολύτως τίποτε – το µόνο που κά-
ναµε ήταν να ορίσουµε το αρχείο της βάσης δεδοµένων.

Πως όµως είναι δυνατή, η δηµιουργία αντικειµένων? Καταρχήν, θα πρέπει να


αποφασίσουµε τι είδους αντικείµενο θέλουµε να δηµιουργήσουµε. Εάν για
παράδειγµα θέλουµε να δηµιουργήσουµε µια φόρµα, επιλέγουµε από το αριστερό
µέρος του παραθύρου την επιλογή «Φόρµες». Στην περίπτωση αυτή, στο δεξί µέρος
του παραθύρου θα εµφανιστούν οι επιλογές

Χρησιµοποιώντας την πρώτη από αυτές τις επιλογές µπορούµε να σχεδιά-


σουµε τη δοµή και τα χαρακτηριστικά της φόρµας µε το χέρι, ενώ η χρήση της
δεύτερης επιλογής, διευκολύνει σηµαντικά την εργασία µας, καθώς η φόρµα δη-
µιουργείται µέσα από ένα εύχρηστο και φιλικό περιβάλλον, το οποίο µας ζητά να κα-
θορίσουµε τα χαρακτηριστικά στοιχεία της φόρµας, και στη συνέχεια τη δηµιουργεί
από µόνο του. Με τον ίδιο τρόπο µπορούµε να δηµιουργήσουµε όλα τα αντικείµενα
της βάσης δεδοµένων.

Μιλώντας γενικά, υπάρχουν τρεις βασικές λειτουργίες που µπορούµε να


εφαρµόσουµε πάνω στα αντικείµενα της βάσης. Η πρώτη λειτουργία, που φέρει το
όνοµα «∆ηµιουργία», επιτρέπει τη δηµιουργία νέων αντικειµένων σύµφωνα µε τα
όσα αναφέραµε παραπάνω. Η λειτουργία «Σχεδίαση» επιτρέπει τον ορισµό – και σε
µεταγενέστερο στάδιο τη µεταβολή – της δοµής του αντικειµένου, ενώ τέλος, η επι-
λογή «Άνοιγµα» επιτρέπει τη χρήση του κάθε αντικειµένου. Αυτές οι διαδικασίες της
µεταβολής και της χρήσης, είναι συνάρτηση του τύπου του αντικειµένου που θεω-
ρούµε σε κάθε περίπτωση. Έτσι, η σχεδίαση ενός πίνακα αναφέρεται στη διαδικα-
σία µεταβολής της δοµής του – δηλαδή του τύπου και του πλήθους των πεδίων που
περιλαµβάνει – ενώ το άνοιγµα του πίνακα, εµφανίζει τα δεδοµένα που βρίσκο-
νται καταχωρηµένα σε αυτόν, και επιτρέπει τη µεταβολή των τιµών τους. Αντίθετα,
η σχεδίαση µιας φόρµας, αναφέρεται στη διαδικασία µεταβολής των στοιχείων
της φόρµας, ενώ το άνοιγµά της, επιτρέπει τη χρήση της φόρµας µέσα από την
εφαρµογή. Τέλος, η σχεδίαση ενός ερωτήµατος, επιτρέπει τον καθορισµό του εί-
δους των πεδίων που θα επιστρέφονται από αυτό, ενώ το άνοιγµα του ερωτήµα-
τος, επιτρέπει την εκτέλεσή του από το χρήστη, και την ανάκτηση των δεδοµέ-
νων στα οποία αναφέρεται. Με τον τρόπο αυτό, µπορούµε να ορίσουµε τις πράξεις
της σχεδίασης και της χρήσης, για όλους τους τύπους αντικειµένων που περιλαµβά-
νονται σε µια βάση δεδοµένων της Microsoft Access.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 117

Το επόµενο σχήµα παρουσιάζει τα κουµπιά του κεντρικού παραθύρου διαχεί-


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

Σχήµα 15 : Οι τρεις βασικές λειτουργίες που εφαρµόζονται στα αντικείµενα της βάσης

ΟΙ ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΤΟΥ ΚΕΝΤΡΙΚΟΥ MENU ΕΠΙΛΟΓΩΝ

Η διαδικασία καθορισµού της βάσης δεδοµένων µε την οποία θα εργασθούµε,


µπορεί να πραγµατοποιηθεί και µε πολλούς άλλους τρόπους. Ας ανοίξουµε για πα-
ράδειγµα το menu επιλογών που φέρει το όνοµα «Αρχείο». Στην περίπτωση αυτή
παρουσιάζεται στην οθόνη του υπολογιστή µας η επόµενη εικόνα:

Σχήµα 16 : Τα περιεχόµενα του menu «Αρχείο»

Από τις επιλογές που εµφανίζονται σε αυτό το menu, οι πιο σηµαντικές είναι
η «∆ηµιουργία» που επιτρέπει τη δηµιουργία µιας κενής βάσης δεδοµένων σύµφωνα
µε τα όσα έχουµε αναφέρει στις προηγούµενες σελίδες, οι επιλογές «Άνοιγµα» και
«Κλείσιµο» που επιτρέπουν την έναρξη και τον τερµατισµό της χρήσης υπάρχου-
σας βάσης, η επιλογή «Εκτύπωση» που επιτρέπει την εκτύπωση στοιχείων της βά-
σης σε κάποιον από τους εγκατεστηµένους εκτυπωτές του συστήµατος, η επιλογή «Ι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 118

διότητες» που εµφανίζει ένα παράθυρο µε τις πιο σηµαντικές από τις ιδιότητες της
βάσης, και η επιλογή «Έξοδος» που τερµατίζει τη λειτουργία της εφαρµογής. Άλλες
επίσης ενδιαφέρουσες επιλογές, είναι η επιλογή «Λήψη εξωτερικών δεδοµένων»
που επιτρέπει την εισαγωγή (import) πινάκων και δεδοµένων από άλλες βάσεις, η
επιλογή «Εξαγωγή» η οποία διαµορφώνει τα αντικείµενα της βάσης, µε τρόπο που
να καθιστά δυνατή τη χρήση τους µέσα από άλλα προγράµµατα, και η επιλογή «Α-
ποστολή προς», η οποία επιτρέπει την αποστολή κάποιου αντικειµένου της βάσης σε
κάποιο παραλήπτη, δια της χρήσης της υπηρεσίας του ηλεκτρονικού ταχυδροµείου.

Σχήµα 17 : Το menu «Επεξεργασία» Σχήµα 18 : Το menu «Προβολή»

Το δεύτερο σύνολο επιλογών που περιλαµβάνεται στο κεντρικό menu της Ac-
cess, φέρει το όνοµα «Επεξεργασία». Εδώ θα συναντήσουµε τις συνήθεις µορφές
επεξεργασίας δεδοµένων, που είναι η Αναίρεση (Undo), η αποκοπή (Cut), η αντι-
γραφή (Copy) και η επικόλληση (Paste). Από τις υπόλοιπες επιλογές, οι πιο σηµα-
ντικές είναι η ∆ιαγραφή (Delete) και η Μετονοµασία (Rename). Οι πράξεις αυτές
εφαρµόζονται στο αντικείµενο που έχουµε επιλέξει µε το ποντίκι στο κεντρικό παρά-
θυρο διαχείρισης της βάσης δεδοµένων, και είτε αλλάζουν το όνοµά του, είτε το δια-
γράφουν από τη βάση. Ας σηµειωθεί πως η πράξη της διαγραφής είναι µόνιµη και δεν
µπορεί να αναιρεθεί σε καµία περίπτωση – για το λόγο αυτό θα πρέπει να γίνεται µε
πολύ µεγάλη προσοχή.

Αµέσως µετά τις επιλογές της «Επεξεργασίας», ακολουθούν οι επιλογές της


«Προβολής». Εδώ καθορίζουµε τον τρόπο µε τον οποίο τα αντικείµενα της βάσης
δεδοµένων, θα εµφανίζονται στο κεντρικό παράθυρο διαχείρισης της εφαρµογής. Εάν
κάποιο από αυτά τα αντικείµενα έχει επιλεγεί και χρησιµοποιείται, η προβολή αναφέ-
ρεται στον τρόπο εµφάνισης αυτού του αντικειµένου. Τέλος από αυτές τις επιλογές
µπορούµε να εµφανίσουµε ή να αποκρύψουµε τις διάφορες γραµµές εργαλείων
(toolbars) που περιλαµβάνει η εφαρµογή.

Στη συνέχεια, ακολουθεί το menu «Εισαγωγή», από το οποίο µπορούµε να


δηµιουργήσουµε όλα τα αντικείµενα της βάσης δεδοµένων. Αυτή η επιλογή έχει το
ίδιο αποτέλεσµα µε το κουµπί «∆ηµιουργία» του κεντρικού παραθύρου διαχείρισης
της εφαρµογής, το οποίο περιγράψαµε στις προηγούµενες παραγράφους.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 119

Τέλος, το menu «Εργαλεία», περιλαµβάνει ένα πλήθος χρήσιµων λειτουρ-


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

Η διαδικασία εισαγωγής αντικειµένων της βάσης


από το παραπάνω menu είναι ταυτόσηµη µε την
εισαγωγή στοιχείων που λαµβάνει χώρα δια της
χρήσης του κουµπιού «∆ηµιουργία» που βρίσκεται
στο κεντρικό παράθυρο διαχείρισης της βάσης δε-
δοµένων που χρησιµοποιούµε

Σχήµα 19 : Το menu «Εισαγωγή» Σχήµα 20 : Το menu «Εργαλεία»

ΟΙ ΒΑΣΙΚΕΣ ΓΡΑΜΜΕΣ ΕΡΓΑΛΕΙΩΝ ΤΗΣ ΕΦΑΡΜΟΓΗΣ

Ολοκληρώνουµε τη συνοπτική αυτή περιγραφή του περιβάλλοντος εργασίας


της Microsoft Access, µε την περιγραφή των πιο σηµαντικών από τις γραµµές
εργαλείων (toolbars), δια της χρήσης των οποίων µπορούµε να πραγµατοποιήσουµε
τις πιο σηµαντικές από τις λειτουργίες της εφαρµογής. Αυτές τις γραµµές εργαλείων
µπορούµε να τις εµφανίσουµε και να τις αποκρύψουµε κατά βούληση εάν από το κε-
ντρικό menu επιλογών της Access, επιλέξουµε «Προβολή», και από εκεί, «Γραµµές
Εργαλείων» και «Προσαρµογή». Στην περίπτωση αυτή εµφανίζεται στην οθόνη του
υπολογιστή µας το πλαίσιο διαλόγου της επόµενης σελίδας.

Αυτό το παράθυρο, περιέχει όλες τις γραµµές εργαλείων που είναι διαθέσι-
µες στον τελικό χρήστη. Από αυτές τις γραµµές, εκείνες οι οποίες ήδη εµφανίζονται
στο κεντρικό παράθυρο της εφαρµογής, είναι επιλεγµένες. Εάν θέλουµε να εµφανί-
σουµε και κάποια επιπλέον γραµµή, δεν έχουµε παρά να την επιλέξουµε. Για να
αποκρύψουµε κάποια γραµµή, θα πρέπει απλά να αναιρέσουµε την επιλογή της.
Επιπλέον έχουµε τη δυνατότητα να τροποποιήσουµε τα κουµπιά που εµφανίζονται σε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 120

κάθε γραµµή, έτσι ώστε τελικά να διαµορφώσουµε το περιβάλλον εργασίας της Mi-
crosoft Access, έτσι ώστε να καλύψουµε τις ανάγκες µας.

Σχήµα 21 : Καθορισµός των γραµµών εργαλείων της εφαρµογής

Η πιο σηµαντική από τις γραµµές εργαλείων της Microsoft Access, φέρει το
όνοµα «Βάση ∆εδοµένων», και περιέχει ένα σύνολο από κουµπιά, που πραγµατο-
ποιούν τις πιο σηµαντικές από τις λειτουργίες της βάσης. Αυτή η γραµµή παρουσιά-
ζεται στο επόµενο σχήµα, και τα κουµπιά που ανήκουν σε αυτή πραγµατοποιούν τις
ακόλουθες λειτουργίες :

Σχήµα 22 : Η γραµµή εργαλείων «Βάση ∆εδοµένων»

∆ηµιουργεί µια βάση δεδοµένων, µία σελίδα πρόσβασης δεδοµένων, ή


ένα έργο της Microsoft Access

Ανοίγει µια βάση δεδοµένων ή ένα έργο της Microsoft Access, αλλά
έχει τη δυνατότητα να ανοίξει και ορισµένους άλλους τύπους αρχείων
όπως είναι για παράδειγµα αρχεία κειµένου, αρχεία λογιστικών φύλλων
του Microsoft Excel, καθώς και αρχεία άλλων εφαρµογών βάσεων δε-
δοµένων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 121

Αποθηκεύει τη διάταξη ενός φύλλου δεδοµένων, τη σχεδίαση ενός πί-


νακα, ερωτήµατος, προβολής, αποθηκευµένης διαδικασίας, πρότασης
SQL, φόρµας, έκθεσης ή σελίδας πρόσβασης δεδοµένων, ή τη δοµή
και το περιεχόµενο µιας µακροεντολής.

Εκτυπώνει την επιλεγµένη φόρµα, έκθεση, φύλλο δεδοµένων ή σελίδα


πρόσβασης δεδοµένων, χωρίς να εµφανίσει το παράθυρο διαλόγου «Ε-
κτύπωση».

Εµφανίζει το ενεργό αντικείµενο, για παράδειγµα ένα πίνακα, µια


φόρµα ή µια έκθεση, όπως θα εµφανίζονται όταν εκτυπωθούν (εκτός
από την περίπτωση του παραθύρου Μακροεντολή, το οποίο εµφανίζει
πρώτα την «Τεκµηρίωση βάσης δεδοµένων»). Υπάρχει η δυνατότητα
µεγέθυνσης ή σµίκρυνσης της τρέχουσας σελίδας, καθώς και της προεπι-
σκόπησης πολλών σελίδων ταυτόχρονα.

Ελέγχει την ορθογραφία των καταχωρίσεων κειµένου σε προβολή πί-


νακα, ερωτήµατος ή φύλλου δεδοµένων φόρµας, ή του επιλεγµένου κει-
µένου που υπάρχει σε ένα πλαίσιο κειµένου σε «Προβολή φόρµας».

Αφαιρεί το επιλεγµένο στοιχείο (για παράδειγµα, ένα στοιχείο ελέγχου


ή µια εγγραφή) και το τοποθετεί στο Πρόχειρο ώστε να είναι δυνατή η
εισαγωγή του σε κάποιο άλλο σηµείο. Η αναίρεση της τελευταίας λει-
τουργίας αποκοπής µπορεί να πραγµατοποιηθεί, επιλέγοντας την «Ακύ-
ρωση αποκοπής» στο µενού «Επεξεργασία».

Αντιγράφει το επιλεγµένο στοιχείο (για παράδειγµα, ένα στοιχείο ε-


λέγχου ή µια εγγραφή) είτε στο Πρόχειρο του Office είτε στο Πρόχει-
ρο των Windows, ώστε να είναι δυνατή η εισαγωγή του σε κάποιο άλλο
σηµείο.

Εισάγει ένα στοιχείο (για παράδειγµα, ένα στοιχείο ελέγχου ή µια εγ-
γραφή) από το Πρόχειρο σε ένα ενεργό αντικείµενο βάσης δεδοµένων.

Αντιγράφει τη µορφοποίηση (όπως χρώµατα, στυλ γραµµών και ιδιό-


τητες γραµµατοσειρών) από ένα στοιχείο ελέγχου σε άλλο.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 122

Αναιρεί την πιο πρόσφατη αναστρέψιµη ενέργειά του χρήστη. Το ό-


νοµα της εντολής αλλάζει (για παράδειγµα, σε «Αναίρεση Αποκοπής» ή
«Αναίρεση Μετακίνησης») ανάλογα µε την ενέργεια που πραγµατο-
ποιήθηκε τελευταία. Εάν µια ενέργεια δεν είναι δυνατό να αναιρεθεί, το
όνοµα της εντολής αλλάζει σε «Αδυναµία αναίρεσης».

Εκκινεί τον Οδηγό συγχώνευσης αλληλογραφίας του Microsoft Word,


µε τον οποίο πραγµατοποιείται η συγχώνευση δεδοµένων της Microsoft
Access σε έγγραφο του Word. Με τον τρόπο αυτό είναι δυνατή η δη-
µιουργία επιστολών, µε βάση φόρµα ή ετικέτες διευθύνσεων.

Εκκινεί τον Οδηγό ανάλυσης πινάκων, µε τον οποίο γίνεται ανάλυση


ενός πίνακα και, αν είναι απαραίτητο, διαίρεσή του σε σχετιζόµενους πί-
νακες, ώστε να επιτευχθεί πιο αποδοτική σχεδίαση πινάκων.

Ανοίγει την Επεξεργασία της Visual Basic και εµφανίζει τον κώδικα
που υπάρχει πίσω από µια επιλεγµένη φόρµα ή έκθεση στο παράθυρο
«Κώδικας».

Εµφανίζει το φύλλο ιδιοτήτων για το επιλεγµένο στοιχείο, όπως για ένα


πεδίο πίνακα ή για ένα στοιχείο ελέγχου που βρίσκεται σε µια φόρµα.
Εάν τίποτα δεν είναι επιλεγµένο, εµφανίζει το φύλλο ιδιοτήτων του ενερ-
γού αντικειµένου.

Εµφανίζει το παράθυρο «Σχέσεις» που παρέχει τη δυνατότητα προβολής,


επεξεργασίας και δηµιουργίας σχέσεων µεταξύ πινάκων και ερωτηµάτων.

∆ηµιουργεί αυτοµάτως µια φόρµα µε βάση τον επιλεγµένο πίνακα,


ερώτηµα, προβολή ή αποθηκευµένη διαδικασία.

Εκκινεί το «Βοηθό του Office» που παρέχει θέµατα βοήθειας και συµ-
βουλές όσον αφορά τη λειτουργία της Microsoft Access.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8
Πίνακες
Στο κεφάλαιο αυτό περιγράφεται η τρόπος δηµιουργίας
και διαχείρισης πινάκων µέσα από το περιβάλλον της Micro-
soft Access.

Η δηµιουργία ενός πίνακα (table) µέσα από τη Microsoft Access, πραγµατο-


ποιείται από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων εάν επιλέξουµε
τον Πίνακα από τη λίστα αντικειµένων που βρίσκεται στο αριστερό τµήµα του παρα-
θύρου, και χρησιµοποιήσουµε το κουµπί µε την ετικέτα «∆ηµιουργία». Εναλλακτικά,
µπορούµε να δηµιουργήσουµε τον πίνακα εάν από κεντρικό µενού επιλογών της Ac-
cess, επιλέξουµε «Εισαγωγή», και από τη λίστα που θα εµφανιστεί, διαλέξουµε την
επιλογή «Πίνακας». Και στις δύο περιπτώσεις, θα εµφανιστεί στην οθόνη µας το ε-
πόµενο πλαίσιο διαλόγου:

Σχήµα 22 : Οι πέντε δυνατοί τρόποι δηµιουργίας ενός πίνακα στη Microsoft Access

Χρησιµοποιώντας το παραπάνω παράθυρο, µπορούµε να διαλέξουµε τον τρό-


πο µε τον οποίο θα δηµιουργήσουµε το νέο πίνακα. Όπως φαίνεται από το παραπάνω
σχήµα, υπάρχουν πέντε τέτοιοι τρόποι δηµιουργίας πινάκων, οι οποίοι σε γενικές
γραµµές είναι οι ακόλουθοι:
Κεφάλαιο 8 : Πίνακες 124

ΠΡΟΒΟΛΗ ΦΥΛΛΟΥ ∆Ε∆ΟΜΕΝΩΝ

Χρησιµοποιώντας αυτή την επιλογή, µπορούµε να δηµιουργήσουµε απευθεί-


ας ένα πίνακα, δια της διαδικασίας καταχώρησης δεδοµένων. Πιο συγκεκριµένα,
το πρόγραµµα εµφανίζει ένα κενό φύλλο δεδοµένων, παρόµοιο µε αυτό του Excel,
στο οποίο µπορούµε κατευθείαν να καταχωρήσουµε τα δεδοµένα που θέλουµε. Τα
ονόµατα των στηλών που χρησιµοποιούνται είναι «Πεδίο 1», «Πεδίο 2», ……, «Πε-
δίο Ν», αλλά εάν το επιθυµούµε, µπορούµε να χρησιµοποιήσουµε τα δικά µας ονό-
µατα. Για να αλλάξουµε το όνοµα µιας στήλης, κάνουµε double click µε το ποντίκι
πάνω στο όνοµά της, και στη συνέχεια καταχωρούµε το όνοµα που θέλουµε. Ένα πα-
ράδειγµα φύλλου δεδοµένων, παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 23 : Προεπισκόπηση ενός πίνακα σε προβολή φύλλου δεδοµένων

Η διαδικασία εισαγωγής και διαγραφής στηλών είναι δυνατή και γίνεται πολύ
εύκολα χρησιµοποιώντας το ποντίκι. Πιο συγκεκριµένα, για να εισάγουµε µια και-
νούρια στήλη, επιλέγουµε τη στήλη που βρίσκεται δεξιά από το σηµείο εισαγωγής,
και από το κεντρικό µενού της Access, επιλέγουµε «Εισαγωγή» και στη συνέχεια
«Στήλη». Το ίδιο αποτέλεσµα θα έχουµε εάν µετά την επιλογή της στήλης πατήσου-
µε το δεξί πλήκτρο του ποντικιού και από το µενού που θα εµφανιστεί επιλέξουµε
«Εισαγωγή στήλης». Εάν αντί για εισαγωγή επιλέξουµε «∆ιαγραφή Στήλης» ή
«Μετονοµασία Στήλης» µπορούµε να διαγράψουµε και να µετονοµάσουµε αντί-
στοιχα τη στήλη που έχουµε επιλέξει. Μετά την καταχώρηση δεδοµένων, µπορούµε
να αποθηκεύσουµε τον πίνακα. Στην περίπτωση αυτή, η Access θα µας ρωτήσει εάν
θέλουµε να καθορίσουµε κάποιο πρωτεύον κλειδί, και στη συνέχεια, θα δηµιουργή-
σει τον πίνακα, σύµφωνα µε τον τύπο και το είδος των πεδίων που έχουµε καταχωρή-
σει σε κάθε στήλη του.

ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ

Η προβολή σχεδίασης χρησιµοποιείται σε περιπτώσεις κατά τις οποίες επιθυ-


µούµε να σχεδιάσουµε τη δοµή του πίνακα από µόνοι µας. Αυτό σηµαίνει πως θα
πρέπει να καθορίσουµε ένα προς ένα όλα τα πεδία του πίνακα που θέλουµε να

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 125

δηµιουργήσουµε, και πιο συγκεκριµένα, τον όνοµά τους, τον τύπο τους, καθώς
και ένα πλήθος χαρακτηριστικών ιδιοτήτων τους. Παραδείγµατα τέτοιων ιδιο-
τήτων, είναι το σύνολο των τιµών που µπορούν να λάβουν, το εάν η απόδοση τι-
µών σε αυτά είναι υποχρεωτική ή προαιρετική, καθώς και το εάν συµµετέχουν ή
όχι στο κύριο κλειδί του πίνακα.

Επιλέγοντας την προβολή σχεδίασης από το παράθυρο «∆ηµιουργία πίνα-


κα», εµφανίζεται στην οθόνη του υπολογιστή µας, το επόµενο πλαίσιο διαλόγου –
στο επόµενο σχήµα εµφανίζεται η σχεδίαση του πίνακα EMPLOYEE που κρατά τα
προσωπικά στοιχεία των υπαλλήλων της εταιρείας.

Σχήµα 24 : Προβολή σχεδίασης του πίνακα EMPLOYEE

Το παραπάνω παράθυρο περιέχει ένα φύλλο δεδοµένων στο οποίο καταχω-


ρούµε τα χαρακτηριστικά των πεδίων του πίνακα. Αυτό το φύλλο δεδοµένων περι-
λαµβάνει τρεις στήλες εκ των οποίων στην πρώτη στήλη µε τίτλο «Όνοµα Πεδίου»,
καταχωρούµε τα ονόµατα των πεδίων του πίνακα, στη δεύτερη στήλη µε τίτλο «Τύ-
πος ∆εδοµένων», καταχωρούµε τον τύπο δεδοµένων για κάθε πεδίο, ενώ στην τρίτη
στήλη που φέρει το όνοµα «Περιγραφή», καταχωρούµε προαιρετικά, µια φράση που
καθορίζει το ρόλο του πεδίου στον πίνακα που δηµιουργούµε. Η κάθε γραµµή στο
παραπάνω πλαίσιο διαλόγου αναφέρεται και σε ένα πεδίο του πίνακα, ενώ τα πε-
δία που συµµετέχουν στο πρωτεύον κλειδί του, χαρακτηρίζονται από την εµφάνιση
ενός µικρού κλειδιού, στο πρώτο κελί από αριστερά της γραµµής ορισµού των.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 126

Κάθε φορά που προσθέτουµε στον πίνακα ένα νέο πεδίο, η Microsoft Access,
χρησιµοποιεί ως προεπιλεγµένο τύπο δεδοµένων για αυτό το πεδίο, το «Κείµενο»,
που επιτρέπει την καταχώρηση σε αυτό, συµβολοσειρών, συγκεκριµένου µήκους.
Μπορούµε όµως να χρησιµοποιήσουµε όποιο τύπο δεδοµένων επιθυµούµε. Για να το
κάνουµε αυτό επιλέγουµε µε το ποντίκι τον τύπο δεδοµένων που θέλουµε να αλλά-
ξουµε. Στην περίπτωση αυτή εµφανίζεται σε αυτό το κελί, µια λίστα µε όλους τους
διαθέσιµους τύπους δεδοµένων, από την οποία και επιλέγουµε τον επιθυµητό τύπο
δεδοµένων, για το θεωρούµενο πεδίο:

Σχήµα 25 : Οι τύποι δεδοµένων που υποστηρίζονται από τη Microsoft Access

Οι τύποι δεδοµένων που υποστηρίζονται από την τρέχουσα έκδοση της Mi-
crosoft Access, είναι οι ακόλουθοι:

ΤΥΠΟΣ
ΠΕΡΙΓΡΑΦΗ ΜΕΓΕΘΟΣ
∆Ε∆ΟΜΕΝΩΝ

Κείµενο Κείµενο ή συνδυασµός κειµένου και αριθ- Μέχρι 255


µών, όπως διευθύνσεις. Επίσης αριθµοί, που χαρακτήρες
δεν απαιτούν υπολογισµούς, όπως αριθµοί τη-
λεφώνων, κωδικοί ανταλλακτικών ή τα-
χυδροµικοί κωδικοί.

Υπόµνηµα Κείµενο µεγάλου µήκους και αριθµοί, όπως Μέχρι 64000


σηµειώσεις ή περιγραφές. χαρακτήρες

Αριθµός Αριθµητικά δεδοµένα που χρησιµοποιούνται 1, 2 ,4 ή 8 bytes


σε µαθηµατικούς υπολογισµούς, εκτός από
υπολογισµούς που αφορούν χρήµατα για τους
οποίους χρησιµοποιούµε τον τύπο της νοµι-
σµατικής µονάδας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 127

Ηµεροµηνία Χρησιµοποιείται για την καταχώρηση δεδοµέ- 8 bytes


Ώρα νων που αφορούν ηµεροµηνίες και ώρες

Νοµισµατική Χρησιµοποιείται για την καταχώρηση δεδοµέ- 8 bytes


µονάδα νων που αφορούν χρηµατικά ποσά

Αυτόµατη Μοναδικός αύξων (προσαυξανόµενος κατά 1) 4 bytes


αρίθµηση ή τυχαίος αριθµός που καταχωρείται αυτόµατα
κατά την προσθήκη µιας εγγραφής.

Ναι BOOLEAN τύπος δεδοµένων που παίρνει τις 1 Bit


Όχι τιµές TRUE ή FALSE

Αντικείµενο Αντικείµενα (όπως έγγραφα του Microsoft Μέχρι 1


OLE Word, λογιστικά φύλλα του Microsoft Excel, gigabyte (περιο-
εικόνες, ήχοι ή άλλα ψηφιακά δεδοµένα), που ριζόµενο από το
έχουν δηµιουργηθεί σε άλλα προγράµµατα, χώρο του δί-
χρησιµοποιώντας πρωτόκολλο OLE, και τα σκου).
οποία που µπορούν να συνδεθούν ή να ενσω-
µατωθούν σε έναν πίνακα της Microsoft
Access..

Υπερ- Πεδίο που αποθηκεύει υπερ-συνδέσεις. Η υ- Μέχρι 64.000


σύνδεση περ-σύνδεση µπορεί να είναι µια διαδροµή χαρακτήρες.
UNC ή µια διεύθυνση URL.

Για να καθορίσουµε το πρωτεύον κλειδί του πίνακα, επιλέγουµε τη γραµµή


του φύλλου δεδοµένων στην οποία αντιστοιχεί, και στη συνέχεια πατάµε το δεξί
πλήκτρο του ποντικιού. Στην περίπτωση αυτή εµφανίζεται στην οθόνη µας το επό-
µενο µενού επιλογών :

Για να χαρακτηρίσουµε το επιλεγµένο πεδίο ως


πρωτεύον κλειδί, χρησιµοποιούµε την οµώνυµη επι-
λογή από αυτό το µενού. Εάν θέλουµε να ορίσουµε
σύνθετο κλειδί, επιλέγουµε τα πεδία που θα περι-
λαµβάνονται σε αυτό, και στη συνέχεια επαναλαµ-
βάνουµε την ίδια διαδικασία. Το ίδιο αποτέλεσµα
έχουµε εάν χρησιµοποιήσουµε το επόµενο κουµπί
από την κεντρική γραµµή εργαλείων της Access.

Σχήµα 26 : Ορισµός πρωτεύοντος κλειδιού

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 128

Καθορισµός των ιδιοτήτων των πεδίων του πίνακα

Στο κάτω µέρος του παραθύρου της προβολής σχεδίασης που φέρει το όνοµα
«Ιδιότητες πεδίου», έχουµε τη δυνατότητα, για κάθε ένα από τα πεδία που δηµιουρ-
γούµε να καθορίσουµε και ένα πλήθος χρήσιµων ιδιοτήτων για αυτό το πεδίο. Για
να το κάνουµε αυτό επιλέγουµε τη σελίδα «Γενικές ιδιότητες» η οποία περιλαµβάνει
τις επόµενες επιλογές (αυτές οι επιλογές αφορούν το πεδίο Salary του πίνακα
EMPLOYEE):

Σχήµα 27 : Καθορισµός ιδιοτήτων για το επιλεγµένο πεδίο του πίνακα

Μέγεθος πεδίου : καθορίζει το µέγεθος του πεδίου σε bytes, και οι επιλογές


που εµφανίζει είναι συνάρτηση του τύπου δεδοµένων του κάθε πεδίου. Έτσι εάν ο
τύπος του πεδίου είναι «Κείµενο», επιτρέπει τον καθορισµό του µεγέθους του σε χα-
ρακτήρες, ενώ εάν είναι ακέραιος, επιτρέπει τον καθορισµό του µεγέθους του, εµφα-
νίζοντας το επόµενο µενού επιλογών :

Σχήµα 28 : Καθορισµός του µεγέθους των πεδίων ακέραιου τύπου δεδοµένων

Μορφή : επιτρέπει τον καθορισµό της µορφής των τιµών που θα καταχωρού-
µε για το κάθε πεδίο. Στα επόµενα σχήµατα δίδουµε ενδεικτικά παραδείγµατα της
µορφής που µπορούν να λάβουν οι τιµές για τα πεδία BDATE και SALARY. Από τα
πεδία αυτά το πρώτο είναι τύπου Ηµεροµηνία – Ώρα και σύµφωνα µε τις προδια-
γραφές που έχουµε θέσει οι τιµές που θα παίρνει θα έχουν τη µορφή DD/MM/YYYY
(D=Day, M=Month, Y=Year), ενώ στη δεύτερη περίπτωση, ο µισθός του υπαλλή-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 129

λου δέχεται αριθµητική τιµή εκπεφρασµένη σε δραχµές, µε την τελεία να χρησιµο-


ποιείται ως διαχωριστικό χιλιάδων, και το ελληνικό κόµµα, να ξεχωρίζει το δεκαδι-
κό µέρος του αριθµού, από το ακέραιο µέρος του.

∆εκαδικές Θέσεις : το πεδίο αυτό εµφανίζεται µόνο στην περίπτωση κατά


την οποία το επιλεγµένο πεδίο είναι αριθµητικού τύπου δεδοµένων, και επιτρέπει
τον καθορισµό του πλήθους των δεκαδικών ψηφίων που θα χρησιµοποιηθεί σε κάθε
περίπτωση. Η προεπιλεγµένη τιµή είναι η επιλογή «Αυτόµατα», που επιτρέπει τον
αυτόµατο καθορισµό του πλήθους των δεκαδικών ψηφίων ανάλογα µε τη µορφή που
έχει επιλεγεί, αλλά εάν το επιθυµούµε, µπορούµε να ζητήσουµε από το πρόγραµµα να
κρατήσει συγκεκριµένο πλήθος ψηφίων, για παράδειγµα έξι δεκαδικά ψηφία.

Σχήµα 29 : Καθορισµός της µορφής του πεδίου για τις ηµεροµηνίες και τα αριθµητικά πεδία

Μάσκα εισαγωγής : επιτρέπει τον καθορισµό του τρόπου µε τον οποίο θα


λαµβάνει χώρα η καταχώρηση των δεδοµένων, στον τρέχοντα πίνακα. Για να ο-
ρίσουµε αυτή τη µάσκα χρησιµοποιούµε το κουµπί που εµφανίζεται στο δεξί άκρο
του πεδίου, και χρησιµοποιώντας τον οδηγό που παρουσιάζεται στη συνέχεια, µπο-
ρούµε να καθορίσουµε τη µορφή που θα έχει η τιµή που θα καταχωρήσουµε. Για πα-
ράδειγµα, εάν εφαρµόσουµε αυτή τη διαδικασία για το πεδίο BDATE του πίνακα
EMPLOYEE που είναι τύπου Ηµεροµηνία – Ώρα, θα εµφανίσουµε στην οθόνη του
υπολογιστή µας το επόµενο πλαίσιο διαλόγου :

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 130

Σχήµα 30 : Καθορισµός µάσκας εισαγωγής για πεδία του τύπου Ηµεροµηνία - Ώρα

Εµφανίζοντας το παραπάνω παράθυρο, έχουµε τη δυνατότητα να καθορίσου-


µε τον τρόπο µε τον οποίο θα καταχωρούµε την ηµεροµηνία γέννησης για τον
κάθε EMPLOYEE. Στο παράδειγµά µας έχουµε επιλέξει τον τύπο «Ενδιάµεση Η-
µεροµηνία», που δέχεται τιµές της µορφής «DD-MON-YY» (D=Day,
MON=Month, Y=Year). Επιπλέον, ανάµεσα στις τιµές των πεδίων της ηµεροµηνίας,
θα εµφανίζονται διαχωριστικές παύλες όπως φαίνεται στο πεδίο «∆οκιµή» του πα-
ραπάνω διαλόγου. Αυτό σηµαίνει πως εάν καταχωρούµε τις ηµεροµηνίες γέννησης
των EMPLOYEES µέσα από κάποια φόρµα, το πεδίο που θα χρησιµοποιείται για
αυτή την καταχώρηση, θα εµφανίζει αυτά τα δύο διαχωριστικά, και ο χρήστης το µό-
νο που θα έχει να κάνει, θα είναι να καταχωρήσει τις τιµές, για την ηµεροµηνία, το
µήνα και το έτος.

Λεζάντα : Στο πεδίο αυτό καθορίζουµε το µήνυµα που θα εµφανίζεται στην


φόρµα εισαγωγής δεδοµένων για αυτό το πεδίο. Για παράδειγµα, εάν ως λεζάντα για
την ηµεροµηνία γέννησης καθορίσουµε τη φράση «Ηµεροµηνία Γέννησης», τότε η
φράση αυτή, θα εµφανιστεί στη φόρµα εισαγωγής δεδοµένων, όπως φαίνεται στο
ακόλουθο σχήµα :

Σχήµα 31 : Η ιδιότητα της λεζάντας καθορίζει τη φράση που θα εµφανίζεται στη φόρµα ει-
σαγωγής δεδοµένων για το συγκεκριµένο πεδίο

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 131

Προεπιλεγµένη τιµή : σε ορισµένες περιπτώσεις, επιθυµούµε για κάποια πε-


δία, να µη λαµβάνει χώρα η καταχώρηση τιµής σε αυτά, από το χρήστη, αλλά
αυτή η τιµή να αποδίδεται αυτόµατα, από την εφαρµογή. Για παράδειγµα, στις
καταχωρήσεις των στοιχείων ασθενών όταν αυτοί πραγµατοποιούν εισαγωγή σε ένα
νοσοκοµείο, συνηθίζεται ως ηµεροµηνία εισαγωγής να τοποθετείται αυτόµατα η
τρέχουσα ηµεροµηνία, διαδικασία, η οποία µας βοηθά να εξοικονοµήσουµε πολύτι-
µο χρόνο, όσον αφορά τη διαδικασία καταχώρησης δεδοµένων. Στις περιπτώσεις λοι-
πόν για τις οποίες επιθυµούµε να καταχωρείται αυτόµατα κάποια προεπιλεγµένη τιµή
– την οποία φυσικά µπορούµε να την αλλάξουµε ανά πάσα στιγµή – θα πρέπει να κα-
ταχωρήσουµε αυτή την τιµή στο εν λόγω πεδίο.

Κανόνας επικύρωσης : ορίζοντας για το τρέχον πεδίο ένα κανόνα επικύρω-


σης, επιβάλουµε στον χρήστη την καταχώρηση τιµών οι οποίες πληρούν κάποιες
συνθήκες. Για παράδειγµα, ο µισθός ενός υπαλλήλου δεν µπορεί να είναι αρνητι-
κός αριθµός. Για να θέσουµε λοιπόν αυτό τον περιορισµό όσον αφορά την τιµή αυ-
τού του πεδίου, θα πρέπει ως κανόνα επικύρωσης να καταχωρήσουµε τη φράση «>0»,
όπως φαίνεται στο επόµενο σχήµα :

Σχήµα 32 : Παράδειγµα καθορισµού κανόνα επικύρωσης

Εάν ο κανόνας επικύρωσης είναι αρκετά πολύπλοκος, µπορούµε να τον δη-


µιουργήσουµε µε τη βοήθεια του πλαισίου «∆όµηση Εκφράσεων» που εµφανίζεται
πατώντας το κουµπί που βρίσκεται στη δεξιά πλευρά του πεδίου. Ένα παράδειγµα
χρήσης αυτού του πλαισίου διαλόγου, παρουσιάζεται στη συνέχεια:

Σχήµα 33 : Παράδειγµα δηµιουργίας κανόνα επικύρωσης δια της χρήσης του παραθύρου
«∆όµηση εκφράσεων»

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 132

Κείµενο επικύρωσης : εάν η τιµή που καταχωρεί ο χρήστης παραβιάζει τον


κανόνα επικύρωσης που έχουµε καθορίσει στο προηγούµενο στάδιο, µπορούµε να
εµφανίσουµε ένα µήνυµα λάθους που να πληροφορεί το χρήστη, ότι η τιµή που
καταχώρησε δεν είναι σωστή. Το κείµενο αυτού του µηνύµατος καθορίζεται σε αυ-
τό το πεδίο. Έτσι εάν στο εν λόγω πεδίο καταχωρήσουµε τη φράση «Ο µισθός ενός
υπαλλήλου πρέπει να είναι θετικός», αυτή η φράση θα εµφανιστεί στο χρήστη, στην
περίπτωση κατά την οποία καταχωρήσει στο µισθό του υπαλλήλου, αρνητικές τιµές.

Μηδενικό µήκος : εµφανίζεται µόνο σε περιπτώσεις πεδίων, ο τύπος δεδοµέ-


νων των οποίων είναι «Κείµενο», και καθορίζει για το εάν στο συγκεκριµένο πεδίο,
µπορούν να καταχωρηθούν συµβολοσειρές µηδενικού µήκους. Πρόκειται για µια
µεταβλητή τύπου BOOL και οι τιµές που µπορεί να λάβει είναι οι «Ναι» και «Όχι».

Απαιτείται : εάν υπάρχει κάποιο πεδίο για το οποίο ο χρήστης πρέπει υπο-
χρεωτικά να καταχωρήσει κάποια τιµή, τότε θα πρέπει σε αυτή την παράµετρο να
καταχωρήσουµε την τιµή «Ναι». Αυτό συµβαίνει σε περιπτώσεις πεδίων που
περιέχουν σηµαντικές πληροφορίες, όπως είναι για παράδειγµα το επώνυµο κάποιου
υπαλλήλου της εταιρείας.

Με ευρετήριο : η δηµιουργία ευρετηρίου (index) για ένα ή περισσότερα πε-


δία κάποιου πίνακα, επιταχύνει σηµαντικά τη διαδικασία αναζήτησης εγγραφών
ως προς αυτό το πεδίο. Εάν επιθυµούµε τη δηµιουργία ενός τέτοιου ευρετηρίου, θέ-
τουµε στην παράµετρο αυτή την τιµή «Ναι», ενώ στην αντίθετη περίπτωση, διαλέ-
γουµε την τιµή «Όχι». Ας σηµειωθεί, πως κατά τη δηµιουργία ευρετηρίου, έχουµε
δύο επιλογές: να επιτρέψουµε ή να αποτρέψουµε την καταχώρηση διπλών τιµών
σε αυτό το πεδίο. Για να καθορίσουµε αυτή την παράµετρο, επιλέγουµε τις τιµές
«Επιτρέπονται διπλότυπα» και «∆εν επιτρέπονται διπλότυπα», αντίστοιχα.

Συµπίεση Unicode : η παράµετρος αυτή µας επιτρέπει να καθορίσουµε εάν


επιθυµούµε να λάβει χώρα συµπίεση των δεδοµένων που καταχωρούµε στο τρέ-
χον πεδίο, σύµφωνα µε την αναπαράσταση χαρακτήρων Unicode. Αυτό ισχύει
ωστόσο µόνο για τα πεδία εκείνα των οποίων ο τύπος δεδοµένων είναι «Κείµενο»,
«Υπόµνηµα» ή «Υπερσύνδεση».

Εκτός από τις παραπάνω ιδιότητες που καθορίζουν τα χαρακτηριστικά του


πεδίου όσον αφορά τις τιµές που καταχωρούνται σε αυτό, µπορούµε να
καθορίσουµε και τον τρόπο µε τον οποίο το εν λόγω πεδίο θα εµφανίζεται στη
φόρµα καταχώρησης δεδοµένων. Για να το κάνουµε αυτό, επιλέγουµε από το
φύλλο ιδιοτήτων του πεδίου, τη σελίδα «Εµφάνιση». Για όσα πεδία είναι κείµενα ή
αριθµοί, η εµφάνισή τους µπορεί να έχει τη µορφή πλαισίου κειµένου (edit box),
πλαισίου λίστας (list box), ή σύνθετου πλαισίου (combo box). Αντίθετα, για τα
πεδία που παίρνουν µόνο τις τιµές «Ναι/Όχι», η εµφάνισή τους µπορεί να είναι
εκείνη ενός Text Box, Check Box ή Combo Box.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 133

Σχήµα 34 : Καθορισµός του τρόπου εµφάνισης για το επιλεγµένο πεδίο

Στην περίπτωση κατά την οποία ένα πεδίο εµφανίζεται µε τη µορφή ενός
πλαισίου κειµένου, ο χρήστης θα πρέπει να πληκτρολογήσει την τιµή που καταχω-
ρείται σε αυτό, ενώ όταν η εµφάνιση του πεδίου είναι εκείνη ενός πλαισίου λίστας ή
σύνθετου πλαισίου, ο χρήστης καθορίζει την τιµή, επιλέγοντάς την από ένα σύνολο
τιµών. Αυτό το σύνολο των τιµών, µπορεί να είναι οι τιµές της στήλης κάποιου
πίνακα, η εκείνες οι οποίες επιστρέφονται από κάποιο ερώτηµα. Και στις δύο πε-
ριπτώσεις, η προέλευσή αυτού του συνόλου τιµών, καθορίζεται από το πεδίο «Προέ-
λευση γραµµής», όπως φαίνεται στο παρακάτω παράδειγµα.

Σχήµα 35 : Καθορισµός της προέλευσης του συνόλου τιµών που εµφανίζονται σε ένα πλαί-
σιο λίστας ή σε ένα σύνθετο πλαίσιο

Η δυνατότητα καταχώρησης τιµής σε κάποιο πεδίο δια της επιλογής της από
ένα σύνολο τιµών, είναι πάρα πολύ χρήσιµη, διότι διασφαλίζει την ορθότητα των
δεδοµένων που καταχωρούµε στη βάση. Στο παράδειγµά µας, τα χαρακτηριστικά
εµφάνισης του προηγούµενου σχήµατος, αφορούν το πεδίο PNO του πίνακα
WORKS_ON. Υπενθυµίζουµε από τη θεωρητική εισαγωγή στις βάσεις δεδοµένων,
πως αυτός ο πίνακας, περιέχει τον κώδικα SSN του κάθε υπαλλήλου, και τον κώδικα
του PROJECT στο οποίο αυτός απασχολείται. Είναι προφανές πως οι τιµές που κα-
ταχωρούνται στο πεδίο PNO, θα πρέπει να είναι έγκυροι κωδικοί, διότι στην αντίθετη
περίπτωση παραβιάζεται ο δεύτερος κανόνας ακεραιότητας. Εκείνο λοιπόν που θα
πρέπει να κάνουµε, είναι να κατασκευάσουµε ένα ερώτηµα που να επιστρέφει όλους

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 134

τους κωδικούς των PROJECTS που πραγµατοποιούνται από την εταιρεία, τους ο-
ποίους στη συνέχεια θα εµφανίσουµε στο παραπάνω πλαίσιο λίστας. Επιπλέον, θα
πρέπει να αποδώσουµε στο πεδίο «Περιορισµός σε λίστα» του παραπάνω σχήµατος,
την τιµή «Ναι», η οποία θεωρεί έγκυρες µόνο τις τιµές που περιλαµβάνονται στη λί-
στα, και άκυρες όλες τις υπόλοιπες. Εφ όσον λοιπόν ο χρήστης θα επιλέγει ως κω-
δικό µόνο κάποιον από αυτούς που εµφανίζονται στη λίστα, είναι προφανές πως ο
κωδικός που τελικά θα καταχωρηθεί, θα είναι έγκυρος και θα αντιστοιχεί σε κά-
ποιο υπαρκτό PROJECT.

Ας δούµε τώρα µε ποιο τρόπο θα πραγµατοποιήσουµε όλα τα παραπάνω βή-


µατα. Στο πρώτο στάδιο της διαδικασίας θα δηµιουργήσουµε ένα ερώτηµα µε το όνο-
µα Projects το οποίο θα επιστρέφει τους κωδικούς όλων των projects της εταιρείας.
Αν και δεν έχουµε µάθει ακόµη να κατασκευάζουµε ερωτήµατα στη Microsoft Ac-
cess, εν τούτοις , ο κώδικας SQL που αντιστοιχεί σε αυτό το ερώτηµα, είναι πάρα
πολύ απλός και έχει τη µορφή

SELECT PROJECT.[Project Number] FROM PROJECT;

Μετά τη δηµιουργία του παραπάνω ερωτήµατος, εµφανίζουµε το φύλλο ιδιο-


τήτων του πεδίου PNO, µεταφερόµαστε στη σελίδα «Εµφάνιση», και στο πεδίο «Τύ-
πος προέλευσης γραµµής» καταχωρούµε την τιµή «Πίνακας/Ερώτηµα». Με τον
τρόπο αυτό γνωστοποιούµε στην εφαρµογή πως οι τιµές που θα εµφανιστούν στο
πλαίσιο λίστας ή στο σύνθετο πλαίσιο, θα προκύψουν από κάποιο πίνακα ή από
κάποιο ερώτηµα. Στο επόµενο πεδίο, που φέρει το όνοµα «Προέλευση γραµµής»,
καταχωρούµε την τιµή «Projects», που είναι και το όνοµα του ερωτήµατος το οποίο
θα χρησιµοποιήσουµε. Τέλος, στο τελευταίο πεδίο που φέρει το όνοµα «Πε-
ριορισµός σε λίστα», καταχωρούµε την τιµή «Ναι», υποχρεώνοντας έτσι το χρήστη
να χρησιµοποιήσει µόνο τις τιµές που εµφανίζονται στη λίστα, και τίποτε περισσότε-
ρο. Κάνοντας όλες αυτές τις διαδικασίες, η καταχώρηση τιµής στο πεδίο PNO γίνεται
δια της επιλογής µιας εκ των τιµών που εµφανίζονται στο σύνθετο πλαίσιο, όπως
φαίνεται στο επόµενο σχήµα.

Στο παράδειγµά µας ο πίνακας


PROJECT περιέχει έξι εγγραφές,
µε κωδικούς αριθµούς τους 1, 2, 3,
10, 20, 30. Επιλέγοντας ως σχήµα
εµφάνισης για το πεδίο PNO το
πλαίσιο λίστας ή το σύνθετο πλαί-
σιο, και υποχρεώνοντας το χρήστη
να χρησιµοποιήσει µόνο κάποια από
τιµές που εµφανίζονται στη λίστα,
διασφαλίζουµε την καταχώρηση
των σωστών δεδοµένων.

Εάν ο πίνακας ή το ερώτηµα περιέχει περισσότερες από µία στήλες, όπως συ-
νήθως γίνεται στην πράξη, στο πεδίο «Πλήθος στηλών» καθορίζουµε τον αριθµό
των στηλών που επιθυµούµε να χρησιµοποιήσουµε, ενώ στο πεδίο «∆εσµευµένη
στήλη», καθορίζουµε τη στήλη της οποίας η τιµή θα καταχωρηθεί τελικά στο επιλεγ-
µένο στο πεδίο. Τέλος, τα πεδία «Κεφαλίδες στηλών» και «Πλάτη στηλών», καθο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 135

ρίζουν τα χαρακτηριστικά εµφάνισης των στοιχείων της λίστας, όπως είναι για
παράδειγµα η χρήση ή όχι επικεφαλίδων σε αυτές, καθώς και το πλάτος τους εκ-
πεφρασµένο σε εκατοστά.

Ο∆ΗΓΟΣ ΠΙΝΑΚΩΝ

Η δηµιουργία ενός πίνακα διευκολύνεται σηµαντικά χρησιµοποιώντας τον


οδηγό πινάκων (table wizard). Μέσω αυτής της διαδικασίας ο χρήστης µπορεί να
δηµιουργήσει τους δικούς του πίνακες µε βάση τη δοµή πινάκων γενικής χρήσεως
οι οποίοι καλύπτουν τις πιο συνηθισµένες περιπτώσεις διαχείρισης δεδοµένων.

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

Ως ένα παράδειγµα χρήσης του οδηγού πινάκων, ας δηµιουργήσουµε τον πί-


νακα EMPLOYEE στον οποίο καταχωρούνται τα στοιχεία των υπαλλήλων της εται-
ρείας. Για να το κάνουµε αυτό επιλέγουµε την κατηγορία των επαγγελµατικών πι-
νάκων, και από τη λίστα που εµφανίζεται επιλέγουµε τον πίνακα «Υπάλληλοι». Στην
περίπτωση αυτή, στο δεύτερο πλαίσιο λίστας του παραθύρου, που φέρει τον τίτλο
«∆είγµατα πεδίων», θα εµφανιστούν τα πεδία που περιλαµβάνονται σε αυτόν τον
πίνακα.

Σχήµα 36 : Η δοµή του οδηγού πινάκων που διευκολύνει τη διαδικασία σχεδίασης του νέου πίνακα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 136

Τα πεδία αυτού του πίνακα, καλύπτουν όλες τις τυπικές περιπτώσεις


καταχώρησης στοιχείων υπαλλήλων. Εάν το επιθυµούµε, µπορούµε να τα
κρατήσουµε όλα, αλλά στην προκειµένη περίπτωση θα χρησιµοποιήσουµε µόνο
µερικά από αυτά. Προκειµένου να καθορίσουµε τα πεδία που θα συµπεριληφθούν
στο νέο πίνακα, τα επιλέγουµε µε το ποντίκι, το ένα µετά το άλλο, και πατώντας
το πρώτο από τα τέσσερα κουµπιά που βρίσκονται ανάµεσα στο δεύτερο και στο
τρίτο πλαίσιο λίστας, σε κατακόρυφη διάταξη, προσθέτουµε το πεδίο στο τρίτο
πλαίσιο λίστας, που φέρει τον τίτλο «Πεδία στο νέο πίνακα». Εάν θέλουµε να
µεταφέρουµε όλα τα πεδία, χρησιµοποιούµε το δεύτερο από αυτά τα κουµπιά. Τα
άλλα δύο κουµπιά, χρησιµοποιούνται για τη µεταφορά ενός ή περισσοτέρων πεδίων,
αλλά προς την αντίθετη κατεύθυνση. Έτσι εάν µεταφέρουµε κάποιο πεδίο στο νέο
πίνακα, και µετά διαπιστώσουµε ότι δεν µας χρειάζεται, µπορούµε να το
αποµακρύνουµε από τη λίστα των πεδίων του υπό κατασκευή πίνακα,
χρησιµοποιώντας το τρίτο κουµπί. Το τέταρτο κουµπί πραγµατοποιεί την ίδια
διαδικασία µε το τρίτο, αλλά εφαρµόζεται σε πολλά πεδία ταυτόχρονα.
Εφαρµόζοντας αυτή τη διαδικασία, ορίζουµε τη δοµή του πίνακα EMPLOYEE,
όπως φαίνεται στο επόµενο σχήµα.
Στο σχήµα αυτό, εκτός από τον καθορισµό των πεδίων που θα σχηµατίσουν το
νέο πίνακα, έχει λάβει χώρα και µετονοµασία τους, έτσι ώστε να χρησιµοποιηθούν
τα ίδια ονόµατα µε εκείνα που χρησιµοποιήσαµε στη θεωρητική περιγραφή του προ-
βλήµατος. Για να µετονοµάσουµε ένα πεδίο, το επιλέγουµε µε το ποντίκι, και µετά
πατάµε το κουµπί µε την ετικέτα «Μετονοµασία πεδίου». Στην περίπτωση αυτή
εµφανίζεται ένα πλαίσιο διαλόγου, µέσω του οποίου, καθορίζουµε το νέο όνοµα του
επιλεγµένου πεδίου.

Σχήµα 37 : Καθορισµός της δοµής του πίνακα EMPLOYEE δια της χρήσης του οδηγού πινάκων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 137

Μετά τον καθορισµό της δοµής του πίνακα, θα πρέπει να καθορίσουµε το


όνοµά του και το πρωτεύον κλειδί του. Για να το κάνοµε αυτό πατάµε το κουµπί
που φέρει την ετικέτα «Επόµενο». Εµφανίζεται τότε ένα άλλο παράθυρο µέσα από το
οποίο ορίζουµε το όνοµα του πίνακα και το πεδίο που θα χρησιµοποιηθεί ως
πρωτεύον κλειδί. Στο στάδιο αυτό έχουµε δύο δυνατότητες: είτε να ορίσουµε εµείς
αυτό το πεδίο, είτε να ζητήσουµε από την Access, να ορίσει αυτή ένα κλειδί από
µόνη της. Επιλέγοντας την πρώτη λύση και πατώντας το κουµπί «Επόµενο», εµφανί-
ζεται µια λίστα µε τα πεδία του πίνακα, από όπου επιλέγουµε ως κλειδί, το πεδίο
SSN. Επίσης έχουµε τη δυνατότητα να καθορίσουµε και το είδος των τιµών που θα
καταχωρούνται σε αυτό το πεδίο. Αυτές οι τιµές µπορεί να είναι είτε συνεχόµενες
διαδοχικές τιµές που τοποθετούνται αυτόµατα από την εφαρµογή, είτε αριθµητι-
κές ή αλφαριθµητικές τιµές που καταχωρούνται από το χρήστη – λόγω της φύσης
του συγκεκριµένου προβλήµατος, επιλέγουµε τη χρήση αλφαριθµητικών τιµών.

Στο σηµείο αυτό, πατώντας το κουµπί «Τέλος», µπορούµε να τερµατίσουµε


τον οδηγό των πινάκων, οπότε θα λάβει χώρα δηµιουργία του πίνακα από την Access,
µε βάση τις πληροφορίες που έχουµε καθορίσει. Εάν το επιθυµούµε, µπορούµε να
χρησιµοποιήσουµε και τις επόµενες οθόνες, και να ορίσουµε τις συσχετίσεις που θα
υφίστανται ανάµεσα στο νέο πίνακα και στους υπάρχοντες πίνακες της βάσης – αυτή
όµως η διαδικασία, θα µελετηθεί στο επόµενο κεφάλαιο.

ΕΙΣΑΓΩΓΗ ΠΙΝΑΚΑ

Η τέταρτη δυνατότητα που µας προσφέρεται όσον αφορά τη δηµιουργία κά-


ποιου πίνακα, είναι η εισαγωγή του από κάποια άλλη βάση δεδοµένων. Αυτή η ει-
σαγωγή µπορεί να αφορά, τόσο τη δοµή του πίνακα, όσο και τα δεδοµένα που πε-
ριλαµβάνονται σε αυτόν. Εάν εφαρµόσουµε αυτή τη διαδικασία, θα πρέπει αρχικά
να καθορίσουµε το αρχείο βάσεων δεδοµένων της Access, από το οποίο θα εισάγουµε
το νέο πίνακα, κάτι που γίνεται από το πλαίσιο διαλόγου του επόµενου σχήµατος.

Σχήµα 38 : Καθορισµός της βάσης δεδοµένων από την οποία θα εισάγουµε το νέο πίνακα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 138

Στο παράδειγµά µας θα κάνουµε εισαγωγή του πίνακα EMPLOYEE από τη


βάση δεδοµένων της εταιρείας, σε µία άλλη βάση. Για να το κάνουµε αυτό, επιλέγου-
µε το αρχείο company.mdb, και πατάµε το κουµπί µε τον τίτλο «Εισαγωγή». Στην
περίπτωση αυτή, θα εµφανιστεί στην οθόνη του υπολογιστή µας το πλαίσιο διαλόγου
που ακολουθεί:

Σχήµα 39 : Καθορισµός του είδους και του ονόµατος των αντικειµένων προς εισαγωγή

Το παράθυρο αυτό φέρει τον τίτλο «Εισαγωγή αντικειµένων», και όπως


µπορεί πολύ εύκολα να διαπιστωθεί, επιτρέπει την εισαγωγή όχι µόνο πινάκων αλ-
λά και όλων των βασικών αντικειµένων που υποστηρίζονται από την Access. Στο
παράδειγµα αυτό θα περιγράψουµε µόνο την εισαγωγή πινάκων, αλλά αυτή η διαδι-
κασία µπορεί να εφαρµοσθεί και για όλα τα υπόλοιπα αντικείµενα. Για να εισάγουµε
τον πίνακα EMPLOYEE τον επιλέγουµε µε το δεξί πλήκτρο του ποντικιού. Στο κά-
τω µέρος του παραθύρου που µπορεί να εµφανιστεί εάν χρησιµοποιήσουµε το κουµπί
«Επιλογές», µπορούµε να καθορίσουµε τα χαρακτηριστικά αυτής της διαδικασίας
εισαγωγής. Το πιο σηµαντικό από αυτά τα χαρακτηριστικά, είναι η δυνατότητα που
µας παρέχεται, να εισάγουµε όχι µόνο τη δοµή του πίνακα, αλλά και τα δεδοµένα
που περιέχονται σε αυτόν. Επίσης, εάν εισάγουµε περισσότερους από έναν πίνα-
κες, µπορούµε να κρατήσουµε και τις συσχετίσεις που ενδεχοµένως υφίστανται
ανάµεσά τους. Για να το κάνουµε αυτό επιλέγουµε το Check Box, που φέρει το όνο-
µα «Σχέσεις». Η τρίτη σηµαντική επιλογή αφορά τη διαδικασία εισαγωγής ερωτη-
µάτων, και µας επιτρέπει να εισάγουµε τα ερωτήµατα ως πίνακες, εάν κάτι τέτοιο
είναι επιθυµητό.

Η διαδικασία εισαγωγής των επιλεγµένων αντικειµένων, ολοκληρώνεται χρη-


σιµοποιώντας το κουµπί «OK». Μετά την ολοκλήρωση αυτής της διαδικασίας, τα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 139

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

ΣΥΝ∆ΕΣΗ ΠΙΝΑΚΑ

Η διαδικασία εισαγωγής ενός πίνακα που περιγράψαµε στην προηγούµενη


παράγραφο, αφορά την ενσωµάτωση της δοµής – και προαιρετικά των δεδοµένων
– ενός πίνακα κάποιας άλλης βάσης, στην τρέχουσα βάση. Η διαδικασία της σύν-
δεσης πραγµατοποιείται ακριβώς µε τον ίδιο τρόπο µε τη διαφορά πως τα δεδοµένα
που εισάγουµε δεν ενσωµατώνονται και διαµορφώνονται σύµφωνα µε τις προδια-
γραφές της Microsoft Access, έτσι ώστε να διατηρείται η δυνατότητα επεξεργα-
σίας τους από την εφαρµογή που τα δηµιούργησε. Οι πίνακες της βάσης που έχουν
συνδεθεί στην εφαρµογή µας, ξεχωρίζουν από τους άλλους πίνακες, εµφανίζοντας
ένα βέλος δίπλα από το σύµβολο του πίνακα, στο κεντρικό παράθυρο διαχείρισης
της εφαρµογής.

ΠΡΟΕΠΙΣΚΟΠΗΣΗ ΤΟΥ ΠΙΝΑΚΑ ΣΕ ΠΡΟΒΟΛΗ


ΦΥΛΛΟΥ ∆Ε∆ΟΜΕΝΩΝ

Έχοντας ολοκληρώσει τη σχεδίαση της δοµής των πινάκων της βάσης, µπο-
ρούµε τώρα να αρχίσουµε να καταχωρούµε δεδοµένα σε αυτούς. Για να το κάνουµε
αυτό, µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης της εφαρµογής, επιλέ-
γουµε τον πίνακα στον οποίο θέλουµε να καταχωρήσουµε τα δεδοµένα µας, και
στη συνέχεια πατάµε το κουµπί µε την ετικέτα «Άνοιγµα». Το επόµενο σχήµα, πα-
ρουσιάζει σε προβολή φύλλου δεδοµένων, τον πίνακα DEPENDENT που περιέχει τα
στοιχεία των προστατευόµενων µελών των υπαλλήλων της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 140

Σχήµα 40 : Προεπισκόπηση πίνακα σε προβολή φύλλου δεδοµένων

Από το παραπάνω σχήµα διαπιστώνουµε πως τα δεδοµένα του πίνακα είναι


οργανωµένα σε γραµµές και στήλες, µε τα πεδία της ίδιας γραµµής, να ανήκουν
στην ίδια εγγραφή του πίνακα. Η διαχείριση όλων αυτών των γραµµών και των
στηλών γίνεται όπως ακριβώς και στο Microsoft Excel. Έτσι για να επιλέξουµε µια
γραµµή, πατάµε το αριστερό πλήκτρο του ποντικιού πάνω στο γκρι κελί που βρίσκε-
ται αριστερά από την κάθε γραµµή, ενώ για να επιλέξουµε µια στήλη, πραγµατο-
ποιούµε την ίδια διαδικασία πάνω στο κελί που αναγράφει τον τίτλο της.

Σχήµα 41 : Επιλογή γραµµής και στήλης πίνακα σε προβολή φύλλου δεδοµένων

Έχοντας επιλέξει µια γραµµή ή µια στήλη, µπορούµε, χρησιµοποιώντας το δε-


ξί πλήκτρο του ποντικιού, να εµφανίσουµε ένα µενού επιλογών, που περιλαµβάνει
ένα σύνολο λειτουργιών οι οποίες εφαρµόζονται πάνω στις γραµµές και στις στήλες
του πίνακα. Αυτά τα δύο µενού επιλογών, παρουσιάζονται στο επόµενο σχήµα, και οι
λειτουργίες που περιλαµβάνουν σε γενικές γραµµές είναι οι ακόλουθες:

∆ηµιουργία εγγραφής : επιτρέπει τη δηµιουργία µιας νέας εγγραφής του


πίνακα. Η νέα εγγραφή δηµιουργείται πάντα στο τέλος του πίνακα, ανεξάρτητα µε τη
θέση της γραµµής που έχουµε επιλέξει.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 141

∆ιαγραφή εγγραφής : Επιτρέπει τη διαγραφή της επιλεγµένης εγγραφής


του πίνακα. Ας σηµειωθεί, πως αν ο εν λόγω πίνακας συσχετίζεται µε άλλους πί-
νακες της βάσης, αυτή η διαδικασία διαγραφής ενδέχεται να προκαλέσει και
διαγραφή συσχετιζόµενων εγγραφών σε άλλους πίνακες της βάσης, έτσι ώστε να
µην παραβιάζονται οι κανόνες ακεραιότητας. Για το λόγο αυτό, και σε συνδυασµό
µε το γεγονός πως οι διαδικασίες διαγραφής στη Microsoft Access, δεν είναι ανα-
στρέψιµες, θα πρέπει να είµαστε πολύ προσεκτικοί, κάθε φορά που πραγµατοποιούµε
τέτοιου είδους διαδικασίες.

Σχήµα 42 : Τα µενού επιλογών που


επιτρέπουν την εύκολη διαχείρισης
των γραµµών και των στηλών του
τρέχοντος πίνακα σε προβολή φύλ-
λου δεδοµένων (datasheet view).

Αποκοπή, Αντιγραφή και Επικόλληση εγγραφής : πρόκειται για τις συνή-


θεις εντολές οι οποίες υπάρχουν σε όλες τις εφαρµογές των Windows, και οι οποίες
επιτρέπουν την αντιγραφή και τη µετακίνηση εγγραφών ανάµεσα στους πίνακες
της βάσης. Είναι προφανές πως η διαδικασία της αντιγραφής της εγγραφής στον
ίδιο πίνακα δεν είναι επιτρεπτή, διότι θα προκαλέσει την εµφάνιση διπλότυπων
εγγραφών.

Ύψος γραµµής : Επιτρέπει τον καθορισµό του ύψους των γραµµών του πί-
νακα. Ας σηµειωθεί πως αυτή η µορφοποίηση αφορά όλες τις γραµµές ανεξάρτητα
από την εγγραφή που έχουµε επιλέξει.

Αύξουσα Ταξινόµηση και Φθίνουσα Ταξινόµηση : Οι λειτουργίες αυτές


προκαλούν την αύξουσα ή φθίνουσα ταξινόµηση των εγγραφών του πίνακα, ανά-
λογα µε τις τιµές των πεδίων της επιλεγµένης στήλης.

Αντιγραφή, Επικόλληση : Οι λειτουργίες αυτές επιτρέπουν την αντιγραφή


και επικόλληση της επιλεγµένης στήλης ανάµεσα στους πίνακες της βάσης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 8 : Πίνακες 142

Πλάτος στηλών : Επιτρέπει τον καθορισµό του πλάτους των στηλών του
πίνακα. Όπως και στην περίπτωση των εγγραφών, το νέο πλάτος θα εφαρµοσθεί σε
όλες τις στήλες του πίνακα, ανεξάρτητα από το ποια είναι η επιλεγµένη στήλη.

Απόκρυψη στηλών : Προκαλεί την απόκρυψη της επιλεγµένης στήλης, η


οποία δεν εµφανίζεται πλέον. Για να επανεµφανίσουµε τις στήλες που έχουµε απο-
κρύψει, θα µεταφερθούµε στο κεντρικό µενού επιλογών της Access, και από εκεί θα
επιλέξουµε «Μορφή» και στη συνέχεια «Επανεµφάνιση στηλών».

Σταθεροποίηση στηλών : Η σταθεροποίηση µιας στήλης επιτρέπει την προ-


επισκόπηση του περιεχοµένου της, σε οποιοδήποτε στήλη του πίνακα και αν βρι-
σκόµαστε. Αυτή η λειτουργία βρίσκει συνήθως εφαρµογή σε πίνακες µε µεγάλο πλή-
θος στηλών, η προεπισκόπηση των οποίων έχει ως αποτέλεσµα την κύλιση
(scrolling) των πρώτων στηλών προς τα αριστερά, και την απόκρυψή τους από την
οθόνη. Σταθεροποιώντας µια στήλη, αυτή µεταφέρεται πρώτη από αριστερά και
παραµένει συνεχώς ορατή χωρίς να επηρεάζεται από τη διαδικασία κύλισης των
στηλών που βρίσκονται µετά από αυτή.

Εύρεση : Η διαδικασία της εύρεσης µας επιτρέπει να αναζητήσουµε τιµές


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

Εισαγωγή στήλης : Η διαδικασία αυτή προκαλεί την εισαγωγή µιας και-


νούριας στήλης, η οποία δηµιουργείται αριστερά από την επιλεγµένη στήλη. Η
νέα στήλη αντιστοιχεί σε πεδίο µε τύπο δεδοµένων «Κείµενο» τα χαρακτηριστικά
του οποίου µπορούµε να τροποποιήσουµε, εάν µεταφερθούµε στην προβολή σχεδία-
σης του τρέχοντος πίνακα.

Στήλη αναζήτησης : επιτρέπει την εισαγωγή µιας στήλης η οποία θα πε-


ριέχει µια λίστα από τιµές που θα είναι και οι µοναδικές τις οποίες θα µπορεί να
χρησιµοποιήσει ο χρήστης. Αυτές οι τιµές µπορεί να προέρχονται από ένα πίνακα ή
από ένα ερώτηµα, το οποίο καθορίζεται µέσω ενός οδηγού σχεδίασης που επιτρέπει
την εύκολο καθορισµό των παραµέτρων της στήλης.

∆ιαγραφή στήλης, Μετονοµασία στήλης : επιτρέπουν τη διαγραφή και τη


µετονοµασία αντίστοιχα της επιλεγµένης στήλης.

Η ΜΕΤΑΚΙΝΗΣΗ ΑΝΑΜΕΣΑ ΣΤΙΣ ΕΓΓΡΑΦΕΣ ΤΟΥ ΠΙΝΑΚΑ

Η µετακίνηση του χρήστη ανάµεσα στις εγγραφές των πινάκων της βάσης
µπορεί να γίνει πάρα πολύ εύκολα χρησιµοποιώντας τα πλήκτρα κίνησης του δρο-
µέα. Ωστόσο υπάρχει η δυνατότητα να µετακινηθούµε ανάµεσα στις εγγραφές του
πίνακα χρησιµοποιώντας µόνο το ποντίκι, και χρησιµοποιώντας τα κουµπιά µετακί-
νησης που βρίσκονται στο κάτω µέρος του πίνακα, όταν αυτός βρίσκεται σε προβολή
φύλλου δεδοµένων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 143

Σχήµα 43 : Τα κουµπιά µετακίνησης ανάµεσα στις εγγραφές του πίνακα

Τα πέντε κουµπιά µετακίνησης του παρουσιάζονται στο παραπάνω σχήµα,


λειτουργούν µε τον ακόλουθο τρόπο:

Μεταφέρει το χρήστη στην πρώτη εγγραφή του πίνακα.

Μεταφέρει το χρήστη στην αµέσως προηγούµενη εγγραφή από αυτή που


βρίσκεται τώρα. Εάν η τρέχουσα εγγραφή είναι η πρώτη εγγραφή του πίνα-
κα, το κουµπί αυτό εµφανίζεται απενεργοποιηµένο.
Μεταφέρει το χρήστη στην αµέσως επόµενη εγγραφή από αυτή που βρί-
σκεται τώρα. Εάν η τρέχουσα εγγραφή είναι η τελευταία εγγραφή του πίνα-
κα, το κουµπί αυτό εµφανίζεται απενεργοποιηµένο.

Μεταφέρει το χρήση στην τελευταία εγγραφή του πίνακα

Μεταφέρει το χρήστη στη θέση νέας εγγραφής, επιτρέποντας έτσι την


καταχώρηση νέων δεδοµένων. Η θέση νέας εγγραφής βρίσκεται αµέσως
µετά την τελευταία εγγραφή του πίνακα.

Εκτός από τα κουµπιά µετακίνησης ανάµεσα στις εγγραφές, στο κάτω µέρος
του πίνακα υπάρχει ένα πλαίσιο κειµένου που εµφανίζει τον αριθµό της τρέχουσας
εγγραφής, ενώ επιπλέον αναγράφεται και το συνολικό πλήθος των εγγραφών του
πίνακα. Στο παράδειγµά µας, ο χρήστης βρίσκεται στην έκτη εγγραφή, ενώ ο πίνα-
κας διαθέτει συνολικά οκτώ εγγραφές που περιέχουν τα προσωπικά δεδοµένα των
υπαλλήλων της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9
Συσχετίσεις
Το κεφάλαιο αυτό διαπραγµατεύεται τη δηµιουργία και
διαχείριση των συσχετίσεων που υφίστανται ανάµεσα στους
πίνακες µιας σχεσιακής βάσης δεδοµένων.

Όπως έχει ήδη αναφερθεί, ο ρόλος των συσχετίσεων (relationships) σε µια


σχεσιακή βάση δεδοµένων, είναι η διασύνδεση των πινάκων της βάσης, µε τέτοιο
τρόπο, ώστε να είναι δυνατή η ανάκτηση δεδοµένων, που συσχετίζονται µεταξύ τους,
αλλά βρίσκονται αποθηκευµένα σε διαφορετικούς πίνακες. Ο τρόπος µε τον οποίο
λαµβάνουν χώρα αυτού του είδους οι συσχετίσεις, καθορίζεται κατά το στάδιο του
λογικού σχεδιασµού της βάσης, που οδηγεί τελικά στη δηµιουργία του µοντέλου ο-
ντοτήτων συσχετίσεων (entity – relationship model).

Τα βασικά χαρακτηριστικά αυτού του µοντέλου, περιλαµβάνουν τις οντότη-


τες που συµµετέχουν στο σύστηµα, καθώς και τις συσχετίσεις που υφίστανται
ανάµεσα σε αυτές τις οντότητες. Αυτές οι συσχετίσεις καθορίζουν µε µονοσήµαντο
τρόπο το είδος της αλληλεπίδρασης που υφίσταται ανάµεσα στις οντότητες της εφαρ-
µογής, και χαρακτηρίζονται από το βαθµό και την πολλαπλότητά τους. Ο βαθµός
(degree) της συσχέτισης καθορίζει το πλήθος των τύπων οντότητας που συµµετέχουν
σε αυτή, ενώ η πολλαπλότητά της (cardinality) έχει να κάνει µε το πλήθος των
στιγµιότυπων του κάθε τύπου οντότητας που χρησιµοποιούνται στη σχέση. Οι πιο
πολλές συσχετίσεις ορίζονται ανάµεσα σε δύο τύπους οντότητας, ενώ όσον αφορά
την πολλαπλότητά της, µια συσχέτιση µπορεί να χαρακτηριστεί ως συσχέτιση 1:1,
1:Ν ή Μ:Ν.

Έχοντας δηµιουργήσει το µοντέλο οντοτήτων συσχετίσεων για την εφαρµογή


που πρόκειται να υλοποιήσουµε, µπορούµε να κατασκευάσουµε πάρα πολύ εύκολα
το σχεσιακό µοντέλο, χρησιµοποιώντας τα βήµατα που περιγράψαµε στο θεωρητικό
µέρος των σηµειώσεων. Εναλλακτικά µπορούµε να ορίσουµε τους πίνακες της βάσης
και στη συνέχεια, εφαρµόζοντας τις αρχές της κανονικοποίησης, να καταλήξουµε τε-
λικά σε ένα σχήµα που να ικανοποιεί τις ανάγκες µας. Και στις δύο περιπτώσεις το
αποτέλεσµα είναι ένα σύνολο πινάκων που αναπαριστούν τις οντότητες και τις συ-
σχετίσεις της εφαρµογής και του οποίου η δοµή είναι τέτοια που να διασφαλίζει τη
σωστή διαχείριση των δεδοµένων της εφαρµογής, όπως αυτή επιβάλλεται από τους
κανόνες ακεραιότητας οι οποίοι θα πρέπει να ικανοποιούνται σε κάθε περίπτωση.
Κεφάλαιο 9 : Συσχετίσεις 146

Στις επόµενες σελίδες παρουσιάζεται ο τρόπος µε τον οποίο µπορούµε να δη-


µιουργήσουµε και να επεξεργαστούµε τις συσχετίσεις που υφίστανται ανάµεσα στους
πίνακες της βάσης, µέσα από το περιβάλλον της Microsoft Access.

∆ΗΜΙΟΥΡΓΙΑ ΣΥΣΧΕΤΙΣΕΩΝ ΣΤΗ MICROSOFT ACCESS

Η δηµιουργία και διαχείριση συσχετίσεων στη Microsoft Access, µπορεί να


πραγµατοποιηθεί µέσα από ένα ειδικό πλαίσιο διαλόγου το οποίο εµφανίζεται εάν
από το κεντρικό µενού επιλογών της εφαρµογής, επιλέξουµε «Εργαλεία» και στη συ-
νέχεια «Σχέσεις…». Στην περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή
µας το παράθυρο του επόµενου σχήµατος.

Σχήµα 44 : Το κεντρικό παράθυρο διαχείρισης συσχετίσεων στη Microsoft Access

Το παράθυρο αυτό αρχικά είναι άδειο, διότι ακόµη δεν έχει ορισθεί καµία
σχέση. Για να ορίσουµε δε αυτού του είδους τις συσχετίσεις, θα πρέπει να καθορί-
σουµε δύο ειδών πληροφορίες: (α) τους πίνακες µεταξύ των οποίων θα ορίσουµε
τη συσχέτιση, και (β) τα πεδία αυτών των πινάκων τα οποία και θα συσχετιστούν
µεταξύ τους. Στις σελίδες που ακολουθούν, θα χρησιµοποιήσουµε ως παράδειγµα, τη
βάση δεδοµένων της εταιρείας που αναλύσαµε στο θεωρητικό µέρος των σηµειώσε-
ων.

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως οι συσχετίσεις ανάµεσα


στους πίνακες της βάσης, θα πρέπει να ορισθούνε πριν την καταχώρηση δεδοµένων
σε αυτούς. Εάν καταχωρήσουµε δεδοµένα σε ένα πίνακα και στη συνέχεια επιχειρή-
σουµε να τον συµπεριλάβουµε σε κάποια συσχέτιση, είναι πιθανόν να αντιµετωπί-
σουµε προβλήµατα στην περίπτωση κατά την οποία λαµβάνει χώρα παραβίαση κά-
ποιων από τους κανόνες ακεραιότητας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 147

Για να καθορίσουµε τους πίνακες που θα συµµετέχουν σε κάποια συσχέτιση,


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

Σχήµα 45 : Καθορισµός των πινάκων που θα συµµετάσχουν στη νέα συσχέτιση

Το παράθυρο αυτό φέρει τον τίτλο «Εµφάνιση Πίνακα», και περιέχει τα ο-


νόµατα όλων των πινάκων που περιλαµβάνονται στη βάση δεδοµένων της εται-
ρείας. Εκτός από τους πίνακες, το παράθυρο αυτό περιλαµβάνει και τα ερωτήµατα
που έχουµε δηµιουργήσει, και τα οποία όντας στην πραγµατικότητα πίνακες µπορούν
και αυτά να συµµετάσχουν στις συσχετίσεις της εφαρµογής. Προκειµένου τώρα να
καθορίσουµε κάποιο πίνακα ο οποίος θα χρησιµοποιηθεί σε κάποια συσχέτιση, δεν
έχουµε παρά να τον επιλέξουµε µε το ποντίκι, και να πατήσουµε το κουµπί «Προ-
σθήκη». Στην περίπτωση αυτή ο πίνακας θα εµφανιστεί στο κεντρικό παράθυρο δια-
χείρισης των συσχετίσεων, όπως φαίνεται στο ακόλουθο σχήµα:

Σχήµα 46 : Προσθήκη πινάκων στο κεντρικό παράθυρο των συσχετίσεων

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 148

Στο παραπάνω παράδειγµα επιλέξαµε τον πίνακα EMPLOYEE ως τον πίνα-


κα που θα χρησιµοποιήσουµε στη νέα συσχέτιση. Ως ένα παράδειγµα µιας τέτοιας
συσχέτισης, ας δηµιουργήσουµε τη συσχέτιση WORKS_FOR, η οποία συσχετίζει
τους τύπους οντότητας DEPARTMENT και EMPLOYEE. Η συσχέτιση αυτή έχει
πολλαπλότητα 1:N – ένα τµήµα περιλαµβάνει πολλούς υπαλλήλους. Σύµφωνα µε τη
βασική θεωρία, προκειµένου να υλοποιήσουµε αυτή τη συσχέτιση θα πρέπει να προ-
σθέσουµε το πρωτεύον κλειδί του πίνακα DEPARTMENT στον πίνακα
EMPLOYEE. Για το λόγο αυτό ο πίνακας EMPLOYEE περιλαµβάνει εκτός από τα
πεδία του, και το πεδίο DNO το οποίο αντιστοιχεί στο πεδίο DNUMBER του πίνακα
DEPARTMENT, και αποτελεί, σύµφωνα µε τα όσα έχουµε αναφέρει στο κεφάλαιο
του λογικού σχεδιασµού της βάσης, ξένο κλειδί (foreign key). Για να συνεχίσουµε
τώρα τη δηµιουργία αυτής της συσχέτισης, επιλέγουµε από το παραπάνω παράθυρο
τον πίνακα DEPARTMENT, και χρησιµοποιώντας την ίδια διαδικασία, τον εµφανί-
ζουµε και αυτόν στο κεντρικό παράθυρο διαχείρισης συσχετίσεων της εφαρµογής.

Σχήµα 47 : Οι πίνακες EMPLOYEE και DEPARTMENT που θα συµµετάσχουν στη συσχέ-


τιση WORKS_FOR

Παρατηρώντας το παραπάνω σχήµα, δεν είναι δύσκολο να διαπιστώσει κα-


νείς, πως ο κάθε πίνακας εµφανίζεται µαζί µε όλα τα πεδία που περιέχει, και πως
το πρωτεύον κλειδί του είναι γραµµένο µε έντονα γράµµατα. Στο παράδειγµά µας,
το πρωτεύον κλειδί του πίνακα EMPLOYEE είναι το πεδίο SSN, ενώ το πρωτεύον
κλειδί του πίνακα DEPARTMENT είναι το πεδίο DNUMBER. Για να δηµιουργή-
σουµε τώρα τη συσχέτιση ανάµεσα σε αυτούς τους πίνακες, θα πρέπει να ανατρέξου-
µε στο λογικό µοντέλο σχεδιασµού της βάσης και να εντοπίσουµε το κοινό πεδίο αυ-
τών των πινάκων. Σύµφωνα µε τα όσα αναφέραµε στην προηγούµενη παράγραφο, ο
κωδικός του τµήµατος στο οποίο εργάζεται ο κάθε υπάλληλος, καταχωρείται στο πε-
δίο DNO του πίνακα EMPLOYEE. Εποµένως η συσχέτιση ανάµεσα στους πίνακες
EMPLOYEE και DEPARTMENT, θα λάβει χώρα δια της συσχέτισης των πεδίων
DNO και DNUMBER αυτών των πινάκων. Στην ορολογία της Microsoft Access, ο
πίνακας DEPARTMENT στον οποίο ανήκει το πρωτεύον κλειδί DNUMBER ονο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 149

µάζεται πρωτεύοντας πίνακας, ενώ ο πίνακας EMPLOYEE στον οποίο ανήκει το


ξένο κλειδί DNO ονοµάζεται σχετιζόµενος πίνακας.

Η δηµιουργία της συσχέτισης ανάµεσα σε αυτά τα δύο πεδία γίνεται πάρα πο-
λύ εύκολα χρησιµοποιώντας το ποντίκι. Αρχικά επιλέγουµε το πεδίο DNUMBER του
πίνακα DEPARTMENT, χρησιµοποιώντας το αριστερό πλήκτρο του ποντικιού. Στη
συνέχεια, κρατώντας συνεχώς πατηµένο αυτό το πλήκτρο, µετακινούµε το ποντί-
κι, µέχρι ο δείκτης του να έλθει πάνω από το πεδίο του άλλου πίνακα που θέλου-
µε να συµµετάσχει στη συσχέτιση – στην προκειµένη περίπτωση το πεδίο DNO του
πίνακα EMPLOYEE. Μόλις ο δείκτης του ποντικιού έλθει ακριβώς πάνω από αυτό
το πεδίο, απελευθερώνουµε το δεξί πλήκτρο του που όλο αυτό το διάστηµα κρατού-
σαµε πατηµένο. Εάν όλη αυτή η διαδικασία έγινε σωστά, τότε στην οθόνη του υπο-
λογιστή µας θα εµφανιστεί το επόµενο πλαίσιο διαλόγου:

Σχήµα 48 : Καθορισµός των ιδιοτήτων της νέας συσχέτισης

Αυτό το παράθυρο φέρει τον τίτλο «Επεξεργασία Σχέσεων» και επιτρέπει


τον καθορισµό των χαρακτηριστικών της σχέσης που πρόκειται να δηµιουργήσουµε.
Στο επάνω µέρος του και στα πεδία «Πίνακας / Ερώτηµα» και «Σχετιζόµενος πίνα-
κας / Ερώτηµα» εµφανίζει τα ονόµατα των δύο πινάκων – ή ερωτηµάτων – που θα
συµµετέχουν στη νέα συσχέτιση. Τα πεδία αυτά είναι απενεργοποιηµένα, και εποµέ-
νως αυτοί οι πίνακες δεν µπορούν να αντικατασταθούν από άλλους. Ακριβώς κάτω
από τα ονόµατα των πινάκων, εµφανίζονται τα συσχετιζόµενα πεδία τους. Στο παρά-
δειγµά µας, το πεδίο DΝUMBER του πίνακα DEPARTMENT πρόκειται να συσχε-
τιστεί µε το πεδίο DNO του πίνακα EMPLOYEE. Τα πεδία αυτά µπορούν να αντι-
κατασταθούν από άλλα, εάν κάτι τέτοιο είναι επιθυµητό. Για να λάβει χώρα µια τέ-
τοια αντικατάσταση, εµφανίζουµε τα περιεχόµενα του πλαισίου λίστας που περιλαµ-
βάνει το πεδίο που θέλουµε να αντικαταστήσουµε, και επιλέγουµε στη θέση του, κά-
ποιο άλλο πεδίο:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 150

Σχήµα 49 : Καθορισµός των συσχετιζόµενων πεδίων των δύο πινάκων

Επιπλέον µπορούµε για τους ίδιους πίνακες να δηµιουργήσουµε και δεύτερη


συσχέτιση ανάµεσα σε άλλα πεδία, χρησιµοποιώντας το κουµπί «∆ηµιουργία νέ-
ου…» και επιλέγοντας αυτά τα επιπλέον πεδία από το επόµενο πλαίσιο διαλόγου.

Σχήµα 50 : ∆ηµιουργία και δεύτερης συσχέτισης ανάµεσα στους ίδιους πίνακες

Πριν προχωρήσουµε στα επόµενα βήµατα της διαδικασίας, είναι σηµαντικό


να αναφέρουµε στο σηµείο αυτό, κάποια πράγµατα σχετικά µε τη φύση των πεδίων
που συσχετίζουµε. Στις πιο πολλές περιπτώσεις, αυτά τα πεδία είναι πεδία κλειδιά
(key attributes), που ταυτοποιούν τις εγγραφές των πινάκων µε µοναδικό τρόπο. Πιο
συγκεκριµένα, το ένα από τα πεδία είναι το πρωτεύον κλειδί του ενός πίνακα, ενώ
το άλλο είναι το ξένο κλειδί που έχει προστεθεί στον άλλο πίνακα για να υλο-
ποιήσει τη σχέση πολλαπλότητας 1:N που υφίσταται ανάµεσά στον πρωτεύοντα
και στο συσχετιζόµενο πίνακα. Κατά τη διαδικασία συσχέτισης αυτών πεδίων µε τη
διαδικασία που παρουσιάσαµε στις προηγούµενες παραγράφους, η κίνηση του ποντι-
κιού, γίνεται από το πρωτεύον προς το ξένο κλειδί, ή ισοδύναµα, από τον πρωτεύ-
οντα προς τον σχετιζόµενο πίνακα. Τα δύο πεδία που πρόκειται να συσχετίσουµε,
δεν είναι υποχρεωτικό να έχουν το ίδιο όνοµα, αλλά θα πρέπει υποχρεωτικά να
είναι του ιδίου τύπου δεδοµένων. Υπάρχουν ωστόσο δύο περιπτώσεις στις οποίες
αυτός ο περιορισµός δεν υφίσταται. Η πρώτη περίπτωση αφορά τη δυνατότητα συ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 151

σχετισµού πεδίου αυτόµατης αρίθµησης µε πεδίο αριθµού του οποίου όµως η ιδιό-
τητα «Μέγεθος πεδίου» έχει τεθεί στην τιµή «Ακέραιος µεγάλου µήκους». Η δεύ-
τερη περίπτωση, επιτρέπει το συσχετισµό πεδίου αυτόµατης αρίθµησης µε αριθµη-
τικό πεδίο, εφόσον όµως η ιδιότητα «Μέγεθος πεδίου» και των δύο πεδίων έχει την
τιµή «Αναγνωριστικό αναπαραγωγής». Τέλος όταν τα αντίστοιχα πεδία είναι πεδία
αριθµών, θα πρέπει να έχουν την ίδια ρύθµιση στην ιδιότητα «Μέγεθος πεδίου».

Σε περίπτωση κατά την οποία επιχειρούµε να συσχετίσουµε πεδία που δεν εί-
ναι συµβατά µεταξύ τους σύµφωνα µε τους κανόνες που θέσαµε παραπάνω, η Micro-
soft Access εµφανίζει ένα µήνυµα λάθους και δεν επιτρέπει τη δηµιουργία αυτής της
συσχέτισης. Αυτό για παράδειγµα συµβαίνει εάν επιχειρήσουµε να συσχετίσουµε το
πεδίο FName του πίνακα EMPLOYEE που είναι τύπου «Κείµενο» µε το πεδίο
DNUMBER του πίνακα DEPARTMENT που είναι αριθµητικό πεδίο.

Έχοντας καθορίσει τα πεδία των πινάκων που θα συµµετάσχουν στη νέα συ-
σχέτιση, µπορούµε να δηµιουργήσουµε τη συσχέτιση πατώντας το κουµπί που φέρει
τον τίτλο «∆ηµιουργία» και βρίσκεται στο δεξί µέρος του παραθύρου. Για να ακυ-
ρώσουµε την όλη διαδικασία, χρησιµοποιούµε το κουµπί «Άκυρο». Για την ώρα ό-
µως και πριν κλείσουµε το παράθυρο, ας µελετήσουµε τα υπόλοιπα πλαίσια ελέγχου
που εµφανίζονται σε αυτό. Καταρχήν, στο κάτω µέρος του παραθύρου, και δίπλα από
το πλαίσιο κειµένου που φέρει τον τίτλο «Τύπος Συσχέτισης», εµφανίζεται η φράση
«ένα προς πολλά». Αυτή προφανώς είναι και η πολλαπλότητα της συσχέτισης που
πρόκειται να δηµιουργήσουµε. Όπως µπορούµε εύκολα να παρατηρήσουµε, δεν υ-
πάρχει η δυνατότητα να µεταβάλλουµε τον τύπο της συσχέτισης. Αυτό γίνεται
διότι µε τον τρόπο που περιγράψαµε στις προηγούµενες σελίδες, µπορούµε να κατα-
σκευάσουµε µόνο εκείνες τις συσχετίσεις των οποίων η πολλαπλότητα είναι 1:Ν. Ο
τρόπος µε τον οποίο κατασκευάζουµε συσχετίσεις διαφορετικής πολλαπλότητας, θα
παρουσιαστεί στη συνέχεια.

Το άλλο σηµαντικό στοιχείο που εµφανίζεται στο παραπάνω παράθυρο, είναι


ένα πλαίσιο ελέγχου που φέρει τον τίτλο «Ενεργοποίηση ακεραιότητας αναφο-
ρών». Αυτό το πλαίσιο, την πρώτη φορά που εµφανίζεται το παράθυρο, δεν είναι επι-
λεγµένο. Εάν το επιλέξουµε ενεργοποιούνται άλλα δύο πλαίσια ελέγχου που βρίσκο-
νται κάτω από αυτό, και τα οποία φέρουν τους τίτλους «∆ιαδοχική ενηµέρωση των
σχετικών εγγραφών» και «∆ιαδοχική διαγραφή των σχετικών εγγραφών» αντί-
στοιχα. Ενεργοποιώντας αυτά τα δύο πλαίσια επιτρέπουµε στην εφαρµογή να δια-
χειριστεί τις διαδικασίες ενηµέρωσης και διαγραφής δεδοµένων από τους πίνα-
κες, έτσι ώστε να µην παραβιάζονται οι κανόνες ακεραιότητας (integrity con-
straints) που διασφαλίζουν τη συνέπεια των δεδοµένων της εφαρµογής.

Για να κατανοήσουµε καλύτερα αυτή τη διαδικασία, ας επιστρέψουµε για λίγο


στη θεωρητική πλευρά του θέµατος. Όπως έχουµε αναφέρει κατά το στάδιο της περι-
γραφής του σχεσιακού µοντέλου, ένα από τα πιο σοβαρά προβλήµατα που χαρα-
κτηρίζουν την οµαδοποίηση των δεδοµένων σε έναν ή περισσότερους πίνακες,
είναι οι διάφορες ανωµαλίες εισαγωγής, τροποποίησης και διαγραφής εγγραφών,
οι οποίες εφόσον εµφανιστούν, οδηγούν σε παραβίαση των κανόνων ακεραιότη-
τας. Ένα χαρακτηριστικό παράδειγµα µιας τέτοιας περίπτωσης, είναι η διαγραφή κά-
ποιου από τα τµήµατα της εταιρείας. Επειδή στον πίνακα EMPLOYEE που περιέχει
τα προσωπικά στοιχεία των υπαλλήλων υπάρχει το πεδίο DNO που διατηρεί τον κω-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 152

δικό του τµήµατος στο οποίο εργάζεται ο κάθε υπάλληλος, είναι προφανές, πως η
διαγραφή του τµήµατος από τον πίνακα DEPARTMENT του οποίου ο κωδικός υ-
πάρχει στο πεδίο DNO κάποιας εγγραφής του πίνακα EMPLOYEE, θα οδηγήσει στη
δηµιουργία ασυνεπών δεδοµένων, διότι πλέον η εν λόγω εγγραφή θα παραπέµπει σε
κάποιο ανύπαρκτο τµήµα. Το ίδιο πρόβληµα θα παρουσιαστεί και στην περίπτωση
κατά την οποία λάβει χώρα αλλαγή του κωδικού για αυτό το τµήµα. Εάν στους άλ-
λους πίνακες της βάσης, υπάρχουν εγγραφές που να αναφέρονται στο τµήµα του ο-
ποίου τον κωδικό θέλουµε να µεταβάλλουµε, τότε η αλλαγή αυτού του κωδικού θα
οδηγήσει σε παραβίαση του δεύτερου κανόνα της ακεραιότητας δεδοµένων (ref-
erential integrity constraint).

Προκειµένου να αποτρέψουµε την εµφάνιση τέτοιου είδους προβληµάτων, θα


πρέπει όλες αυτές οι διαδικασίες τροποποίησης και διαγραφής εγγραφών από
τους πίνακες, να πραγµατοποιούνται, εφ όσον πρώτα διαπιστώσουµε πως δεν
παραβιάζουν τους κανόνες ακεραιότητας. Τι θα συµβεί όµως, στην περίπτωση κατά
την οποία λαµβάνει χώρα, παραβίαση αυτών των κανόνων? Το πιο απλό πράγµα που
µπορούµε να κάνουµε, είναι να απαγορεύσουµε την πραγµατοποίηση αυτών των
µεταβολών. Αυτό όµως δεν είναι η βέλτιστη λύση για όλες τις περιπτώσεις, διότι γε-
νικά, τα δεδοµένα που καταχωρούνται στους πίνακες µιας βάσης, χαρακτηρίζονται
από µεταβολές των τιµών τους. Για το λόγο αυτό, εκείνο που γίνεται στην πράξη,
είναι να πραγµατοποιούνται οι επιθυµητές διαδικασίες διαγραφής και τροποποί-
ησης εγγραφών, και στη συνέχεια, τα δεδοµένα των άλλων πινάκων που συσχετί-
ζονται µε την εγγραφή που τροποποιήθηκε ή διαγράφηκε, να υφίσταται την ανά-
λογη µεταβολή, έτσι ώστε οι κανόνες ακεραιότητας να συνεχίζουν να ισχύουν.
Αυτό σηµαίνει πως µπορούµε να αλλάξουµε τον κωδικό κάποιου τµήµατος, αλλά στη
συνέχεια θα πρέπει να πραγµατοποιήσουµε αυτή την αλλαγή και σε όλες τις σχετικές
εγγραφές του πίνακα EMPLOYEE έτσι ώστε το πεδίο DNO να συνεχίσει να παρα-
πέµπει στο σωστό τµήµα. Με τον ίδιο τρόπο εάν διαγράψουµε κάποιο PROJECT, θα
πρέπει να αφαιρέσουµε από τον πίνακα WORKS_ON όλες τις εγγραφές οι οποίες
παραπέµπουν σε αυτό το PROJECT.

Είναι σηµαντικό να αναφέρουµε στο σηµείο αυτό, πως σε αντίθεση µε τη δια-


δικασία της τροποποίησης εγγραφών, για την οποία µπορούµε να εφαρµόσουµε την
παραπάνω διαδικασία χωρίς κανένα πρόβληµα, η διαγραφή µιας εγγραφής από τη
βάση, θα πρέπει να γίνεται µε πολύ µεγαλύτερη προσοχή. Ας θεωρήσουµε για πα-
ράδειγµα τους πίνακες EMPLOYEE και DEPENDENT οι οποίοι περιέχουν πληρο-
φορίες για τους υπαλλήλους της εταιρείας και για τα προστατευόµενα µέλη τους. Ε-
πειδή ο τύπος οντότητας DEPENDENT είναι ασθενής τύπος οντότητας (weak en-
tity type) και άµεσα εξαρτώµενος από τον τύπο οντότητας EMPLOYEE, είναι προ-
φανές, πως η διαγραφή κάποιου υπαλλήλου από τη βάση – η οποία σύµφωνα µε τα
όσα αναφέραµε στην προηγούµενη παράγραφο θα οδηγήσει και στη διαγραφή όλων
των σχετικών εγγραφών από τον πίνακα DEPENDENT – µπορεί να πραγµατοποιη-
θεί χωρίς κανένα πρόβληµα. Πράγµατι, εφ όσον κάποιος εργαζόµενος αποχωρήσει
από την εταιρεία, δεν έχουµε κανένα λόγο να διατηρούµε τις πληροφορίες που αφο-
ρούν τα µέλη της οικογενείας του – και εποµένως µπορούµε να τις διαγράψουµε µε
ασφάλεια. ∆ε συµβαίνει όµως το ίδιο και µε τους πίνακες EMPLOYEE και
DEPARTMENT οι οποίοι αντιστοιχούν σε ισχυρούς τύπους οντότητας ανεξάρτη-
τους µεταξύ τους. Η συσχέτιση ανάµεσα σε αυτούς τους πίνακες, είναι N:1 και το πε-
δίο DNO του πίνακα EMPLOYEE είναι το ξένο κλειδί που χρησιµοποιείται για να

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 153

υλοποιήσει αυτή τη συσχέτιση. Ωστόσο, η διαγραφή κάποιας εγγραφής από τον πίνα-
κα DEPARTMENT δεν θα πρέπει να οδηγήσει στη διαγραφή όλων των υπαλλήλων
της εταιρείας που δουλεύουν σε αυτό το τµήµα, καθόσον αυτοί θα εξακολουθήσουν
να ανήκουν στην εταιρεία και απλά θα τοποθετηθούν σε κάποιο άλλο τµήµα. Σε µια
τέτοια περίπτωση, θα πρέπει να εντοπίσουµε τους υπαλλήλους που συσχετίζονται
µε το τµήµα που πρόκειται να διαγράψουµε, και να τοποθετήσουµε στο πεδίο
DNO την τιµή NULL. Με τον τρόπο αυτό, δηλώνουµε πως αυτοί οι υπάλληλοι δεν
ανήκουν σε κανένα τµήµα.

Όλες αυτές οι διαδικασίες οι οποίες διασφαλίζουν τη συνέπεια των δεδοµένων


της εφαρµογής, υποστηρίζονται πλήρως από τη Microsoft Access. Αυτό ωστόσο ι-
σχύει εφόσον πληρούνται τρεις προϋποθέσεις : (α) το πεδίο που χρησιµοποιείται
για τη σχέση από τον πρωτεύοντα πίνακα είναι πρωτεύον κλειδί ή έχει µοναδικό
ευρετήριο, (β) τα συσχετισµένα πεδία είναι του ίδιου τύπου δεδοµένων και (γ) οι
δύο πίνακες ανήκουν στην ίδια βάση δεδοµένων της Microsoft Access. Ας δούµε
τώρα αναλυτικά µε ποιο τρόπο χρησιµοποιούµε αυτά τα πλαίσια ελέγχου.

Εάν θέλουµε να ενεργοποιήσουµε το µηχανισµό ελέγχου της ισχύος των κα-


νόνων ακεραιότητας, επιλέγουµε το πλαίσιο ελέγχου που φέρει τον τίτλο «Ενεργο-
ποίηση ακεραιότητας αναφορών». Κάνοντας µόνο αυτή την επιλογή και αφήνοντας
ανενεργά τα άλλα δύο πλαίσια που βρίσκονται ακριβώς από κάτω, επιβάλλουµε στην
εφαρµογή να ελέγχει εάν οι διαδικασίες που πραγµατοποιούµε επηρεάζουν τις
σχετικές εγγραφές των άλλων πινάκων µε τρόπο που να παραβιάζονται οι κανό-
νες ακεραιότητας. Στην περίπτωση δε που λαµβάνει χώρα παραβίαση αυτών των
κανόνων, η Access απαγορεύει την πραγµατοποίηση αυτών των διαδικασιών, εµφανί-
ζοντας στο χρήστη ένα µήνυµα λάθους. Έτσι εάν επιχειρήσουµε να διαγράψουµε από
τον πίνακα DEPARTMENT το τµήµα µε κωδικό αριθµό 20, θα εµφανιστεί στην ο-
θόνη µας το επόµενο µήνυµα που θα µας γνωστοποιεί πως αυτή η διαγραφή δεν είναι
επιτρεπτή για τους λόγους που εξηγήσαµε παραπάνω.

Σχήµα 51 : Μήνυµα λάθους που εµφανίζεται κατά την προσπάθεια διαγραφής δεδοµένων που
συσχετίζονται µε εγγραφές άλλων πινάκων της βάσης..

Το παραπάνω µήνυµα δεν θα εµφανιστεί εάν δεν ενεργοποιήσουµε τον έλεγχο


των κανόνων ακεραιότητας. Στην περίπτωση αυτή, θα λάβει χώρα από τη βάση η δια-
γραφή αυτού του τµήµατος, κάτι που όµως θα οδηγήσει στη δηµιουργία ασυνεπών
δεδοµένων.

Σε περιπτώσεις κατά τις οποίες επιθυµούµε οπωσδήποτε την πραγµατοποίηση


των διαδικασιών µεταβολής του περιεχοµένου της βάσης αλλά µε τρόπο ώστε να δια-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 154

τηρούνται οι κανόνες ακεραιότητας, µπορούµε να χρησιµοποιήσουµε και τα άλλα δύο


πλαίσια ελέγχου εκ των οποίων το πρώτο αφορά τη διαδικασία της τροποποίησης
εγγραφών ενώ το δεύτερο τη διαδικασία της διαγραφής εγγραφών. Πιο συγκεκρι-
µένα επιλέγοντας το πλαίσιο «∆ιαδοχική ενηµέρωση των σχετικών εγγραφών»,
κάθε φορά που αλλάζουµε το πρωτεύον κλειδί µιας εγγραφής στον πρωτεύοντα πίνα-
κα, θα λαµβάνει χώρα αυτόµατη τροποποίηση αυτής της τιµής σε όλες τις σχετι-
κές εγγραφές των άλλων πινάκων. Για παράδειγµα, εάν στον πίνακα
DEPARTMENT αλλάξουµε τον κωδικό του τµήµατος Research από 5 σε 6, αυτή η
αλλαγή θα γίνει αυτόµατα σε όλες τις εγγραφές του πίνακα EMPLOYEE που έχουν
αυτή την τιµή στο πεδίο DNO. Με τον ίδιο τρόπο, εάν επιλέξουµε το πλαίσιο «∆ια-
δοχική διαγραφή των σχετικών εγγραφών», η διαγραφή µιας εγγραφής στον πρω-
τεύοντα πίνακα, θα προκαλέσει και την αυτόµατη διαγραφή όλων των σχετικών εγ-
γραφών στους άλλους πίνακες της βάσης. Με τον τρόπο αυτό, η διαγραφή κάποιας
εγγραφής από τον πίνακα EMPLOYEE θα προκαλέσει και τη διαγραφή όλων των
σχετικών εγγραφών στον πίνακα DEPENDENT. Ας σηµειωθεί πως η διαγραφή αυ-
τών των εγγραφών δεν θα γίνει χωρίς τη θέλησή µας αλλά µόνο αν απαντήσουµε κα-
ταφατικά στο ερώτηµα που µας υποβάλλεται µέσα από το ακόλουθο ενηµερωτικό
µήνυµα που εµφανίζεται στην οθόνη µας.

Σχήµα 52 : Η διαγραφή της εγγραφής από κάποιο πίνακα θα προκαλέσει και τη διαγραφή των
σχετιζόµενων εγγραφών στους άλλους πίνακες εφ όσον ο χρήστης απαντήσει καταφατικά στο παραπά-
νω ερώτηµα.

Το τελευταίο χαρακτηριστικό της νέας συσχέτισης που καθορίζεται µέσα από


το παράθυρο «Επεξεργασία Σχέσεων», έχει να κάνει µε τον τύπο του συνδέσµου
που ορίζεται ανάµεσα στους δύο πίνακες. Για να καθορίσουµε αυτό το χαρακτηριστι-
κό, χρησιµοποιούµε το κουµπί που φέρει τον τίτλο «Τύπος Συνδέσµου…». Στην πε-
ρίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο δια-
λόγου:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 155

Σχήµα 53 : Καθορισµός του τύπου συνδέσµου για τη νέα συσχέτιση

Αυτό το παράθυρο εµφανίζει τρεις επιλογές, οι οποίες αντιστοιχούν σε τρεις


διαφορετικούς τύπους συνδέσµων. Η πρώτη επιλογή αντιστοιχεί στην εσωτερική σύ-
ζευξη (inner join ή theta join), η δεύτερη επιλογή αντιστοιχεί στην αριστερή εξω-
τερική σύζευξη (left outer join), και η τρίτη επιλογή αντιστοιχεί στην δεξιά εξωτε-
ρική σύζευξη (right outer join). Αυτές οι τρεις µορφές συνδέσµων, χαρακτηρίζονται
από τις ακόλουθες ιδιότητες:

Εσωτερική σύζευξη (inner join): χρησιµοποιώντας αυτόν τον τύπο συνδέ-


σµου, λαµβάνει χώρα συνδυασµός εγγραφών των δύο πινάκων µόνον εάν οι τιµές
των συνδεδεµένων πεδίων ικανοποιούν µια καθορισµένη συνθήκη. Αυτό στην
πραγµατικότητα δεν είναι τίποτε άλλο από την πράξη της σύζευξης πινάκων της σχε-
σιακής άλγεβρας, η οποία υπολογίζει το καρτεσιανό γινόµενο των πινάκων και στη
συνέχεια κρατά µόνο εκείνες τις γραµµές των οποίων οι τιµές των συνδεδεµένων
πεδίων είναι οι ίδιες. Στο παράδειγµα της συσχέτισης των πινάκων EMPLOYEE
και DEPARTMENT που παρουσιάσαµε στις προηγούµενες σελίδες, η συνθήκη επι-
λογής (join condition) θα έχει τη µορφή

DEPARTMENT.DNUMBER = EMPLOYEE. DNO

Αριστερή εξωτερική σύζευξη (left outer join): Όπως είναι γνωστό από τη
θεωρία της σχεσιακής άλγεβρας, σε αυτόν τον τύπο της σύζευξης, λαµβάνει χώρα
συνδυασµός όλων των εγγραφών του πίνακα που βρίσκεται στο αριστερό µέρος
της πράξης, µε όλες τις εγγραφές του άλλου πίνακα, ακόµη και εάν δεν υπάρχουν
αντίστοιχες τιµές στο συζευγµένο πεδίο του άλλου πίνακα. Αυτό δεν ισχύει για τον
πίνακα που βρίσκεται στο δεξί µέρος της πράξης, του οποίου οι εγγραφές συνδυάζο-
νται µε τις εγγραφές του αριστερού πίνακα µόνο όταν υπάρχουν ίδιες τιµές στα συ-
ζευγµένα πεδία.

∆εξιά εξωτερική σύζευξη (right outer join): Με εντελώς ανάλογο τρόπο, σε


αυτόν τον τύπο της σύζευξης, λαµβάνει χώρα συνδυασµός όλων των εγγραφών του

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 156

πίνακα που βρίσκεται στο δεξί µέρος της πράξης, µε όλες τις εγγραφές του άλλου
πίνακα, ακόµη και εάν δεν υπάρχουν αντίστοιχες τιµές στο συζευγµένο πεδίο του
άλλου πίνακα. Αυτό δεν ισχύει για τον πίνακα που βρίσκεται στο αριστερό µέρος της
πράξης, του οποίου οι εγγραφές συνδυάζονται µε τις εγγραφές του δεξιού πίνακα µό-
νο όταν υπάρχουν ίδιες τιµές στα συζευγµένα πεδία.

Ανάλογα λοιπόν µε την περίπτωση, καθορίζουµε και τον τύπο του συνδέσµου
για τη νέα συσχέτιση επιλέγοντας κάποιον από τους τρεις τύπους συνδέσµων που εί-
ναι διαθέσιµοι.

∆ΗΜΙΟΥΡΓΙΑ ΣΥΣΧΕΤΙΣΕΩΝ ΜΕ ΠΟΛΛΑΠΛΟΤΗΤΑ 1:1 και Μ:Ν

Η δηµιουργία συσχετίσεων µε τον τρόπο που περιγράψαµε παραπάνω επιτρέ-


πει τον ορισµό συσχετίσεων µε πολλαπλότητα 1:Ν. Σε αυτού του είδους τις συσχετί-
σεις, το πρωτεύον κλειδί του πρωτεύοντα πίνακα προστίθεται στον σχετιζόµενο
πίνακα ως ξένο κλειδί, και στη συνέχεια η συσχέτιση ορίζεται ανάµεσα στα δύο
αυτά πεδία. Τι συµβαίνει όµως όταν οι συσχετίσεις που θέλουµε να δηµιουργήσουµε
έχουν πολλαπλότητα 1:1 ή Μ:Ν? Στην περίπτωση αυτή θα ακολουθήσουµε την εξής
διαδικασία.

Στην περίπτωση συσχέτισης µε πολλαπλότητα 1:1 διαλέγουµε τον έναν από


τους δύο πίνακες, και τον θεωρούµε ως τον πρωτεύοντα πίνακα. Αυτό σηµαίνει πως
θα λάβει χώρα προσθήκη του πρωτεύοντος κλειδιού του στον άλλο πίνακα, ως ξέ-
νο κλειδί. Στη συνέχεια θα συσχετίσουµε αυτά τα δύο πεδία µε τον τρόπο που περι-
γράψαµε στις προηγούµενες σελίδες, εφ όσον όµως πρώτα, προχωρήσουµε στη µετα-
βολή κάποιας από τις ιδιότητές τους. Πιο συγκεκριµένα, για κάθε ένα από αυτά τα
πεδία, θα ανοίξουµε τον πίνακα στον οποίο ανήκουν σε προβολή σχεδίασης, και θα
θέσουµε την ιδιότητα Ευρετήριο στην τιµή «Ναι (δεν επιτρέπονται διπλότυπα)».
Κάνοντας αυτού του είδους την αλλαγή και στα δύο συσχετιζόµενα πεδία, η συσχέτι-
ση που θα προκύψει ανάµεσά τους θα έχει πολλαπλότητα ένα προς ένα.

Χαρακτηριστικό παράδειγµα µιας τέτοιας συσχέτισης είναι η συσχέτιση


MANAGES που υφίσταται ανάµεσα στους τύπους οντότητας EMPLOYEE και
DEPARTMENT – ένα τµήµα παρακολουθείται από ένα και µοναδικό MANAGER.
Στην περίπτωση αυτή τα συσχετιζόµενα πεδία είναι το πεδίο SSN του πίνακα
EMPLOYEE και το πεδίο MGRSSN του πίνακα DEPARTMENT. Εάν στην ιδιό-
τητα Ευρετήριο των δύο πεδίων θέσουµε την τιµή «Ναι (δεν επιτρέπονται διπλότυ-
πα)», τότε η συσχέτιση που θα δηµιουργηθεί ανάµεσά τους θα έχει πολλαπλότητα 1:1
όπως φαίνεται στο επόµενο σχήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 157

Σχήµα 54 : Παράδειγµα συσχέτισης µε πολλαπλότητα 1:1

Τέλος για να δηµιουργήσουµε συσχετίσεις µε πολλαπλότητα Μ:Ν, θα πρέπει


να κατασκευάσουµε ένα ενδιάµεσο πίνακα που να περιέχει τα πρωτεύοντα κλειδιά
των πινάκων που θέλουµε να συσχετίσουµε. Ας πάρουµε για παράδειγµα τη
συσχέτιση WORKS_ON που συσχετίζει τους τύπους οντότητας EMPLOYEE και
PROJECT. Η συσχέτιση αυτή έχει πολλαπλότητα Μ:Ν καθώς ένα έργο πραγµατο-
ποιείται από πολλούς υπαλλήλους αλλά ταυτόχρονα, ένας υπάλληλος µπορεί την
ίδια χρονική στιγµή να συµµετέχει σε περισσότερα από ένα έργα. Για το λόγο αυ-
τό, κατασκευάσαµε τον ενδιάµεσο πίνακα WORKS_ON που περιέχει τον κωδικό
του έργου, τον κωδικό του υπαλλήλου που εργάζεται σε αυτό, καθώς και τον α-
ριθµό των ωρών ανά εβδοµάδα, που ο συγκεκριµένος υπάλληλος εργάζεται στο
συγκεκριµένο έργο. Στον πίνακα WORKS_ON, τα πεδία ESSN και PNO είναι ξένα
κλειδιά, και ο συνδυασµός τους αποτελεί το πρωτεύον κλειδί του πίνακα, που είναι
σύνθετο και ταυτοποιεί µε µοναδικό τρόπο την κάθε εγγραφή του. Για να δηµιουρ-
γήσουµε τώρα τη συσχέτιση ανάµεσα στους πίνακες EMPLOYEE και PROJECT,
θα δηµιουργήσουµε δύο διαφορετικές συσχετίσεις µε πολλαπλότητα 1:Ν. Μια συσχέ-
τιση ανάµεσα στον πίνακα EMPLOYEE και στον πίνακα WORKS_ON και µια άλ-
λη συσχέτιση ανάµεσα στον πίνακα PROJECT και στον πίνακα WORKS_ON. Στις
δύο αυτές συσχετίσεις, οι πίνακες EMPLOYEE και PROJECT θα είναι οι πρωτεύο-
ντες πίνακες, ενώ ο πίνακας WORKS_ON θα είναι και τις δύο φορές ο σχετιζόµενος
πίνακας. Οι δύο αυτές συσχετίσεις θα δηµιουργηθούν µε τον τρόπο που περιγράψαµε
στις προηγούµενες σελίδες, και το αποτέλεσµα αυτής της διαδικασίας παρουσιάζεται
στο επόµενο σχήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 158

Σχήµα 55 : Παράδειγµα συσχέτισης µε πολλαπλότητα Μ:Ν. Η δηµιουργία αυτής της συσχέ-


τισης ανάγεται στη δηµιουργία δύο συσχετίσεων 1:Ν που ορίζονται ανάµεσα στους πρωτεύοντες πίνα-
κες EMPLOYEE και PROJECT και στον σχετιζόµενο πίνακα WORKS_ON.

Προκειµένου να αποφύγουµε την εµφάνιση ασυνεπών δεδοµένων σε περιπτώσεις


κατά τις οποίες λαµβάνει χώρα αλλαγή στον κωδικό του υπαλλήλου ή του έργου, θα
πρέπει να ενεργοποιήσουµε το µηχανισµό ελέγχου της ισχύος των κανόνων ακε-
ραιότητας και το πλαίσιο ελέγχου «∆ιαδοχική ενηµέρωση των σχετικών εγγρα-
φών». Επιπλέον, εάν επιθυµούµε να διαγράφονται οι εγγραφές του πίνακα
WORKS_ON κάθε φορά που τερµατίζεται κάποιο έργο ή κάθε φορά που κάποιος
υπάλληλος δεν απασχολείται πλέον σε αυτό, θα πρέπει να επιλέξουµε και το πλαίσιο
ελέγχου «∆ιαδοχική διαγραφή των σχετικών εγγραφών». Έτσι το παράθυρο «Επε-
ξεργασία σχέσεων» για τη συσχέτιση 1:Ν που υφίσταται ανάµεσα στους πίνακες
EMPLOYEE και WORKS_ON θα έχει τη µορφή του επόµενου σχήµατος, ενώ ανά-
λογη θα είναι η κατάσταση και για τη συσχέτιση που υφίσταται ανάµεσα στους πίνα-
κες WORKS_ON και PROJECT.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 159

Σχήµα 56 : Τα χαρακτηριστικά της συσχέτισης WORKS_ON

ΕΠΕΞΕΡΓΑΣΙΑ ΚΑΙ ∆ΙΑΓΡΑΦΗ ΜΙΑΣ ΣΥΣΧΕΤΙΣΗΣ

Για να τροποποιήσουµε τις ιδιότητες µιας συσχέτισης ή για να τη διαγράψου-


µε, θα πρέπει πρώτα να την επιλέξουµε. Ο πιο εύκολος τρόπος για να κάνουµε αυτή
την επιλογή είναι να µεταφέρουµε το δείκτη του ποντικιού πάνω στη γραµµή που
συνδέει τους δύο πίνακες και στη συνέχεια να πατήσουµε το αριστερό του πλή-
κτρο. Στην περίπτωση αυτή η γραµµή της συσχέτισης θα γίνει πιο έντονη, κάτι που
δείχνει πως η συσχέτιση έχει επιλεγεί για περαιτέρω επεξεργασία. Εάν τώρα διατη-
ρώντας τη συσχέτιση επιλεγµένη πατήσουµε το δεξί πλήκτρο του ποντικιού θα εµφα-
νιστεί ένα µενού µε δύο επιλογές. Η επιλογή «Επεξεργασία σχέσης» εµφανίζει το πα-
ράθυρο µε τις ιδιότητες της συσχέτισης από όπου µπορούµε να αλλάξουµε τα χαρα-
κτηριστικά της, ενώ η επιλογή «∆ιαγραφή», αποµακρύνει τη συσχέτιση ανάµεσα
στους δύο πίνακες. Αυτή η διαδικασία διαγραφής είναι οριστική και δεν µπορεί να
αναιρεθεί µε κανένα τρόπο, κάτι που η Access γνωστοποιεί στο χρήστη, εµφανίζο-
ντας το επόµενο ενηµερωτικό µήνυµα.

Σχήµα 57 : Ενηµερωτικό µήνυµα που εµφανίζεται στο χρήστη κατά τη διαδικασία διαγραφής
µιας συσχέτισης.

Εάν ο χρήστης διαγράψει τη συσχέτιση και στη συνέχεια θελήσει να την ξα-
ναχρησιµοποιήσει, θα πρέπει να τη δηµιουργήσει και πάλι από την αρχή.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 9 : Συσχετίσεις 160

Εναλλακτικά µπορούµε να εµφανίσουµε το παράθυρο των ιδιοτήτων µιας


σχέσης κάνοντας double click µε το ποντίκι πάνω στη γραµµή που συνδέει τους δύο
πίνακες. Επίσης µπορούµε να διαγράψουµε τη συσχέτιση, εάν την επιλέξουµε και στη
συνέχεια πατήσουµε το πλήκτρο Del που βρίσκεται στο πληκτρολόγιο.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10
Φόρµες
Στο κεφάλαιο αυτό περιγράφεται ο τρόπος µε τον οποίο
είναι δυνατή η δηµιουργία διαλόγων αλληλεπίδρασης µε το
χρήση και η διαχείριση των δεδοµένων της εφαρµογής µέσα
από ένα εύχρηστο και φιλικό περιβάλλον.

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

Υπάρχουν πολλοί τρόποι µε τους οποίους είναι δυνατή η χρήση µιας εφαρµο-
γής. Στην πιο απλή περίπτωση, ο προγραµµατιστής παρέχει στο χρήστη ένα σύνολο
εντολών οι οποίες καλούνται από κάποια γραµµή εντολών – παρόµοια µε εκείνη του
MS – DOS – και επιτελούν συγκεκριµένες λειτουργίες. Αυτός ο τρόπος χρήσης του
προγράµµατος, είναι πάρα πολύ συνηθισµένος σε παλαιότερες εκδόσεις των µεγάλων
συστηµάτων διαχείρισης βάσεων δεδοµένων – µε χαρακτηριστικό παράδειγµα την
Oracle και παλαιότερα τη Sybase – οι οποίες έτρεχαν σε λειτουργικά συστήµατα της
οικογένειας του Unix. Με την πάροδο του χρόνου, αυτού του είδους οι εφαρµογές –
καθώς και πολλές άλλες – µεταφέρθηκαν στους προσωπικούς υπολογιστές που χρη-
σιµοποιούσαν ως λειτουργικό σύστηµα το MS – DOS, και ταυτόχρονα, εµπλουτίστη-
καν µε ένα πλήθος διαλόγων αλληλεπίδρασης µε το χρήστη, οι οποίοι επιτάχυναν
την αλληλεπίδρασή του µε το σύστηµα, και βελτίωναν σηµαντικά την αποδοτικότητά
του. Αυτοί οι διάλογοι ονοµάστηκαν φόρµες, και αρχικά λειτουργούσαν σε κατά-
σταση κειµένου (text mode) και σε ανάλυση 80 x 25 χαρακτήρες. Η κατάσταση
αυτή συνεχίστηκε µέχρι την έλευση των Microsoft Windows – και όλων των άλλων
λειτουργικών συστηµάτων που λειτουργούσαν σε κατάσταση γραφικών – τα οποία
έφεραν µια πραγµατική επανάσταση στο χώρο της χρήσης των ηλεκτρονικών υπολο-
γιστών και απλοποίησαν πάρα πολύ τη χρήση των διαφόρων εφαρµογών. Τα τελευ-
ταία χρόνια δε, αυτό το γραφικό περιβάλλον έχει εξελιχθεί σε πολύ µεγάλο βαθµό,
και περιλαµβάνει τη χρήση βοηθητικών προγραµµάτων (wizards) που καθοδηγούν
το χρήστη σε κάθε του βήµα, την πραγµατοποίηση των βασικών λειτουργιών της
εφαρµογής µέσα από εργονοµικές γραµµές εργαλείων, και γενικά ένα πλήθος λει-
Κεφάλαιο 10 : Φόρµες 162

τουργικών χαρακτηριστικών πού έχουν µετατρέψει την αλληλεπίδραση του χρήση µε


την εφαρµογή σε µια εύκολη και ευχάριστη διαδικασία.

Το αντικείµενο των επόµενων σελίδων, είναι η δηµιουργία διαλόγων αλληλε-


πίδρασης µε το χρήστη, µέσα από το περιβάλλον της Microsoft Access.

Η ΣΧΕΣΗ ΑΝΑΜΕΣΑ ΣΤΙΣ ΦΟΡΜΕΣ ΚΑΙ ΣΤΟΥΣ ΠΙΝΑΚΕΣ

Όπως έχει ήδη αναφερθεί, ο βασικός λόγος δηµιουργίας µιας φόρµας, είναι η
διευκόλυνση της αλληλεπίδρασης του χρήστη µε τη βάση δεδοµένων της εφαρ-
µογής. Επειδή όµως οι πιο σηµαντικές από τις δραστηριότητες του χρήστη έχουν να
κάνουν µε τη διαχείριση των δεδοµένων της βάσης, είναι προφανές πως οι φόρµες
θα πρέπει να συσχετίζονται άµεσα µε τους πίνακες της βάσης. Πιο συγκεκριµένα, για
κάθε πίνακα της βάσης µπορούµε να κατασκευάσουµε µια φόρµα, µέσω της
οποίας ο χρήστης θα διαχειρίζεται τα δεδοµένα του πίνακα. Με άλλα λόγια η προ-
έλευση των δεδοµένων που εµφανίζονται σε κάποια από τις φόρµες της εφαρµογής,
είναι ένας πίνακας – ή πολλές φορές και κάποιο ερώτηµα.

Για να κατανοήσουµε καλύτερα αυτή τη διαδικασία ας θεωρήσουµε τον πί-


νακα EMPLOYEE της βάσης δεδοµένων της εταιρείας. Ο πίνακας αυτός περιέχει τα
προσωπικά στοιχεία των υπαλλήλων που εργάζονται στα διάφορα τµήµατα της εται-
ρείας, και τα οποία µπορούν να καταχωρηθούν από το χρήστη είτε άµεσα, εάν ανοί-
ξουµε τον πίνακα σε προβολή φύλλου δεδοµένων και καταχωρήσουµε εκεί τις εγγρα-
φές τη µία µετά την άλλη, είτε έµµεσα καταχωρώντας τα στοιχεία µέσω µιας φόρµας,
που έχει σχεδιαστεί ειδικά για αυτό το σκοπό. Η διαδικασία δηµιουργίας µιας φόρµας
µε βάση κάποιον από τους πίνακες της βάσης, θα περιγραφεί σε επόµενη ενότητα.
Στο επόµενο σχήµα, παρουσιάζεται η δοµή του πίνακα EMPLOYEE και µια ενδει-
κτική φόρµα που έχει κατασκευαστεί για την καταχώρηση δεδοµένων σε αυτόν τον
πίνακα.

Σχήµα 58 : Παράδειγµα αντιστοιχίας πεδίων πίνακα µε πεδία φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 163

Από το παραπάνω σχήµα διαπιστώνουµε πως στη γενική περίπτωση υφίστα-


ται µία αντιστοιχία ένα προς ένα ανάµεσα στα πεδία µιας φόρµας και στα πεδία
του πίνακα µε τον οποίο συσχετίζεται. Έτσι το πεδίο µε ετικέτα «Όνοµα Υπαλλή-
λου» αντιστοιχεί στο πεδίο Fname του πίνακα EMPLOYEE, το πεδίο µε ετικέτα
«Ηµ. Γέννησης» αντιστοιχεί στο πεδίο BDate του πίνακα EMPLOYEE, κ.ο.κ.
Επειδή όµως το σύνολο τιµών για αυτά τα πεδία αντιστοιχεί σε κάποια εγγραφή του
πίνακα, είναι προφανές πως η φόρµα EMPLOYEE, έτσι όπως είναι σχεδιασµένη,
εµφανίζει µια εγγραφή του πίνακα EMPLOYEE κάθε φορά.

Αυτού του είδους η συσχέτιση που παρατηρείται ανάµεσα στα πεδία της φόρ-
µας και στα αντίστοιχα πεδία του πίνακα, αποδίδεται µε τον όρο «Προέλευση ∆εδο-
µένων». Έτσι λέµε πως η προέλευση των δεδοµένων του πεδίου µιας φόρµας είναι
ένα από τα πεδία κάποιου πίνακα, όταν στο συγκεκριµένο πεδίο της φόρµας, εµ-
φανίζονται τιµές του αντίστοιχου πεδίου του πίνακα. Στην προκειµένη περίπτωση,
η προέλευση δεδοµένων του πεδίου µε ετικέτα «Όνοµα Υπαλλήλου» της φόρµας
EMPLOYEE, είναι το πεδίο FNAME του οµώνυµου πίνακα, διότι στο συγκεκρι-
µένο πεδίο της φόρµας εµφανίζονται ονόµατα υπαλλήλων της εταιρείας. Γενικεύο-
ντας αυτό τον ορισµό για όλα τα πεδία που περιλαµβάνονται σε µία φόρµα, µπορούµε
να πούµε πως η προέλευση δεδοµένων µιας ολόκληρης φόρµας, είναι ένας ολό-
κληρος πίνακας. Στο παράδειγµά µας, η προέλευση δεδοµένων της φόρµας
EMPLOYEE είναι ο οµώνυµος πίνακας της βάσης δεδοµένων της εταιρείας.

Αυτή η αντιστοιχία ανάµεσα στα πεδία των φορµών και των πινάκων, δεν πε-
ριορίζεται µόνο σε διαδικασίες εµφάνισης των δεδοµένων της βάσης, αλλά επεκτείνε-
ται και σε διαδικασίες τροποποίησής τους. Έτσι, εάν µεταβούµε στο πεδίο «Όνοµα
Υπαλλήλου» της φόρµας, αλλάξουµε το περιεχόµενό του από John σε George και
στη συνέχεια αποθηκεύσουµε τις αλλαγές, αυτή η αλλαγή θα µεταφερθεί και στην
αντίστοιχη εγγραφή του πίνακα EMPLOYEE. Με τον τρόπο αυτό είναι δυνατή η
εύκολη µεταβολή των δεδοµένων της βάσης. Με τον ίδιο τρόπο εάν χρησιµοποιή-
σουµε τη φόρµα για να καταχωρήσουµε µια νέα εγγραφή, και στο πεδίο «Όνοµα
Υπαλλήλου» καταχωρήσουµε τη συµβολοσειρά Alice, αυτή η τιµή θα καταχωρηθεί
στο πεδίο FNAME της νέας εγγραφής που θα δηµιουργηθεί στο τέλος του πίνακα
EMPLOYEE.

Ας σηµειωθεί ωστόσο πως αυτή δεν είναι η µοναδική λειτουργία των φορµών
σε µια εφαρµογή. Μια φόρµα µπορεί να χρησιµοποιηθεί και για την πραγµατοποίηση
άλλων διαδικασιών που δεν έχουν να κάνουν µε διαδικασίες αλληλεπίδρασης µε τα
δεδοµένα της βάσης. Έτσι στο επόµενο σχήµα απεικονίζεται µια φόρµα µέσω της
οποίας είναι δυνατή η χρησιµοποίηση άλλων φορµών της εφαρµογής. Στην περί-
πτωση αυτή η φόρµα λειτουργεί ως ένα µενού επιλογών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 164

Σχήµα 59 : Παράδειγµα µιας φόρµας η οποία χρησιµοποιείται ως µενού επιλογών

Η ∆ΟΜΗ ΜΙΑΣ ΦΟΡΜΑΣ ΣΤΗ MICROSOFT ACCESS

Η κάθε φόρµα που δηµιουργείται µέσα από το περιβάλλον της Microsoft Ac-
cess, χαρακτηρίζεται από µια συγκεκριµένη δοµή, η οποία περιλαµβάνει ένα σύνολο
από ενότητες (sections). Οι πιο σηµαντικές από αυτές τις ενότητες, είναι η κεφαλίδα
(form header) και το υποσέλιδο (form footer) µιας φόρµας, καθώς επίσης και το
κεντρικό µέρος της φόρµας στο οποίο απεικονίζονται τα πεδία που περιλαµβάνονται
σε αυτή.

Σε πλήρη αναλογία µε το Microsoft Word, όπου η κεφαλίδα και το υποσέ-


λιδο περιέχουν στοιχεία που παραµένουν τα ίδια σε όλες τις σελίδες του εγγράφου, η
κεφαλίδα και το υποσέλιδο µιας φόρµας, περιέχουν πληροφορίες, οι οποίες πα-
ραµένουν οι ίδιες για κάθε εγγραφή. Χαρακτηριστικό παράδειγµα πληροφορίας που
περιλαµβάνεται στην κεφαλίδα της φόρµας, είναι ο τίτλος που τη χαρακτηρίζει, ενώ
στο υποσέλιδο της φόρµας, µπορούµε να τοποθετήσουµε κουµπιά εντολών ή οδηγίες
για τον τρόπο χρήσης της φόρµας. Τέλος στην κεντρική ενότητα της φόρµας που φέ-
ρει τον τίτλο «Λεπτοµέρειες» (Details), εµφανίζονται οι εγγραφές του πίνακα που
έχει συσχετιστεί µε την φόρµα που χρησιµοποιούµε.

Σε περιπτώσεις κατά τις οποίες οι εγγραφές ενός πίνακα είναι πάρα πολλές και
η εκτύπωσή τους θα επεκταθεί σε περισσότερες από µια σελίδες, µπορούµε να καθο-
ρίσουµε κατά τη σχεδίαση της φόρµας ποιες πληροφορίες θα περιλαµβάνονται
στην κεφαλίδα και στο υποσέλιδο της κάθε σελίδας. Για παράδειγµα, µια κεφαλίδα
σελίδας, µπορεί να εµφανίζει πληροφορίες όπως τον τίτλο ή τις επικεφαλίδες στη-
λών στην κορυφή της κάθε εκτυπωµένης σελίδας. Με εντελώς ανάλογο τρόπο, το
υποσέλιδο µιας σελίδας, περιέχει στοιχεία όπως η ηµεροµηνία και η ώρα, ή ο αριθ-
µός της κάθε σελίδας. Ας σηµειωθεί πως οι κεφαλίδες και τα υποσέλιδα των σελί-
δων εµφανίζονται µόνο στις εκτυπωµένες φόρµες ή κατά τη διαδικασία της προεπι-
σκόπησης της εκτύπωσης για κάθε φόρµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 165

Η δοµή και οι ενότητες µιας φόρµας µε τον τρόπο που έχουν περιγραφεί στις
προηγούµενες παραγράφους, παρουσιάζονται στο σχήµα που ακολουθεί.

Σχήµα 60 : Η δοµή µιας φόρµας στη Microsoft Access

∆ΗΜΙΟΥΡΓΙΑ ΦΟΡΜΑΣ ΜΕ ΤΗ ΧΡΗΣΗ Ο∆ΗΓΟΥ

Ο πιο εύκολος τρόπος για να δηµιουργήσουµε µια νέα φόρµα για τη βάση δε-
δοµένων που χρησιµοποιούµε, είναι δια της χρήσης του αυτοµατοποιηµένου προ-
γράµµατος της Access (form wizard), που διευκολύνει σηµαντικά την όλη διαδικα-
σία, και ανάγει τη δηµιουργία της φόρµας σε µια σειρά διαδοχικών και εντελώς κα-
θορισµένων βηµάτων. Στο παράδειγµα που ακολουθεί, θα δηµιουργήσουµε µια
φόρµα για τη βάση δεδοµένων της εταιρείας, η οποία επιτρέπει τη διαχείριση των
προσωπικών δεδοµένων των υπαλλήλων που εργάζονται σε αυτή.

Για να δηµιουργήσουµε µία φόρµα αυτού του είδους, θα πρέπει να µεταβούµε


στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, και από εκεί να επιλέ-
ξουµε «Φόρµες» και στη συνέχεια «∆ηµιουργία φόρµας µε τη χρήση οδηγού».
Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο
πλαίσιο διαλόγου:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 166

Σχήµα 61 : Καθορισµός του πίνακα και των πεδίων που θα συσχετίζονται µε την τρέχουσα φόρµα

Αυτό το παράθυρο µας επιτρέπει να καθορίσουµε τον πίνακα πάνω στον


οποίο θα δηµιουργηθεί η νέα φόρµα, καθώς και το σύνολο των πεδίων του πίνακα
που θα συµπεριληφθούν σε αυτή. Για να ορίσουµε τον πίνακα EMPLOYEE ως τον
συσχετιζόµενο πίνακα της νέας φόρµας θα πρέπει να τον επιλέξουµε από το σύνθετο
πλαίσιο λίστας που φέρει τον τίτλο «Πίνακες/Ερωτήµατα». Κάνοντας αυτή τη δια-
δικασία, στο πλαίσιο λίστας που βρίσκεται ακριβώς από κάτω και φέρει το όνοµα
«∆ιαθέσιµα πεδία», θα εµφανιστούν όλα τα πεδία του πίνακα EMPLOYEE, έτσι
όπως τα έχουµε ορίσει κατά το στάδιο της σχεδίασης αυτού του πίνακα. Από τα πεδία
αυτά µπορούµε να επιλέξουµε εκείνα που θέλουµε να συµπεριληφθούν στην καινού-
ρια φόρµα, χρησιµοποιώντας τα τέσσερα κουµπιά που βρίσκονται ανάµεσα στα δύο
σύνθετα πλαίσια του παραπάνω διαλόγου, και των οποίων η λειτουργία είναι η εξής:

Μεταφέρει στο δεξί σύνθετο πλαίσιο, ένα πεδίο κάθε φορά, και πιο
συγκεκριµένα, εκείνο που έχει επιλεγεί µε το ποντίκι στο αριστερό
σύνθετο πλαίσιο
Μεταφέρει στο δεξί σύνθετο πλαίσιο, όλα τα πεδία του πίνακα που
ευρίσκονται στο αριστερό σύνθετο πλαίσιο

Επαναφέρει στο αριστερό σύνθετο πλαίσιο ένα πεδίο κάθε φορά, και
πιο συγκεκριµένα εκείνο που έχει επιλεγεί µε το ποντίκι στο δεξί σύν-
θετο πλαίσιο
Επαναφέρει στο αριστερό σύνθετο πλαίσιο, όλα τα πεδία που ευρί-
σκονται στο δεξί σύνθετο πλαίσιο.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 167

Χρησιµοποιώντας την παραπάνω διαδικασία, µπορούµε να µεταφέρουµε στο


δεξί σύνθετο πλαίσιο εκείνα τα πεδία του πίνακα τα οποία θα εµφανιστούν στην και-
νούρια φόρµα. Στις πιο πολλές περιπτώσεις, εµφανίζουµε στη φόρµα όλα τα πεδία
του πίνακα, εκτός από εκείνα τα πεδία, τα οποία έχουν προστεθεί στον πίνακα ως
ξένα κλειδιά (foreign keys), προκειµένου να υλοποιήσουν τις διάφορες συσχετίσεις
ανάµεσα στους πίνακες της βάσης. Μετά τον καθορισµό αυτών των πεδίων, µπο-
ρούµε πατώντας το κουµπί «Επόµενο» να προχωρήσουµε στο επόµενο βήµα της δια-
δικασίας, στο οποίο καθορίζουµε τη διάταξη των πεδίων στη νέα φόρµα. Υπάρχουν
τέσσερις διαφορετικές επιλογές που µπορούµε να κάνουµε όσον αφορά αυτή τη διά-
ταξη των πεδίων:

Σχήµα 62 : Καθορισµός της διάταξης των πεδίων της νέας φόρµας

• ∆ιάταξη στήλης: προκαλεί την εµφάνιση των πεδίων της φόρµας σε µία στήλη,
το ένα κάτω από το άλλο.

• ∆ιάταξη πίνακα: προκαλεί την εµφάνιση πολλαπλών σελίδων, κάθε µία από τις
οποίες, αντιστοιχεί και σε µια εγγραφή. Τα πεδία µιας εγγραφής βρίσκονται στοι-
χισµένα οριζόντια κατά µήκος της ίδιας γραµµής.

• ∆ιάταξη φύλλου δεδοµένων: εµφανίζει τα δεδοµένα του πίνακα που συσχετίζε-


ται µε την τρέχουσα φόρµα, σε προβολή φύλλου δεδοµένων.

• Στοιχισµένη φόρµα: προκαλεί την εµφάνιση της φόρµας µε τέτοιο τρόπο ώστε
τα πεδία που περιλαµβάνονται σε αυτή, να είναι στοιχισµένα σε γραµµές και στή-
λες.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 168

Έχοντας καθορίσει τον τρόπο µε τον οποίο θα λάβει χώρα η διάταξη των πε-
δίων της τρέχουσας φόρµας, µπορούµε, χρησιµοποιώντας το κουµπί «Επόµενο» να
εµφανίσουµε το παράθυρο του επόµενου σχήµατος, από όπου µπορούµε να καθορί-
σουµε τα χαρακτηριστικά εµφάνισης των πεδίων της φόρµας.

Σχήµα 63 : Καθορισµός του στυλ εµφάνισης της τρέχουσας φόρµας

Εάν επιλέξουµε το τυπικό στυλ εµφάνισης δηµιουργούµε µια φόρµα η οποία


έχει την τυπική εµφάνιση ενός παραθύρου του γραφικού περιβάλλοντος των Win-
dows. ∆ιατηρούµε όµως τη δυνατότητα να επιλέξουµε από τη λίστα του προηγούµε-
νου σχήµατος κάποιο άλλο στυλ εµφάνισης το οποίο µπορεί να είναι από το πιο απλό
ως το πιο εξεζητηµένο. Στο σηµείο αυτό θα πρέπει να αναφέρουµε πως η επιλογή των
σωστών χαρακτηριστικών εµφάνισης για τα διάφορα στοιχεία της εφαρµογής παίζει
καθοριστικό ρόλο όσον αφορά την αλληλεπίδρασή της µε το χρήστη, και για το λόγο
αυτό έχει αναπτυχθεί ολόκληρη επιστήµη που υπαγορεύει τα κριτήρια µε τα οποία θα
πρέπει να επιλέγουµε τα χαρακτηριστικά εµφάνισης των στοιχείων που περιλαµβάνο-
νται σε µια φόρµα.

Στο τελευταίο στάδιο δηµιουργίας της φόρµας, θα πρέπει να καθορίσουµε το


όνοµα της φόρµας καθώς και το εάν επιθυµούµε να προχωρήσουµε άµεσα στη δια-
δικασία καταχώρησης δεδοµένων, ή εναλλακτικά, εάν θέλουµε να µεταβάλλουµε τη
σχεδίαση της φόρµας. Όλες αυτές οι διαδικασίες πραγµατοποιούνται µέσα από το
επόµενο πλαίσιο διαλόγου, το οποίο και τερµατίζει την αυτοµατοποιηµένη δηµιουρ-
γία της φόρµας και επιτρέπει την άµεση χρήση της για την αλληλεπίδρασή µας µε τη
βάση δεδοµένων του συστήµατος.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 169

Σχήµα 64 : Καθορισµός του ονόµατος της τρέχουσας φόρµας και τερµατισµός της διαδικασίας καθο-
ρισµού των χαρακτηριστικών της

∆ΗΜΙΟΥΡΓΙΑ ΦΟΡΜΑΣ ΣΕ ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ

Σε περιπτώσεις κατά τις οποίες δεν επιθυµούµε να χρησιµοποιήσουµε το αυ-


τοµατοποιηµένο πρόγραµµα δηµιουργίας φορµών που µας παρέχει η Microsoft Ac-
cess, µπορούµε να σχεδιάσουµε τη φόρµα µε το χέρι, και να καθορίσουµε µόνοι
µας τις ιδιότητές της, οι οποίες κυρίως αφορούν το είδος και τη διάταξη των πε-
δίων πάνω στην επιφάνειά της, καθώς και την ενδεχόµενη συσχέτιση που υφί-
σταται ανάµεσα στα πεδία της φόρµας και τα αντίστοιχα πεδία του πίνακα από
τον οποίο η φόρµα παίρνει δεδοµένα. Για να σχεδιάσουµε µια φόρµα µε τον τρόπο
αυτό, επιλέγουµε από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, την
επιλογή «Φόρµες», και από εκεί, τη λειτουργία «∆ηµιουργία φόρµας σε προβολή
σχεδίασης». Στην περίπτωση αυτή η Microsoft Access, θα µας εµφανίσει µια κενή
φόρµα σε προβολή σχεδίασης, στην οποία µπορούµε να προσθέσουµε τα κατάλληλα
σε κάθε περίπτωση πεδία, έτσι ώστε να ικανοποιήσουµε τις ανάγκες µας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 170

Σχήµα 65 : ∆ηµιουργία φόρµας σε προβολή σχεδίασης

Στο παραπάνω παράθυρο εµφανίζονται εκτός από την κεντρική περιοχή της
φόρµας, η κεφαλίδα και το υποσέλιδό της, στα οποία όπως έχουµε ήδη αναφέρει,
µπορούµε να τοποθετήσουµε στοιχεία, τα οποία να είναι κοινά για όλες τις εγγραφές.
Όσον αφορά το κεντρικό τµήµα της φόρµας που φέρει τον τίτλο «Λεπτοµέρεια», εκεί
συνήθως τοποθετούµε διάφορα πλαίσια ελέγχου τα οποία µπορούµε να συσχετί-
σουµε µε πεδία πινάκων της βάσης, έτσι ώστε να προσπελάσουµε τα δεδοµένα που
βρίσκονται αποθηκευµένα σε αυτούς.

Η εργαλειοθήκη : η διαδικασία της προσθήκης πλαισίων ελέγχου στην επι-


φάνεια της φόρµας που πρόκειται να κατασκευάσουµε, µπορεί να πραγµατοποιηθεί
πάρα πολύ εύκολα χρησιµοποιώντας µια ειδική γραµµή εργαλείων, που ονοµάζεται
εργαλειοθήκη, και περιλαµβάνει τα πιο σηµαντικά αντικείµενα που µπορούµε να το-
ποθετήσουµε σε µία φόρµα. Ανάλογα µε τη θέση της πάνω στην οθόνη, η εργαλειο-
θήκη µπορεί να εµφανιστεί είτε ως γραµµή εργαλείων είτε ως παράθυρο οι διαστά-
σεις και το µέγεθος του οποίου µπορούν να ρυθµιστούν κατά βούληση. Τυπικές
µορφές αυτής της γραµµής εργαλείων, παρουσιάζεται στο επόµενο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 171

Σχήµα 66 : Η εργαλειοθήκη της Microsoft Access σε διάφορες µορφές και σχήµατα

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

Χρησιµοποιείται για την επιλογή αντικειµένων στην επιφάνεια της


φόρµας. Επιλέγοντας ένα αντικείµενο επιλέγεται ταυτόχρονα και η
ετικέτα που το συνοδεύει. Για να επιλέξουµε περισσότερα από ένα
αντικείµενα την ίδια χρονική στιγµή, τα επιλέγουµε διαδοχικά το ένα
µετά το άλλο, κρατώντας πατηµένο το πλήκτρο Shift.
Χρησιµοποιείται για την εισαγωγή ενός πλαισίου ελέγχου πάνω στην
επιφάνεια της τρέχουσας φόρµας, µε τη βοήθεια του κατάλληλου
προγράµµατος καθοδήγησης (control wizard). Αυτή η διαδικασία
πραγµατοποιείται όταν το κουµπί αυτό είναι πατηµένο προς τα µέσα,
ενώ στην αντίθετη περίπτωση, τα χαρακτηριστικά και οι λειτουργίες
του πλαισίου ελέγχου, θα πρέπει να πραγµατοποιηθούν µε το χέρι
Επιτρέπει την εισαγωγή ετικέτας στην επιφάνεια εργασίας της
τρέχουσας φόρµας. Μια ετικέτα καθορίζει το όνοµα και το ρόλο
κάποιου πλαισίου ελέγχου, και γενικά περιέχει χρήσιµες πληροφο-
ρίες σχετικά µε τη λειτουργικότητα και τον τρόπο χρήσης των πεδίων
της φόρµας.
Επιτρέπει την εισαγωγή πλαισίου κειµένου στην επιφάνεια εργα-
σίας της τρέχουσας φόρµας. Ένα πλαίσιο κειµένου χρησιµοποιείται
για την καταχώρηση δεδοµένων από το χρήστη της εφαρµογής.
Ας σηµειωθεί πως το πλαίσιο κειµένου αρχικά είναι µη δεσµευµένο
και θα πρέπει να το συσχετίσουµε µε το πεδίο κάποιου πίνακα εάν
θέλουµε να προσπελάσουµε τα δεδοµένα της βάσης.
Επιτρέπει την εισαγωγή µιας οµάδας πλαισίων ελέγχου (check
boxes ή radio buttons) από τα οποία µπορούµε να επιλέξουµε µόνο
ένα κάθε φορά. Χρησιµοποιώντας το πρόγραµµα καθοδήγησης µπο-
ρούµε να καθορίσουµε πλήρως τη λειτουργικότητα αυτών των κου-
µπιών όπως είναι η µορφή τους, οι τιµές που περιλαµβάνουν και οι
ετικέτες που καθορίζουµε γι αυτά.
Επιτρέπει τη δηµιουργία ενός κουµπιού εναλλαγής το οποίο µπο-
ρεί να βρεθεί σε δύο καταστάσεις – επιλεγµένο ή όχι. Με τον τρόπο
αυτό µπορούµε να αποδώσουµε τιµές σε Boolean µεταβλητές οι
οποίες µπορούν να λάβουν µόνο τις τιµές TRUE και FALSE.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 172

Επιτρέπει τη δηµιουργία ενός κουµπιού επιλογής (radio button).


Αυτού του είδους τα κουµπιά συνήθως είναι οµαδοποιηµένα σε οµά-
δες κουµπιών και η λειτουργία τους είναι τέτοια ώστε σε κάθε χρο-
νική στιγµή να είναι δυνατή η επιλογή µόνο ενός από αυτά. Με τον
τρόπο αυτό είναι δυνατή η επιλογή από το χρήστη µιας τιµής από ένα
σύνολο τιµών για κάποια ιδιότητα της βάσης δεδοµένων.
Χρησιµοποιείται για τη δηµιουργία ενός κουµπιού επιλογής
(check box) το οποίο µπορεί να βρεθεί µόνο σε δύο καταστάσεις –
επιλεγµένο ή όχι. Με τον τρόπο αυτό µπορούµε να καταχωρήσουµε
τιµές σε Boolean µεταβλητές οι οποίες µπορούν να πάρουν µόνο δύο
τιµές, TRUE ή FALSE.
Χρησιµοποιείται για τη δηµιουργία ενός σύνθετου πλαισίου
(combo box) το οποίο εµφανίζει ένα αναδυόµενο list box από όπου
είναι δυνατή η επιλογή µιας τιµής µέσα από ένα σύνολο τιµών. Χρη-
σιµοποιείται κατά κόρον στις φόρµες τις Microsoft Access, για την
απόδοση τιµών σε πεδία της φόρµας οι οποίες ανήκουν σε κάποιο
σύνολο.
Χρησιµοποιείται για τη δηµιουργία ενός πλαισίου λίστας (list
box) το οποίο, όπως και στην προηγούµενη περίπτωση επιτρέπει στο
χρήστη να επιλέξει κάποια τιµή µέσα από ένα σύνολο τιµών. Με τον
τρόπο αυτό είναι δυνατή η απόδοση τιµών σε πεδία της φόρµας τα
οποία συνήθως συσχετίζονται µε πεδία των πινάκων της βάσης.

Χρησιµοποιείται για τη δηµιουργία ενός κουµπιού εντολής (push


button), το οποίο µπορεί να χρησιµοποιηθεί σε µία φόρµα για την
πραγµατοποίηση ενός συνόλου ενεργειών. Οι ενέργειες αυτές στις
πιο πολλές περιπτώσεις περιλαµβάνουν το άνοιγµα και το κλείσιµο
µιας φόρµας ή την εκτέλεση µιας µακροεντολής ή ενός ερωτήµατος.
Χρησιµοποιείται για την εισαγωγή µιας εικόνας σε κάποιο σηµείο
της τρέχουσας φόρµας. Χρησιµοποιώντας αυτό το στοιχείο ελέγχου,
το πρόγραµµα θα µας ζητήσει το όνοµα του αρχείου που περιέχει την
εικόνα που θέλουµε να χρησιµοποιήσουµε. Η Microsoft Access επι-
τρέπει την εισαγωγή των πιο κοινών προτύπων εικόνων όπως εικόνες
BMP, GIF και JPG.
Επιτρέπει την εισαγωγή ενός µη δεσµευµένου αντικειµένου σε
κάποιο σηµείο της τρέχουσας φόρµας. Η εισαγωγή του εν λόγω αντι-
κειµένου, θα λάβει χώρα χρησιµοποιώντας το µηχανισµό OLE (Ob-
ject Linking and Embedding). Με τον τρόπο αυτό είναι δυνατή η
χρήση πολλών γνωστών τύπων αντικειµένων, όπως αρχεία κειµένου,
λογιστικά φύλλα καθώς και αρχεία πολυµεσικών εφαρµογών.
Επιτρέπει την εισαγωγή ενός αντικειµένου σύµφωνα µε το µηχα-
νισµό OLE το οποίο όµως είναι δεσµευµένο, συσχετίζεται δηλαδή
µε κάποιο πεδίο κάποιου πίνακα της βάσης. Με τον τρόπο αυτό για
παράδειγµα είναι δυνατή η αποθήκευση της φωτογραφίας για κάθε
έναν από τους εργαζόµενους της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 173

Επιτρέπει την εισαγωγή ενός στοιχείου αλλαγής σελίδας σε κά-


ποιο σηµείο της τρέχουσας φόρµας. Με τον τρόπο αυτό είναι δυ-
νατό να ορίσουµε για µία φόρµα περισσότερες από µία σελίδες, κάτι
που γίνεται συνήθως για πολύ µεγάλες φόρµες. Τα σηµεία στα οποία
τοποθετούµε στοιχεία αλλαγής σελίδας είναι εκείνα στα οποία µετα-
φέρεται ο χρήστης όταν χρησιµοποιεί τα πλήκτρα Page Up και Page
Down.
Επιτρέπει την εισαγωγή ενός πεδίου πολλαπλών σελίδων (prop-
erty sheet). Τα πεδία αυτά περιέχουν περισσότερες από µια σελίδες,
κάθε µια εκ των οποίων περιέχει γενικά µια οµάδα πεδίων που συ-
σχετίζονται µεταξύ τους. Για παράδειγµα για κάθε υπάλληλο της
εταιρείας µπορούµε να εµφανίσουµε δύο τέτοιες σελίδες, µια µε τα
προσωπικά και µια µε τα οικονοµικά του στοιχεία.
Χρησιµοποιείται για τη δηµιουργία δευτερεύουσας φόρµας (ή
υποφόρµας) µέσα στην τρέχουσα φόρµα. Οι υποφόρµες χρησιµο-
ποιούνται κατά κόρον για την εµφάνιση στοιχείων πινάκων που συ-
σχετίζονται µέσω µιας σχέσης 1:Ν. Για παράδειγµα στη φόρµα που
περιέχει τα στοιχεία κάποιου τµήµατος, µπορούµε να εµφανίσουµε
µια υποφόρµα που να περιλαµβάνει τα στοιχεία των υπαλλήλων που
εργάζονται σε αυτό το τµήµα.
Χρησιµοποιείται για τη χάραξη στη επιφάνεια της φόρµας µιας
απλής γραµµής προκειµένου να οργανώσουµε καλύτερα τα πεδία
που περιλαµβάνονται σε αυτή. Ο χρήστης έχει τη δυνατότητα να κα-
θορίσει τα χαρακτηριστικά αυτής της γραµµής, όπως το πάχος της,
τις διαστάσεις της, το χρώµα της και την εµφάνισή της – συνεχής ή
διακεκοµµένη.
Χρησιµοποιείται για τη χάραξη στην επιφάνεια της φόρµας ενός
ορθογωνίου σχήµατος. Όπως και στην προηγούµενη περίπτωση,
µπορούµε να καθορίσουµε τα χαρακτηριστικά εµφάνισης αυτού του
ορθογωνίου, όπως είναι το πάχος του, το χρώµα του, και ο τρόπος µε
τον οποίο αυτό θα απεικονίζεται στην επιφάνεια της φόρµας.

Επιτρέπει την καταχώρηση προχωρηµένων στοιχείων ελέγχου


στην επιφάνεια της φόρµας, όπως είναι Active Movie Controls, Mi-
crosoft Office Chart, Tabular Data Control, κλπ. Η καταχώρηση αυτή
πραγµατοποιείται δια της επιλογής του προχωρηµένου στοιχείου
ελέγχου από το µενού επιλογών που εµφανίζεται.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 174

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


WIZARD

Όπως έχει ήδη αναφερθεί, η δηµιουργία πλαισίων ελέγχου πάνω στην επιφά-
νεια της τρέχουσας φόρµας, µπορεί να γίνει είτε άµεσα από το χρήστη, είτε έµµεσα,
µέσω της χρήσης του control wizard, µε τη βοήθεια του οποίου είναι δυνατός ο εύ-
κολος καθορισµός των ιδιοτήτων του πλαισίου ελέγχου. Επειδή δε, το κάθε πλαίσιο
ελέγχου έχει τις δικές του ιδιότητες, και το δικό του τρόπο συµπεριφοράς, το περιε-
χόµενο του control wizard, ποικίλλει ανάλογα µε την περίσταση. Στις επόµενες σελί-
δες θα περιγράψουµε αναλυτικά τον τρόπο µε τον οποίο χρησιµοποιούµε τον control
wizard για τον καθορισµό των ιδιοτήτων των πιο χαρακτηριστικών πλαισίων ελέγχου
που µπορούµε να τοποθετήσουµε πάνω στην επιφάνεια της τρέχουσας φόρµας.

Α) ∆ΗΜΙΟΥΡΓΙΑ ΟΜΑ∆ΑΣ ΕΠΙΛΟΓΩΝ

Στις περιπτώσεις κατά τις οποίες επιθυµούµε να επιλέξουµε µια τιµή µέσα από
κάποιο σύνολο τιµών οι οποίες είναι γνωστές, καθορισµένες εκ των προτέρων, και
δεν πρόκειται ποτέ να µεταβληθούν, µπορούµε να δηµιουργήσουµε µια οµάδα επι-
λογών σε κάθε στοιχείο της οποίας θα αποδώσουµε και µια από αυτές τις τιµές. Το
βασικό χαρακτηριστικό αυτής της οµάδας είναι πως µόνο ένα από τα στοιχεία της
µπορεί να είναι επιλεγµένο κάθε φορά, και αυτό σηµαίνει, πως αν επιλέξουµε κά-
ποιο από αυτά τα στοιχεία, θα καταργηθεί η επιλογή από το προηγούµενο επιλεγµένο
στοιχείο. Χαρακτηριστικό παράδειγµα µιας τέτοιας οµάδας επιλογών είναι ο καθορι-
σµός του προσανατολισµού της σελίδας στο Microsoft Word, η οποία µπορεί να εί-
ναι είτε οριζόντια, είτε κατακόρυφη – προφανώς όµως δεν µπορεί να είναι και τα δύο
ταυτόχρονα.

Παράδειγµα οµάδας επιλογών µε δύο


radio buttons µε τη βοήθεια των
οποίων καθορίζουµε τον προσανατολι-
σµό της σελίδας στο Microsoft Word.
Τα δύο radio buttons φέρουν τις ετικέ-
τες «Κατακόρυφος» και «Οριζόντιος»
και η επιλογή του ενός καταργεί την
επιλογή του άλλου. Όπως θα δούµε στις
επόµενες σελίδες, στη θέση των radio
buttons µπορούν να χρησιµοποιηθούνε
και άλλα πλαίσια ελέγχου, όπως είναι
για παράδειγµα check boxes και κου- Σχήµα 67 : Παράδειγµα οµάδας επιλογών
µπιά εναλλαγής.

Ας δούµε τώρα µε ποιο τρόπο είναι δυνατή η εισαγωγή µιας οµάδας επιλογών
µε τη χρήση του control wizard. Στο παράδειγµά µας θα κατασκευάσουµε µια τέτοια
οµάδα προκειµένου να οµαδοποιήσουµε τους εργαζόµενους της εταιρείας µε κριτήριο
την ηλικία τους. Για να το κάνουµε αυτό, ορίζουµε τέσσερις οµάδες ηλικιών – από 18
έως 25, από 25 έως 45, από 45 έως 55 και από 55 έως 65. Αυτό σηµαίνει πως η
οµάδα επιλογών θα περιέχει τέσσερα πλαίσια ελέγχου των οποίων τις ετικέτες ανα-
γράφουµε στο πλαίσιο του επόµενου διαλόγου, που φέρει τον τίτλο «Ονόµατα Ετι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 175

κετών». (Σηµείωση: ο αριθµός των στοιχείων της οµάδας επιλογών καθορίζεται


αυτόµατα, και είναι ο ίδιος µε το πλήθος των ετικετών που αναγράφουµε)

Σχήµα 68 : Καθορισµός της ετικέτας για κάθε στοιχείο της οµάδας επιλογών

Μετά την αναγραφή των ετικετών θα πρέπει να καθορίσουµε ποιο από τα


στοιχεία ελέγχου αυτής της οµάδας επιλογών θα εµφανίζεται επιλεγµένο όταν ο
χρήστης ανοίγει την τρέχουσα φόρµα για την καταχώρηση δεδοµένων. Αυτή η προε-
πιλεγµένη τιµή (default value) καθορίζεται ανάλογα µε τις απαιτήσεις του προβλή-
µατος και συνήθως είναι εκείνη που χαρακτηρίζει το µεγαλύτερο ποσοστό των εγ-
γραφών που καταχωρούµε στους πίνακες. Στο παράδειγµά µας ως προεπιλεγµένη
τιµή θέτουµε την οµάδα ηλικιών από 18 έως 25 ετών.

Σχήµα 69 : Καθορισµός του προεπιλεγµένου στοιχείου της οµάδας επιλογών

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 176

Στο επόµενο βήµα της διαδικασίας θα πρέπει σε κάθε στοιχείο της οµάδας
επιλογών να αντιστοιχίσουµε και κάποια τιµή. Αυτή η τιµή θα επιστρέφεται στην
εφαρµογή και θα καταχωρείται στον πίνακα των υπαλλήλων της εταιρείας. Έτσι, εάν
στον πίνακα EMPLOYEE προσθέσουµε ακόµη ένα αριθµητικό πεδίο µε όνοµα
«Οµάδα Ηλικίας», και χρησιµοποιήσουµε την οµάδα επιλογών µαζί µε τις τιµές που
παρουσιάζονται στο επόµενο παράθυρο, η επιλογή του στοιχείου µε ετικέτα «Από 25
έως 45», θα έχει ως αποτέλεσµα την καταχώρηση της τιµής 2 στο πεδίο «Οµάδα
Ηλικίας» του πίνακα EMPLOYEE.

Σχήµα 70 : Απόδοση τιµών στα στοιχεία της οµάδας επιλογών

Χρησιµοποιώντας στο στάδιο αυτό το κουµπί «Επόµενο» περνάµε στην επό-


µενη οθόνη όπου µπορούµε να καθορίσουµε εάν η τιµή που επιστρέφεται από την
οµάδα επιλογών, θα καταχωρείται σε κάποιο πεδίο κάποιου πίνακα ή απλώς θα
αποθηκεύεται για µελλοντική χρήση. Ανάλογα λοιπόν µε την περίπτωση διαλέ-
γουµε την πρώτη η τη δεύτερη επιλογή. Στο παράδειγµά µας έχουµε αποφασίσει να
µην αποθηκεύσουµε αυτή την τιµή σε κάποιο πεδίο κάποιου πίνακα, αλλά απλώς να
την διατηρήσουµε για µελλοντική χρήση.

Σχήµα 71 : Αποθήκευση της τιµής της οµάδας επιλογών για µελλοντική χρήση

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 177

Μετά τον καθορισµό των χαρακτηριστικών της οµάδας επιλογής, όσον αφορά
τα δεδοµένα που διαπραγµατεύεται, µπορούµε να καθορίσουµε και τα χαρακτηρι-
στικά εµφάνισης των στοιχείων αυτής της οµάδας. Στις πιο πολλές περιπτώσεις,
αυτά τα στοιχεία αναπαρίστανται µε radio buttons, τα οποία ο χρήστης επιλέγει συ-
νήθως µε το ποντίκι. Εναλλακτικά στη θέση των radio buttons µπορούν να χρησιµο-
ποιηθούνε check boxes ή κουµπιά εναλλαγής. Εκτός από το είδος των πλαισίων που
θα χρησιµοποιήσουµε µπορούµε να καθορίσουµε ακόµη και τον τρόπο της εµφάνι-
σης της οµάδας επιλογής, εάν δηλαδή θα εµφανίζεται επίπεδη, υπερυψωµένη ή
βυθισµένη, καθώς και εάν θα συνοδεύεται από σκιά ή όχι. Όλα αυτά τα χαρακτηρι-
στικά εµφάνισης µπορούνε να καθοριστούνε από το διάλογο του επόµενου σχήµατος.

Σχήµα 72 : Καθορισµός των χαρακτηριστικών εµφάνισης της οµάδας επιλογής

Τέλος, η διαδικασία καθορισµού των ιδιοτήτων της οµάδας επιλογών, ολο-


κληρώνεται, καθορίζοντας µια ετικέτα για αυτή την οµάδα, η οποία θα εµφανίζε-
ται στην επιφάνεια της τρέχουσας φόρµας, προκειµένου να ενηµερώνει το χρήστη για
το ρόλο αυτής της οµάδας και για τον τρόπο µε τον οποίο αυτή χρησιµοποιείται.

Σχήµα 73 : Καθορισµός λεζάντας για τη νέα οµάδα επιλογών

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 178

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

Ένα δεύτερο πλαίσιο ελέγχου που επίσης χρησιµοποιείται κατά κόρον στις
φόρµες καταχώρησης δεδοµένων, είναι τα πλαίσια λίστας (list boxes) και τα σύν-
θετα πλαίσια (combo boxes). Και τα δύο αυτά στοιχεία εµφανίζουν µια λίστα από
τιµές, από τις οποίες ο χρήστης θα πρέπει να επιλέξει εκείνη που τον ενδιαφέρει. Η
διαφορά ανάµεσα στα δύο αυτά πλαίσια ελέγχου έχει να κάνει µε τον τρόπο εµφάνι-
σής τους. Πιο συγκεκριµένα, το πλαίσιο λίστας παραµένει πάντοτε ανοικτό και
εµφανίζει συνεχώς τα δεδοµένα που περιέχει, ενώ το σύνθετο πλαίσιο είναι πά-
ντοτε κλειστό, και ανοίγει µόνο όταν ο χρήστης το χρησιµοποιεί για να επιλέξει
κάποια από τις τιµές που περιέχει. Παράδειγµα πλαισίου λίστας καθώς και ανοιχτού
και κλειστού σύνθετου πλαισίου παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 74 : Παράδειγµα πλαισίου λίστας και σύνθετου πλαισίου

Η πιο σηµαντική πληροφορία που θα πρέπει να καθορίσουµε κατά τη διαδι-


κασία εισαγωγής ενός list box ή combo box στην επιφάνεια της τρέχουσας φόρµας,
είναι η προέλευση των τιµών που περιλαµβάνονται σε αυτό. Όπως φαίνεται και
από το επόµενο παράθυρο, ο χρήστης έχει τη δυνατότητα, τόσο να ανακτήσει τις
τιµές από κάποιο πίνακα ή από κάποιο ερώτηµα της βάσης, όσο και τις πληκτρο-
λογήσει από µόνος του. Σε µια τέτοια περίπτωση, η επιλογή που θα κάνει, συσχετί-
ζεται άµεσα µε τη φύση των τιµών που θα εµφανιστούνε στο στοιχείο ελέγχου.
Εάν αυτές οι τιµές είναι για παράδειγµα τα ονόµατα των δώδεκα µηνών του έτους
ή των επτά ηµερών της εβδοµάδας, µπορεί κάλλιστα να τις πληκτρολογήσει µε το
χέρι διότι δεν πρόκειται ποτέ να µεταβληθούν Εάν όµως θέλει να επιλέξει κάποιον
από τους υπάλληλους της εταιρείας και στη συνέχεια να εµφανίσει την προσωπική
του καρτέλα, θα πρέπει να ανακτήσει αυτά τα ονόµατα και στη συνέχεια να τα εµφα-
νίσει στο πλαίσιο λίστας, χρησιµοποιώντας τον πίνακα EMPLOYEE τόσο άµεσα,
όσο και έµµεσα – µε τη δηµιουργία ενός ερωτήµατος που να αναφέρεται σε αυτόν.
Στις επόµενες σελίδες θα περιγράψουµε τον τρόπο µε τον οποίο µπορούµε να εµφα-
νίσουµε στο list box ή στο combo box, δεδοµένα που βρίσκονται αποθηκευµένα
στους πίνακες της βάσης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 179

Σχήµα 75 : Καθορισµός της προέλευσης των δεδοµένων του πλαισίου λίστας ή του σύνθετου πλαισίου

Έχοντας επιλέξει λοιπόν ως πηγή των δεδοµένων προέλευσης κάποιο πί-


νακα ή κάποιο ερώτηµα, θα πρέπει στο επόµενο στάδιο, να καθορίσουµε ποιος θα
είναι αυτός ο πίνακας ή αυτό το ερώτηµα. Για να το κάνουµε αυτό, µεταφερόµαστε
στο επόµενο παράθυρο του control wizard, και επιλέγουµε από τη λίστα που εµφανί-
ζει, τον πίνακα ή το ερώτηµα τα δεδοµένα του οποίου θα εµφανίσουµε στο πλαί-
σιο που κατασκευάζουµε. Στο παράδειγµά µας θα κατασκευάσουµε ένα πλαίσιο λί-
στας – η διαδικασία είναι ακριβώς η ίδια και για ένα σύνθετο πλαίσιο – που να εµφα-
νίζει τους κωδικούς SSN όλων των υπαλλήλων της εταιρείας. Για το λόγο αυτό επι-
λέγουµε από τη λίστα των πινάκων της βάσης που εµφανίζεται στο παρακάτω παρά-
θυρο, τον πίνακα EMPLOYEE.

Σχήµα 76 : Καθορισµός του πίνακα προέλευσης των δεδοµένων του στοιχείου ελέγχου

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 180

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε ποια πεδία του
πίνακα EMPLOYEE θα χρησιµοποιηθούν για να τροφοδοτήσουν το πλαίσιο λί-
στας µε δεδοµένα. Στην προκειµένη περίπτωση αυτό είναι το πεδίο SSN το οποίο και
επιλέγουµε. Εάν θέλουµε το πλαίσιο λίστας που κατασκευάζουµε να έχει περισσότε-
ρες από µία στήλες, επιλέγουµε στο στάδιο αυτό και άλλα πεδία.

Σχήµα 77 : Καθορισµός των πεδίων του πίνακα προέλευσης του στοιχείου ελέγχου

Έχοντας καθορίσει την πηγή των δεδοµένων προέλευσης, στο επόµενο πα-
ράθυρο παρουσιάζεται το πλαίσιο λίστας, έτσι όπως θα εµφανίζεται στην επιφάνεια
της τρέχουσας φόρµας, αµέσως µετά την ολοκλήρωση της κατασκευής του. Στο ση-
µείο αυτό έχουµε τη δυνατότητα – εάν το επιθυµούµε – να µεταβάλλουµε το πλάτος
της στήλης του πλαισίου λίστας, κάτι που το κάνουµε πολύ εύκολα, χρησιµοποιώ-
ντας το ποντίκι. Επίσης µπορούµε να καθορίσουµε εάν εκτός από τη στήλη µε τα
προς εµφάνιση δεδοµένα, θα εµφανιστεί και η στήλη µε τις τιµές του κύριου κλειδιού
για αυτά τα δεδοµένα. Αν και έχουµε τη δυνατότητα να εµφανίσουµε τη στήλη του
κύριου κλειδιού, εν τούτοις αυτό είναι κάτι που δεν συνίσταται.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 181

Σχήµα 78 : Καθορισµός των χαρακτηριστικών εµφάνισης του στοιχείου ελέγχου

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε µε ποιο τρόπο


η Microsoft Access θα διαπραγµατευτεί την τιµή που θα επιλέγει ο χρήστης από
το πλαίσιο λίστας, κατά την αλληλεπίδρασή του µε την εφαρµογή. Μια εύκολη λύση
που έχουµε στη διάθεσή µας είναι να διατηρήσουµε αυτή την τιµή για µελλοντική
χρήση. Στις πιο πολλές όµως περιπτώσεις, η τιµή αυτή αποθηκεύεται σε κάποιον από
τους πίνακες της βάσης. Ας υποθέσουµε για παράδειγµα, πως βρισκόµαστε στην καρ-
τέλα καταχώρησης ενός νέου υπαλλήλου και επιθυµούµε να ορίσουµε για τον εν
λόγω υπάλληλο κάποιο manager. Επειδή όµως όπως έχουµε αναφέρει στο θεωρητικό
µέρος των σηµειώσεων, αυτός ο manager είναι και ο ίδιος κάποιος υπάλληλος, µπο-
ρούµε να εµφανίσουµε ένα πλαίσιο λίστας που να περιέχει τους κωδικούς SSN
όλων των υπαλλήλων, να ζητήσουµε από το χρήστη να επιλέξει τον κωδικό SSN
του manager από αυτή τη λίστα, και στη συνέχεια να καταχωρήσουµε αυτόν τον
κωδικό στο πεδίο SUPERSSN για τον νέο EMPLOYEE. Με τον τρόπο αυτό αφ’
ενός µεν απλοποιούµε και επιταχύνουµε τη διαδικασία, αφετέρου δε, ελαχιστο-
ποιούµε την πιθανότητα εσφαλµένης καταχώρησης, καθώς ο κωδικός SSN που
επιλέγει ο χρήστης είναι ένας υπαρκτός κωδικός SSN που ανήκει σε κάποιον από
τους υπαλλήλους της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 182

Σχήµα 79 : Αποθήκευση της επιλεγµένης τιµής του πλαισίου ελέγχου σε πεδίο πίνακα της βάσης

Τέλος ο καθορισµός των ιδιοτήτων για το νέο πλαίσιο λίστας (ή σύνθετο


πλαίσιο), ολοκληρώνεται µε την καταχώρηση του κειµένου της ετικέτας που θα εµ-
φανίζεται στην επιφάνεια της τρέχουσας φόρµας µαζί µε το καινούριο στοιχείο ελέγ-
χου.

Σχήµα 80 : Καθορισµός της ετικέτας του νέου στοιχείου ελέγχου

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 183

Γ) ∆ΗΜΙΟΥΡΓΙΑ PUSH BUTTON

Τα κουµπιά εντολών (push buttons) είναι από τα πιο συνηθισµένα πλαίσια


ελέγχου και χρησιµοποιούνται σε όλες ανεξαιρέτως τις φόρµες για την πραγµατοποί-
ηση ενός µεγάλου πλήθους διαδικασιών, όπως το άνοιγµα και το κλείσιµο µιας
φόρµας, η εκτέλεση κάποιου ερωτήµατος, ή η εκτύπωση µιας αναφοράς. Χρησι-
µοποιώντας τον control wizard µπορούµε να καθορίσουµε τόσο τη διαδικασία που
θα πραγµατοποιηθεί χρησιµοποιώντας κάποιο κουµπί, όσο και τις παραµέτρους που
ενδεχοµένως χρειαστεί να ορίσουµε. Ο καθορισµός όλων αυτών των πληροφοριών
µπορεί να γίνει µέσα από το επόµενο πλαίσιο διαλόγου, από όπου επιλέγουµε τη δια-
δικασία που µας ενδιαφέρει σε κάθε περίπτωση.

Σχήµα 81 : Καθορισµός της λειτουργίας που θα πραγµατοποιεί το νέο κουµπί εντολής

Το παραπάνω παράθυρο περιέχει κάποιες κατηγορίες διαδικασιών, κάθε µια


εκ των οποίων περιλαµβάνει ένα πλήθος ενεργειών που µπορούµε να πραγµατοποιή-
σουµε χρησιµοποιώντας ένα κουµπί εντολής. Σε µια πιο λεπτοµερή περιγραφή, αυτές
οι ενέργειες είναι οι ακόλουθες:

Μετακίνηση στις εγγραφές Λειτουργίες εγγραφών

Σχήµα 82 : ∆ιαδικασίες µετακίνησης στις εγγραφές και λειτουργίες εγγραφών

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 184

Λειτουργίες φορµών Λειτουργίες εκθέσεων

Σχήµα 83 : Λειτουργίες φορµών και αναφορών που πραγµατοποιούνται από τα κουµπιά εντολών

Εφαρµογή ∆ιάφορα

Σχήµα 84 : Εκτέλεση εφαρµογών και λοιπές διαδικασίες

Ανάλογα λοιπόν µε την ενέργεια που θέλουµε να αποδώσουµε στο κουµπί


εντολής που δηµιουργούµε, χρησιµοποιούµε την κατάλληλη επιλογή από το παρα-
πάνω πλαίσιο διαλόγου, και χρησιµοποιώντας τις διάφορες οθόνες του control wiz-
ard καθορίζουµε πλήρως τη λειτουργικότητα του νέου στοιχείου ελέγχου.

Ως ένα παράδειγµα χρήσης του control wizard θα κατασκευάσουµε ένα κου-


µπί µε το οποίο ο χρήστης θα µπορεί να κλείνει την τρέχουσα φόρµα. Για να το κά-
νουµε αυτό, θα πρέπει από την πρώτη οθόνη του control wizard να επιλέξουµε την
κατηγορία «Λειτουργίες φορµών» και την ενέργεια «Κλείσιµο φόρµας». Στην περί-
πτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο δια-
λόγου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 185

Σχήµα 85 : ∆ηµιουργία κουµπιού εντολής που θα κλείνει την τρέχουσα φόρµα

Επειδή η εργασία που έχουµε επιλέξει είναι απλή και εντελώς συγκεκριµένη,
το µόνο πράγµα που θα πρέπει να ορίσουµε εδώ, είναι τα χαρακτηριστικά εµφάνι-
σης του νέου κουµπιού, το οποίο µπορεί να φέρει είτε µια απλή ετικέτα είτε ένα ει-
κονίδιο – στην τελευταία περίπτωση θα πρέπει να διαλέξουµε αυτό το εικονίδιο από
τη λίστα των διαθέσιµων εικόνων. Τέλος θα πρέπει να αποδώσουµε ένα όνοµα σε
αυτό το κουµπί το οποίο και θα χρησιµοποιείται κάθε φορά που θέλουµε να αναφερ-
θούµε σε αυτό το πλαίσιο ελέγχου – αυτή η διαδικασία γίνεται από το πλαίσιο διαλό-
γου που παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 86 : Καθορισµός του ονόµατος για το νέο κουµπί εντολής

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 186

∆) ΕΙΣΑΓΩΓΗ ΕΙΚΟΝΑΣ ΣΤΗΝ ΤΡΕΧΟΥΣΑ ΦΟΡΜΑ

Σε ορισµένες περιπτώσεις επιθυµούµε να εµφανίσουµε στην επιφάνεια της


φόρµας ορισµένες εικόνες µε θέµα σχετικό µε την βάση δεδοµένων, προκειµένου να
προσδώσουµε στην εφαρµογή µας, ένα ευχάριστο και φιλικό χαρακτήρα. Στην περί-
πτωση αυτή το µόνο που έχουµε να κάνουµε είναι να καθορίσουµε το αρχείο της ει-
κόνας που θέλουµε να χρησιµοποιήσουµε, κάτι που γίνεται µε τη βοήθεια του διαλό-
γου του επόµενου σχήµατος.

Σχήµα 87 : Καθορισµός του αρχείου εικόνας που πρόκειται να εµφανιστεί στην τρέχουσα φόρµα

Έχοντας καθορίσει αυτό το αρχείο, η Access διαβάζει τα περιεχόµενά του και


εµφανίζει την εικόνα στη θέση που έχει επιλέξει ο χρήστης πάνω στην επιφάνεια της
τρέχουσας φόρµας.

Ε) ΕΙΣΑΓΩΓΗ ΑΝΤΙΚΕΙΜΕΝΟΥ

Η εισαγωγή αντικειµένου είναι µια πιο γενική περίπτωση από την εισαγωγή
εικόνας, και επιτρέπει στο χρήστη να τοποθετήσει πάνω στην επιφάνεια της τρέχου-
σας φόρµας, οποιοδήποτε τύπο αντικειµένου, και όχι µόνο εικόνες. Στην περίπτωση
αυτή εκτός από το όνοµα του αρχείου που περιέχει το αντικείµενο προς καταχώρηση,
θα πρέπει να καθορίσουµε και τον τύπο αυτού του αντικειµένου, κάτι που γίνεται
χρησιµοποιώντας το πλαίσιο διαλόγου του επόµενου σχήµατος.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 187

Σχήµα 88 : Καθορισµός του τύπου του αντικειµένου που πρόκειται να ενσωµατωθεί στην τρέχουσα
φόρµα

ΣΤ) ΕΙΣΑΓΩΓΗ ΥΠΟΦΟΡΜΑΣ

Όπως έχουµε ήδη αναφέρει σε προηγούµενη ενότητα, η υποφόρµα ή δευτε-


ρεύουσα φόρµα (subform) ορίζεται ως µια φόρµα η οποία βρίσκεται ενσωµατω-
µένη σε µία άλλη φόρµα (κύρια φόρµα) και τα δεδοµένα της οποίας, συσχετίζο-
νται µε εκείνα της κύριας φόρµας. Οι υποφόρµες χρησιµοποιούνται για να εµφανί-
σουν δεδοµένα πινάκων οι οποίοι συσχετίζονται µέσω µιας συσχέτισης µε πολλαπλό-
τητα 1:Ν. Για παράδειγµα µπορούµε στην προσωπική καρτέλα του κάθε υπαλλήλου
της εταιρείας, να συµπεριλάβουµε µια υποφόρµα στην οποία να εµφανίζονται τα
στοιχεία των PROJECTS στα οποία συµµετέχει αυτός ο EMPLOYEE.

Ας υποθέσουµε για παράδειγµα πως βρισκόµαστε στην προβολή σχεδίασης


της προσωπικής καρτέλας του EMPLOYEE και θέλουµε να δηµιουργήσουµε µια
υποφόρµα η οποία να περιέχει την παραπάνω πληροφορία. Ξεκινώντας τον control
wizard για την περίπτωση αυτή, θα µας εµφανίζει το παράθυρο της επόµενης οθόνης,
από όπου θα πρέπει να καθορίσουµε ποια φόρµα θέλουµε να συµπεριλάβουµε στην
τρέχουσα φόρµα, ως υποφόρµα. Ως τέτοια φόρµα επιλέγουµε την φόρµα µε το όνοµα
PROJECT η οποία εµφανίζει στοιχεία των έργων της εταιρείας και η οποία υποτίθε-
ται πως είναι µια υπάρχουσα φόρµα, έχει δηλαδή δηµιουργηθεί σε προηγούµενο βήµα
της διαδικασίας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 188

Σχήµα 89 : Καθορισµός της φόρµας που πρόκειται να χρησιµοποιηθεί ως υποφόρµα

Στο επόµενο βήµα θα πρέπει να καθορίσουµε τον τρόπο µε τον οποίο θα συ-
σχετίσουµε την κύρια µε τη δευτερεύουσα φόρµα. Για να το κάνουµε αυτό θα πρέ-
πει να ταυτοποιήσουµε το κοινό πεδίο ανάµεσα στους αντίστοιχους πίνακες, και
το οποίο υλοποιεί τη συσχέτιση που υφίσταται ανάµεσά τους. Εάν παρατηρήσουµε
προσεκτικά τη δοµή των πινάκων EMPLOYEE και PROJECT θα διαπιστώσουµε
πως το πεδίο αυτό είναι ο κωδικός του τµήµατος στο οποίο ανήκει ο EMPLOYEE
και το οποίο έχει αναλάβει να ολοκληρώσει κάποιο PROJECT. Αυτό το πεδίο
στον πίνακα EMPLOYEE έχει το όνοµα DNO ενώ στον πίνακα PROJECT ονοµά-
ζεται DNUM. Έχοντας τώρα δηµιουργήσει τις δύο φόρµες για τους πίνακες
EMPLOYEE και PROJECT, µπορούµε να τοποθετήσουµε τη φόρµα για το
PROJECT ως υποφόρµα, στη φόρµα για τον EMPLOYEE και στη συνέχεια να τις
συσχετίσουµε µέσω του πεδίου DNO όπως φαίνεται στο επόµενο σχήµα.

Σχήµα 90 : Συσχέτιση κύριας και δευτερεύουσας φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 189

Τέλος η διαδικασία ολοκληρώνεται ορίζοντας ένα όνοµα για αυτή την υπο-
φόρµα το οποίο θα χρησιµοποιούµε κάθε φορά που θα θέλουµε να αναφερόµαστε σε
αυτή. Στο παράδειγµά µας αυτό το όνοµα είναι η συµβολοσειρά «Υποφόρµα Έργων
Υπαλλήλου».

Σχήµα 91 : Καθορισµός ονόµατος για τη δευτερεύουσα φόρµα

Εφαρµόζοντας την παραπάνω διαδικασία, µπορούµε εύκολα να κατασκευά-


σουµε µια υποφόρµα µέσα σε µια υπάρχουσα φόρµα. Ωστόσο η κατασκευή µιας
υποφόρµας µπορεί να γίνει ταυτόχρονα µαζί µε τη δηµιουργία της κεντρικής
φόρµας, και χρησιµοποιώντας τον Form Wizard. Προκειµένου να δείξουµε ένα
παράδειγµα εφαρµογής αυτής της µεθόδου, θα κατασκευάσουµε τη φόρµα των
προσωπικών στοιχείων του υπαλλήλου, και µέσα σε αυτή, µια υποφόρµα που θα
περιέχει τα στοιχεία των έργων στα οποία δουλεύει ο κάθε υπάλληλος.

Για να το κάνουµε αυτό, µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης


της βάσης δεδοµένων, και από εκεί επιλέγουµε «Φόρµες» και στη συνέχεια «∆η-
µιουργία φόρµας µε τη χρήση οδηγού». Στη συνέχεια, στο παράθυρο που θα εµφα-
νιστεί, επιλέγουµε τον πίνακα EMPLOYEE και διαλέγουµε τα πεδία FNAME,
LNAME, MINIT και SSN ως τα πεδία εκείνα τα οποία θα χρησιµοποιηθούν στην
τρέχουσα φόρµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 190

Σχήµα 92 : Καθορισµός των πεδίων της κύριας φόρµας

Μετά την πραγµατοποίηση αυτής της διαδικασίας, δεν προχωρούµε στην επό-
µενη οθόνη, αλλά επαναλαµβάνουµε την ίδια διαδικασία, αυτή τη φορά για τον πί-
νακα PROJECT. Πιο συγκεκριµένα, εµφανίζουµε τα πεδία αυτού του πίνακα στο
αριστερό µέρος του παραθύρου, και επιλέγουµε τα πεδία Project Name, Project
Number και Project Location, ως εκείνα τα οποία θα εµφανιστούν στη φόρµα που
θα κατασκευάσουµε.

Σχήµα 92 : Καθορισµός των πεδίων της δευτερεύουσας φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 191

Εάν στο σηµείο αυτό πατήσουµε το κουµπί «Επόµενο», η Microsoft Access


θα καταλάβει πως τα πεδία που έχουµε επιλέξει ανήκουν σε περισσότερους από έναν
πίνακες, και στο επόµενο βήµα θα µας ρωτήσει µε ποιο τρόπο θέλουµε να λάβει
χώρα η οµαδοποίηση αυτών των πεδίων, έτσι ώστε να καλύψουµε τις ανάγκες µας.
Εάν επιλέξουµε αυτή η οµαδοποίηση να γίνει κατά EMPLOYEE, η δευτερεύουσα
φόρµα θα περιέχει τα PROJECTS στα οποία εργάζεται κάποιος EMPLOYEE, ενώ
εάν επιλέξουµε αυτή η οµαδοποίηση να γίνει κατά PROJECT, η δευτερεύουσα
φόρµα θα περιέχει τους EMPLOYEES οι οποίοι απασχολούνται σε κάθε
PROJECT.

Σχήµα 93 : Οµαδοποίηση των δεδοµένων των πινάκων που συσχετίζονται µε την κύρια και δευτερεύ-
ουσα φόρµα

Στην προκειµένη περίπτωση, επειδή θέλουµε η κύρια φόρµα να περιέχει τα


προσωπικά στοιχεία του κάθε εργαζόµενου, ενώ η υποφόρµα να περιέχει τα στοι-
χεία των έργων στα οποία αυτός απασχολείται, θα επιλέξουµε τον πρώτο τρόπο
οµαδοποίησης. Επίσης, θα πρέπει να επιλέξουµε το radio button που φέρει τον τίτλο
«Φόρµα µε δευτερεύουσες φόρµες». Με τον τρόπο αυτό γνωστοποιούµε στην Ac-
cess πως οι δύο φόρµες που θέλουµε να δηµιουργήσουµε θα χαρακτηρίζονται από µια
σχέση φόρµας – υποφόρµας. Εάν αντίθετα χρησιµοποιήσουµε την επιλογή «Συνδε-
δεµένες φόρµες», η Access θα κατασκευάσει δύο ξεχωριστές φόρµες οι οποίες θα
συσχετίζονται µεταξύ τους, κάτι όµως που δεν µας ενδιαφέρει στην προκειµένη περί-
πτωση.

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε τον τρόπο


προβολής των στοιχείων της δευτερεύουσας φόρµας, και πιο συγκεκριµένα το εάν
αυτή θα εµφανίζεται ως πίνακας ή ως φύλλο δεδοµένων. Στο παράδειγµά µας θα
επιλέξουµε την προβολή φύλλου δεδοµένων έτσι ώστε τα PROJECTS στα οποία

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 192

απασχολείται ο κάθε EMPLOYEE να εµφανίζονται σε µια γραµµή το καθένα, και το


ένα κάτω από το άλλο. Εάν αντίθετα επιλέξουµε την προβολή πίνακα, τα στοιχεία
των έργων θα εµφανίζονται ως ξεχωριστές εγγραφές το ένα µετά το άλλο, και θα
µπορούµε να µετακινηθούµε από το ένα στο άλλο, χρησιµοποιώντας τα πλήκτρα µε-
τακίνησης εγγραφών που θα βρίσκονται πάνω στην υποφόρµα.

Σχήµα 94 : Καθορισµός της διάταξης των πεδίων στην επιφάνεια της υποφόρµας

Αµέσως µετά τον καθορισµό των παραπάνω χαρακτηριστικών, θα πρέπει να


καθορίσουµε και ορισµένες ιδιότητες που έχουν να κάνουν µε τον τρόπο εµφάνισης
της υποφόρµας στην οθόνη του χρήστη. Συνήθως επιλέγουµε το τυπικό στυλ εµ-
φάνισης που είναι και το προεπιλεγµένο για όλες τις εφαρµογές των Microsoft Win-
dows.

Σχήµα 95 : Καθορισµός του στυλ εµφάνισης της δευτερεύουσας φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 193

Στο τελευταίο βήµα της διαδικασίας, θα πρέπει να καθορίσουµε ένα όνοµα για
την κύρια και τη δευτερεύουσα φόρµα. Στο παράδειγµά µας η κύρια φόρµα ονοµάζε-
ται EMPLOYEE_MAIN_FORM, ενώ η δευτερεύουσα φόρµα, φέρει το όνοµα
PROJECT_SUBFORM.

Σχήµα 96 : Καθορισµός του ονόµατος για την κύρια και δευτερεύουσα φόρµα

Στο σηµείο αυτό έχουµε ολοκληρώσει τη διαδικασία της ταυτόχρονης δη-


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

Σχήµα 97 : Παράδειγµα κύρια και δευτερεύουσας φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 194

Στο παραπάνω σχήµα εµφανίζεται η πρώτη από τις οκτώ εγγραφές του πίνακα
EMPLOYEE που αντιστοιχεί στον εργαζόµενο John B Smith µε κωδικό SSN
123456789. Αυτά τα στοιχεία εµφανίζονται στην κύρια φόρµα, ενώ στην υποφόρµα
εµφανίζονται τα στοιχεία των PROJECTS στα οποία εργάζεται ο John Smith. Σύµ-
φωνα µε τις εγγραφές της υποφόρµας, ο Smith εργάζεται στο PROJECT ProductX
µε κωδικό 1 που γίνεται στο Bellaire, και στο PROJECT Reorganization µε κωδικό
20 που γίνεται στο Houston.

Ζ) ΕΙΣΑΓΩΓΗ ΠΕΡΙΣΣΟΤΕΡΩΝ ΣΤΟΙΧΕΙΩΝ ΕΛΕΓΧΟΥ

Εκτός από τα προαναφερόµενα αντικείµενα που έχουµε περιγράψει στις


προηγούµενες παραγράφους, είναι δυνατή η εισαγωγή σε µία φόρµα και πολλών άλ-
λων στοιχείων ελέγχου, τα οποία συσχετίζονται µε µια πληθώρα εφαρµογών που βρί-
σκονται εγκατεστηµένες στο σύστηµά µας. Το επόµενο σχήµα παρουσιάζει ενδει-
κτικά ορισµένα από αυτά τα αντικείµενα τα οποία µπορούν να τοποθετηθούν στην
επιφάνεια µιας φόρµας. Αξίζει να σηµειωθεί πως επειδή γενικά στον κάθε υπολογι-
στή βρίσκονται εγκατεστηµένες διαφορετικές εφαρµογές ανάλογα µε τις ανάγκες
του κάθε χρήστη, τα περιεχόµενα αυτού του µενού επιλογών διαφέρουν γενικά
από σύστηµα σε σύστηµα. Προκειµένου δε να καθοριστεί το αντικείµενο που θέ-
λουµε να χρησιµοποιήσουµε, θα πρέπει εκτός από τον τύπο του, να καθορίσουµε και
το όνοµα του αρχείου του σκληρού δίσκου που το περιέχει.

Σχήµα 98 : Ενδεικτικός κατάλογος αντικειµένων που µπορούν να τοποθετηθούν στην επιφάνεια µιας
φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 195

ΚΑΘΟΡΙΣΜΟΣ Ι∆ΙΟΤΗΤΩΝ ΤΗΣ ΤΡΕΧΟΥΣΑΣ ΦΟΡΜΑΣ

Ο καθορισµός των ιδιοτήτων για την φόρµα που σχεδιάζουµε σε κάθε περί-
πτωση, µπορεί να πραγµατοποιηθεί µεταφέροντας τη φόρµα στην προβολή σχεδία-
σης, και χρησιµοποιώντας την επιλογή «Ιδιότητες» από το αναδυόµενο µενού που
εµφανίζεται πατώντας το δεξί πλήκτρο του ποντικιού. Ας σηµειωθεί, ότι ανάλογα
µε τη θέση στην οποία βρίσκεται ο δείκτης του ποντικιού, όταν ενεργοποιούµε την
επιλογή «Ιδιότητες», µπορούµε να καθορίσουµε τα χαρακτηριστικά των διαφορετι-
κών περιοχών της φόρµας, όπως είναι η κεφαλίδα και το υποσέλιδο σελίδας, η κε-
φαλίδα και το υποσέλιδο φόρµας, καθώς και η κεντρική περιοχή της φόρµας που
φέρει τον τίτλο «Λεπτοµέρειες». Εάν θέλουµε να τροποποιήσουµε τις ιδιότητες της
φόρµας στο σύνολό της, θα πρέπει να ενεργοποιήσουµε την επιλογή «Ιδιότητες»,
αφού πρώτα µεταφέρουµε το δείκτη του ποντικιού σε κάποια περιοχή εκτός των προ-
αναφερθέντων πέντε περιοχών – µια τέτοια περιοχή είναι ο κενός χώρος που βρί-
σκεται κάτω από το υποσέλιδο της τρέχουσας φόρµας.

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

Σχήµα 99 : Οι πέντε οµάδες ιδιοτήτων που χαρακτηρίζουν τον τρόπο λειτουργίας µια φόρµας – καθώς
και όλων γενικά των αντικειµένων – της Microsoft Access

Από αυτές τις πέντε κατηγορίες η πρώτη κατηγορία που φέρει το όνοµα
«Μορφή» περιλαµβάνει ιδιότητες που συσχετίζονται µε τα χαρακτηριστικά εµφά-
νισης της θεωρούµενης περιοχής της φόρµας ενώ η δεύτερη που φέρει το όνοµα
«∆εδοµένα» συσχετίζεται µε τα δεδοµένα προέλευσης της φόρµας, που συνήθως
είναι ένας πίνακας ή ερώτηµα. Η οµάδα ιδιοτήτων µε το όνοµα «Συµβάν» επιτρέπει
τον καθορισµό της συµπεριφοράς της φόρµας ως απόκριση στην πραγµατοποί-
ηση κάποιου συµβάντος, ενώ οι ιδιότητες εκείνες που οµαδοποιούνται κάτω από την
ετικέτα «Άλλα» συσχετίζονται µε χαρακτηριστικά της φόρµας που δεν µπορούν να
καταταγούν σε καµία από τις προηγούµενες κατηγορίες. Τέλος η πέµπτη οµάδα ιδιο-
τήτων που φέρει την ετικέτα «Όλα» περιλαµβάνει όλες τις ιδιότητες που ανήκουν
στις τέσσερις προηγούµενες οµάδες, και τις εµφανίζει όλες στην ίδια σελίδα.

Στις επόµενες ενότητες περιγράφουµε το σύνολο των ιδιοτήτων που µπορούµε


να καθορίσουµε για όλες τις περιοχές µιας φόρµας αλληλεπίδρασης µε το χρήστη,
όπως αυτές ορίζονται στο περιβάλλον της Microsoft Access. Για κάθε µια από αυτές
τις ιδιότητες αναγράφουµε εντός παρενθέσεως και τον αντίστοιχο αγγλικό όρο που
την περιγράφει. Αυτή η πληροφορία θα φανεί ιδιαίτερα χρήσιµη σε περιπτώσεις κατά
τις οποίες χρησιµοποιήσουµε αυτές τις ιδιότητες κατά τη διαδικασία ανάπτυξης κώ-
δικα µέσα από το περιβάλλον της Visual Basic.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 196

Α) ΚΑΘΟΡΙΣΜΟΣ Ι∆ΙΟΤΗΤΩΝ ΓΙΑ ΤΗΝ ΚΕΦΑΛΙ∆Α, ΤΟ ΥΠΟΣΕΛΙ∆Ο


ΚΑΙ ΤΗΝ ΚΕΝΤΡΙΚΗ ΠΕΡΙΟΧΗ ΤΗΣ ΦΟΡΜΑΣ

Το σύνολο των ιδιοτήτων που µπορούµε να καθορίσουµε για την κεφαλίδα,


το υποσέλιδα και την κεντρική περιοχή της τρέχουσας φόρµας, παρουσιάζεται
στο επόµενο σχήµα (αυτό το σχήµα αναφέρεται στην κεφαλίδα της φόρµας, αλλά
ακριβώς οι ίδιες ιδιότητες ισχύουν για το υποσέλιδο και την κεντρική περιοχή της
φόρµας, όπως πολύ εύκολα µπορούµε να διαπιστώσουµε):

Σχήµα 100 : Το φύλλο ιδιοτήτων για την κεφαλίδα, το υποσέλιδο και την κεντρική περιοχή
της φόρµας

Σε µια πιο λεπτοµερή περιγραφή, αυτές οι ιδιότητες συσχετίζονται µε τα ακό-


λουθα χαρακτηριστικά :

• Όνοµα (Name property): επιτρέπει τον καθορισµό του ονόµατος της κεφαλί-
δας της τρέχουσας φόρµας. Η συµβολοσειρά που θα χρησιµοποιηθεί στην περί-
πτωση αυτή θα πρέπει να ακολουθεί τους κανόνες ονοµατολογίας της Microsoft
Access, που θέτουν ως µέγιστο µήκος ονόµατος τους 64 χαρακτήρες για τα
αντικείµενα της Access, και τους 256 χαρακτήρες για τα διάφορα πλαίσια ελέγ-
χου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 197

• Αρχή νέας σελίδας (ForceNewPage property): χρησιµοποιώντας την ιδιότητα


αυτή µπορούµε να καθορίσουµε εάν οι διάφορες ενότητες µιας φόρµας ή µιας
αναφοράς (και πιο συγκεκριµένα η κεφαλίδα, το υποσέλιδο και οι λεπτοµέρειες)
θα εκτυπώνονται σε ξεχωριστή σελίδα ή όχι. Οι τέσσερις δυνατές τιµές που
µπορεί να λάβει αυτή η παράµετρος είναι (α) «Πουθενά» (None ή 0), (β) «Πριν
από ενότητα» (Before Section ή 1), (γ) «Μετά από ενότητα» (After Section ή
2), και (δ) «Πριν και Μετά» (Before & After ή 3) και καθορίζουν σε ποιο ση-
µείο της φόρµας ή της αναφοράς θα τοποθετηθεί χαρακτήρας εκκίνησης νέας σε-
λίδας. Για παράδειγµα, στην περίπτωση µιας βάσης δεδοµένων που διατηρεί στοι-
χεία προϊόντων, µπορούµε να σχεδιάσουµε την αναφορά έτσι ώστε η τελευταία
σελίδα της να περιέχει τη φόρµα παραγγελίας του προϊόντος. Στην περίπτωση
αυτή, θέτοντας για την παράµετρο αυτή την τιµή «Πριν από ενότητα», εξανα-
γκάζουµε τη φόρµα παραγγελίας να εκτυπωθεί µόνη της σε ξεχωριστή σελίδα. Ας
σηµειωθεί πως αυτή η ιδιότητα δεν είναι διαθέσιµη για τις κεφαλίδες και τα υπο-
σέλιδα της σελίδας µιας φόρµας.

• ∆ηµιουργία γραµµής ή στήλης (NewRowOrCol property): χρησιµοποιώντας


αυτή την ιδιότητα µπορούµε να καθορίσουµε εάν η κεφαλίδα της φόρµας και τα
δεδοµένα που συσχετίζονται µε αυτή, θα εκτυπωθούν σε µία νέα γραµµή ή
στήλη. Για παράδειγµα, µπορούµε να χρησιµοποιήσουµε αυτή την ιδιότητα προ-
κειµένου να εκτυπώσουµε την κεφαλίδα µιας οµάδας πεδίων στην κορυφή κάθε
νέας στήλης, στην περίπτωση µιας αναφοράς που περιλαµβάνει περισσότερες από
µια στήλες (ωστόσο θα πρέπει να αναφέρουµε πως αυτή η ιδιότητα δεν ισχύει για
την κεφαλίδα και το υποσέλιδο κάποιας σελίδας). Οι δυνατές τιµές που µπορεί να
λάβει αυτή η ιδιότητα, είναι οι ίδιες µε εκείνες που περιγράψαµε για την ιδιότητα
«Αρχή νέας σελίδας», και πιο συγκεκριµένα :

1. «Πουθενά» (None ή 0) : η τιµή αυτή είναι η προεπιλεγµένη. Στην περί-


πτωση αυτή το σηµείο εκκίνησης της νέας γραµµής ή στήλης καθορίζεται
από τις ρυθµίσεις του παραθύρου «∆ιαµόρφωση σελίδας» που βρίσκεται
στο µενού επιλογών «Αρχείο» της εφαρµογής, καθώς επίσης και από το
διαθέσιµο χώρο της σελίδας.

2. «Πριν από ενότητα» (Before Section ή 1): στην περίπτωση αυτή η Ac-
cess εκτυπώνει την τρέχουσα ενότητα σε µια νέα γραµµή ή στήλη, ενώ
στη συνέχεια εκτυπώνει την αµέσως επόµενη ενότητα – π.χ. την ενότητα
«λεπτοµέρειες» - στην ίδια γραµµή ή στήλη.

3. «Μετά από ενότητα» (After Section ή 2): στην περίπτωση αυτή η Ac-
cess εκτυπώνει την τρέχουσα ενότητα στην τρέχουσα γραµµή ή στήλη, και
στη συνέχεια εκτυπώνει την επόµενη ενότητα στην επόµενη γραµµή ή
στήλη.

4. «Πριν & Μετά» (Before & After ή 3): στην περίπτωση αυτή η Access
εκτυπώνει την τρέχουσα ενότητα σε µια νέα γραµµή ή στήλη, και την
αµέσως επόµενη ενότητα στην επόµενη γραµµή ή στήλη.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 198

• ∆ιατήρηση Μαζί (KeepTogether property): η ιδιότητα αυτή χρησιµοποιείται


προκειµένου να επιβάλλουµε στην εφαρµογή να εκτυπώσει όλες τις πληροφο-
ρίες που συσχετίζονται µε µία ενότητα της φόρµας στην ίδια σελίδα. Οι µονα-
δικές τιµές που µπορούµε να χρησιµοποιήσουµε για αυτή την παράµετρο, είναι
«Ναι (Yes)» και «Όχι (No)». Εάν χρησιµοποιήσουµε για αυτή την ιδιότητα την
τιµή «Ναι», η εφαρµογή θα εκτυπώσει όλες τις πληροφορίες της τρέχουσας
ενότητας στην ίδια σελίδα, εάν µπορούν να χωρέσουν σε αυτή, ενώ στην αντί-
θετη περίπτωση – δηλαδή εάν δεν µπορούν να χωρέσουν – ξεκινά την εκτύπωση
από µια νέα σελίδα. Αντίθετα, εάν χρησιµοποιήσουµε την τιµή «Όχι», τα περιε-
χόµενα της τρέχουσας ενότητας θα εκτυπωθούν σε περισσότερες από µία σε-
λίδες.

• Ορατό (Visible property): χρησιµοποιώντας αυτή την ιδιότητα µπορούµε να


εµφανίσουµε ή να αποκρύψουµε τις διάφορες ενότητες µιας φόρµας ή µιας
αναφοράς, καθώς επίσης και τα διάφορα στοιχεία ελέγχου που έχουµε τοπο-
θετήσει πάνω στην επιφάνεια µιας φόρµας. Οι τιµές που µπορεί να λάβει αυτή
η ιδιότητα είναι «Ναι (Yes)» και «Όχι (No)», και µπορούν να τεθούν µέσα από
το περιβάλλον σχεδίασης µιας φόρµας αλλά και µέσα από µια µακροεντολή ή
από ένα πρόγραµµα σε Visual Basic.

• Εµφάνιση όταν (DisplayWhen property): η ιδιότητα αυτή µας επιτρέπει να


καθορίσοµε εάν κάποια από τις ενότητες µιας φόρµας (κεφαλίδα, υποσέλιδο
και λεπτοµέρειες) θα εµφανίζεται ή όχι, και κάτω από ποιες προϋποθέσεις. Η
παράµετρος αυτή µπορεί να πάρει µια από τις επόµενες τρεις τιµές:

1. «Πάντα» (Always ή 0): χρησιµοποιώντας αυτή την τιµή επιβάλλουµε


στην ενότητα της φόρµας να εµφανίζεται τόσο κατά τη χρήση όσο και
κατά την εκτύπωση της φόρµας.

2. «Μόνο εκτύπωση» (Print Only ή 1): χρησιµοποιώντας αυτή την τιµή


αποκρύπτουµε την ενότητα της φόρµας για το χρονικό διάστηµα χρήσης
της, αλλά ωστόσο αυτή η ενότητα εµφανίζεται κατά την εκτύπωση της
φόρµας.

3. «Μόνο στην οθόνη» (Screen Only ή 2): χρησιµοποιώντας αυτή την τιµή,
η θεωρούµενη ενότητα εµφανίζεται για όλο το χρονικό διάστηµα χρήσης
της φόρµας, αλλά δεν εκτυπώνεται µαζί µε τις άλλες ενότητες της φόρµας.

• Ανάπτυξη (CanGrow Property) και συρρίκνωση (CanShrink Property): οι


ιδιότητες αυτές επιτρέπουν τον καθορισµό του τρόπου εµφάνισης των διαφό-
ρων ενοτήτων µιας φόρµας ή µιας αναφοράς καθώς επίσης και των διάφορων
στοιχείων ελέγχου που τοποθετούνται πάνω στην επιφάνεια µιας φόρµας. Πιο
συγκεκριµένα, εάν αυτές οι ιδιότητες λάβουν την τιµή «Ναι (Yes)», τότε η ενό-
τητα ή το πλαίσιο ελέγχου αναπροσαρµόζουν το µέγεθός τους έτσι ώστε να
είναι δυνατή η εκτύπωση ή η προεπισκόπηση όλων των δεδοµένων που πε-
ριέχονται σε αυτά. Αντίθετα, στην περίπτωση που αποδώσουµε σε αυτές τις ιδιό-
τητες την τιµή «Όχι (No)», δεν λαµβάνει χώρα αυτή η τροποποίηση του µεγέ-
θους της ενότητας ή του στοιχείου ελέγχου, µε αποτέλεσµα τα δεδοµένα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 199

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

• Ύψος (Height property) και Πλάτος (Width property): χρησιµοποιώντας αυτές


τις δύο ιδιότητες µπορούµε να ορίσουµε επ ακριβώς τις διαστάσεις κάποιου
αντικειµένου. Πιο συγκεκριµένα, ο καθορισµός του ύψους είναι δυνατός µόνο
για τις ενότητες των φορµών και των αναφορών, ενώ από την άλλη πλευρά, ο κα-
θορισµός του πλάτους, µπορεί να πραγµατοποιηθεί µόνο για ολόκληρη τη φόρµα
ή την αναφορά, και όχι για τις επιµέρους ενότητες που περιλαµβάνονται σε αυτές.

• Χρώµα φόντου (BackColor property): χρησιµοποιώντας αυτή την παράµετρο


µπορούµε να καθορίσουµε το χρώµα του φόντου για µια ενότητα φόρµας ή
αναφοράς, ή για κάποιο στοιχείο ελέγχου που βρίσκεται σε κάποιο σηµείο της
επιφάνειας της τρέχουσας φόρµας. Αυτή η παράµετρος δέχεται ως όρισµα µια
αριθµητική έκφραση που καθορίζει µε µοναδικό τρόπο το χρώµα που θέλουµε
να χρησιµοποιήσουµε, αν και στις πιο πολλές περιπτώσεις ο καθορισµός αυτού
του χρώµατος γίνεται πολύ πιο εύκολα χρησιµοποιώντας το γνωστό παράθυρο
των Microsoft Windows που χρησιµοποιείται γενικά για τον καθορισµό του
χρώµατος των διαφόρων αντικειµένων, και παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 101 : Το πλαίσιο διαλόγου που επιτρέπει τον καθορισµό του χρώµατος ενός αντικειµένου στα
Microsoft Windows

Η τιµή του χρώµατος φόντου για την ενότητα της φόρµας ή της αναφοράς ή για
το τρέχον στοιχείο ελέγχου µπορεί να καθοριστεί και µε πολλούς άλλους τρό-
πους, όπως είναι για παράδειγµα µια µακροεντολή ή ένα υποπρόγραµµα γραµ-
µένο σε γλώσσα Visual Basic.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 200

• Ειδικό εφε (SpecialEffect property): Χρησιµοποιώντας αυτή την ιδιότητα, µπο-


ρούµε να εµφανίσουµε την κεφαλίδα της τρέχουσας φόρµας – και γενικά κάθε
ενότητα της φόρµας ή στοιχείο ελέγχου – µε βάση κάποιο συγκεκριµένο τρόπο
εµφάνισης ο οποίος θα προσδίδει στην εφαρµογή µας, χαρακτηριστικά ενός επαγ-
γελµατικού προγράµµατος. Οι τιµές που µπορεί να πάρει αυτό το πεδίο είναι οι
ακόλουθες :

1. Επίπεδο (Flat ή 0): Στην περίπτωση αυτή το αντικείµενο παρουσιάζεται


χωρίς κανένα ιδιαίτερο χαρακτηριστικό εµφάνισης και φέρει τα προε-
πιλεγµένα χρώµατα του γραφικού περιβάλλοντος των Windows ή εκείνα
που έχουν καθοριστεί κατά τη σχεδίασή του.

2. Υπερυψωµένο (Raised ή 1) : Στην περίπτωση αυτή το αντικείµενο


εµφανίζεται υπερυψωµένο σε σχέση µε την επιφάνεια της τρέχουσας
φόρµας. Αυτό το εφέ επιτυγχάνεται φωτίζοντας έντονα την πάνω και την
αριστερή πλευρά και δηµιουργώντας σκιά στην κάτω και δεξιά πλευρά.

3. Βυθισµένο (Sunken ή 2): Στην περίπτωση αυτή το αντικείµενο εµφανίζε-


ται βυθισµένο σε σχέση µε την επιφάνεια της τρέχουσας φόρµας. Αυτό το
εφέ επιτυγχάνεται φωτίζοντας έντονα την κάτω και τη δεξιά πλευρά και
δηµιουργώντας σκιά στην πάνω και αριστερή πλευρά.

4. Χαραγµένο (Etched ή 3): Στην περίπτωση αυτή το αντικείµενο


περιβάλλεται από µια γραµµή η οποία εµφανίζεται βυθισµένη σε
σχέση µε την επιφάνεια της τρέχουσας φόρµας.

5. Με σκίαση (Shadowed ή 4) : Στην περίπτωση αυτή το αντικείµενο


εµφανίζεται µε µια σκιά ή οποία εµφανίζεται στην κάτω και στη δεξιά
πλευρά του αντικειµένου.

6. Σµιλευµένο (Chiseled ή 5): Στην περίπτωση αυτή το αντικείµενο


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

• Ετικέτα (Tag property): Χρησιµοποιούµε αυτή την ιδιότητα προκειµένου να


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

• Με το click (Click event): σε όλες τις εφαρµογές των Microsoft Windows το


click event συµβαίνει όταν ο χρήστης πατήσει και στη συνέχεια απελευθερώ-
σει το δεξί πλήκτρο του ποντικιού πάνω σε ένα αντικείµενο. Αυτό το αντικεί-
µενο µπορεί να είναι µία φόρµα, µία ενότητα κάποιας φόρµας, καθώς και πλαίσια
ελέγχου που βρίσκονται στην επιφάνεια της τρέχουσας φόρµας – δεν χρησιµο-
ποιείται όµως σε περιπτώσεις πλαισίων ελέγχου που συσχετίζονται µε κάποια
αναφορά (report). Τέλος σε περιπτώσεις κατά τις οποίες έχουµε µια οµάδα
επιλογών η οποία περιλαµβάνει check boxes ή radio buttons, το click event

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 201

δεν αναφέρεται σε κάποιο από αυτά τα κουµπιά, αλλά στην οµάδα επιλογών,
στο σύνολό της.

Στις πιο πολλές περιπτώσεις, όταν ο χρήστης πατήσει το πλήκτρο του ποντι-
κιού πάνω σε ένα πλαίσιο ελέγχου, λαµβάνει χώρα εκτέλεση κάποιας µακρο-
εντολής ή κάποιου κώδικα γραµµένου σε Visual Basic. Προκειµένου να καθο-
ρίσουµε τι ακριβώς θα συµβεί µε τη χρήση αυτού του πλήκτρου, θα πρέπει σε
αυτό το συµβάν να καθορίσουµε το όνοµα της µακροεντολής ή του προγράµµα-
τος που θέλουµε να εκτελεστεί. Εναλλακτικά µπορούµε να χρησιµοποιήσουµε τη
λειτουργία δόµησης εκφράσεων, και να κατασκευάσουµε απευθείας την έκφραση
που θα συσχετίσουµε µε αυτό το συµβάν.

• Με το διπλό click (DblClick event): το συµβάν αυτό λαµβάνει χώρα όταν ο


χρήστης κάνει double click µε το ποντίκι πάνω σε µία φόρµα ή ένα αντικεί-
µενο. Αυτό το αντικείµενο µπορεί να είναι µια φόρµα, µια ενότητα φόρµας, ή ένα
πλαίσιο ελέγχου. Όπως και στην προηγούµενη περίπτωση, το DblClick event δεν
εφαρµόζεται στην περίπτωση των αναφορών και των πλαισίων ελέγχου που συ-
σχετίζονται µε αυτές. Με εντελώς ανάλογο τρόπο, εάν κάνουµε double click
πάνω σε µια οµάδα επιλογών, το αντίστοιχο συµβάν αφορά την οµάδα επιλο-
γών στο σύνολό της, και όχι τα επιµέρους πλαίσια ελέγχου που περιλαµβάνο-
νται σε αυτή.

Στις πιο πολλές περιπτώσεις κάθε φορά που κάνουµε double click πάνω σε κάποιο
αντικείµενο, εκτελείται κάποιος κώδικας ή τρέχει κάποια µακροεντολή το
όνοµα της οποίας θα πρέπει να καθορίσουµε ως παράµετρο αυτού του συµβάντος.

• Πατώντας το ποντίκι (MouseUp event) και Αφήνοντας το ποντίκι (Mouse-


Down event): τα δύο αυτά συµβάντα λαµβάνουν χώρα κάθε φορά που ο χρή-
στης πιέζει και στη συνέχεια απελευθερώνει κάποιο πλήκτρο του ποντικιού,
αντίστοιχα.

Όπως και στις προηγούµενες περιπτώσεις, έτσι και τώρα, αυτά τα δύο συµβάντα
εφαρµόζονται µόνο σε φόρµες, ενότητες φορµών και πλαίσια ελέγχου που βρί-
σκονται πάνω στην επιφάνεια µιας φόρµας, όχι όµως και σε αναφορές καθώς
και σε πλαίσια ελέγχου που συσχετίζονται µε αυτές. Προκειµένου δε να καθορί-
σουµε τι πρόκειται να συµβεί κάθε φορά που θα πραγµατοποιηθούνε αυτά τα
συµβάντα, θα πρέπει να περάσουµε ως παράµετρο σε αυτά, το όνοµα της µακροε-
ντολής ή του προγράµµατος που θα εκτελεστεί κατά την εµφάνισή τους.

• Μετακινώντας το ποντίκι (MouseMove event): το συµβάν MouseMove


καταγράφεται όταν ο χρήστης µετακινήσει το ποντίκι πάνω από την επιφάνεια
κάποιας φόρµας, ενότητας φόρµας, ή πλαισίου ελέγχου που βρίσκεται στην
επιφάνεια της τρέχουσας φόρµας – δεν εφαρµόζεται όµως σε περιπτώσεις ανα-
φορών και πλαισίων ελέγχου που συσχετίζονται µε αυτές. Τα χαρακτηριστικά και
ο τρόπος χρήσης του είναι ακριβώς τα ίδια µε εκείνα που περιγράψαµε για όλα τα
προηγούµενα συµβάντα που συσχετίζονται µε τη χρήση του ποντικιού.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 202

Β) ΚΑΘΟΡΙΣΜΟΣ ΤΩΝ Ι∆ΙΟΤΗΤΩΝ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΟ


ΑΝΤΙΚΕΙΜΕΝΟ ΤΗΣ ΦΟΡΜΑΣ ΣΤΟ ΣΥΝΟΛΟ ΤΗΣ

Εκτός από τις επιµέρους περιοχές της φόρµας, ιδιότητες µπορούµε να καθορί-
σουµε και για τη φόρµα, στο σύνολό της. Αυτές οι ιδιότητες πλέον δεν αφορούν µόνο
τα χαρακτηριστικά εµφάνισης της φόρµας, καθώς και τον τρόπο συµπεριφοράς του
προγράµµατος για διάφορα συµβάντα, όπως αυτά του ποντικιού που περιγράψαµε
στις προηγούµενες σελίδες, αλλά περιλαµβάνουν πιο γενικά χαρακτηριστικά, όπως
είναι η συµπεριφορά της φόρµας κατά τη διαδικασία αλληλεπίδρασης του χρή-
στη µε τα δεδοµένα της βάσης, ο τρόπος εµφάνισης των δεδοµένων στην επιφά-
νεια της τρέχουσας φόρµας, καθώς και πολλά άλλα. Για να εµφανίσουµε το φύλλο
ιδιοτήτων που αφορούν τη φόρµα στο σύνολό της, θα πρέπει να µεταφερθούµε στο
κεντρικό µενού επιλογών της Access, και από εκεί να επιλέξουµε «Προβολή» και
στη συνέχεια «Ιδιότητες». Εναλλακτικά µπορούµε να µεταφερθούµε στο κενό τµήµα
της φόρµας που βρίσκεται κάτω από το υποσέλιδό της, και να εµφανίσουµε το φύλλο
ιδιοτήτων της φόρµας, χρησιµοποιώντας το δεξί πλήκτρο του ποντικιού. Στις επό-
µενες ενότητες, λαµβάνει χώρα αναλυτική περιγραφή των ιδιοτήτων που µπορούµε
να καθορίσουµε για µια φόρµας της Microsoft Access.

1) Ι∆ΙΟΤΗΤΕΣ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ


ΕΜΦΑΝΙΣΗΣ ΤΗΣ ΦΟΡΜΑΣ

Οι ιδιότητες αυτές καθορίζουν τον τρόπο µε τον οποίο η φόρµα θα απεικο-


νιστεί στην οθόνη του χρήστη, και περιλαµβάνονται στην ακόλουθη σελίδα ιδιοτή-
των.

Σχήµα 102 : Τα χαρακτηριστικά εµφάνισης της τρέχουσας φόρµας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 203

Σε µια πιο λεπτοµερή περιγραφή, οι ιδιότητες αυτές είναι οι ακόλουθες:

• Λεζάντα (Caption property): επιτρέπει τον καθορισµό της επικεφαλίδας της


τρέχουσας φόρµας, έτσι όπως αυτή εµφανίζεται στην οθόνη του χρήστη. Για πα-
ράδειγµα, η φόρµα που συσχετίζεται µε τον πίνακα EMPLOYEE και εµφανίζει
στην οθόνη µας τα στοιχεία κάποιου υπαλλήλου της εταιρείας, θα µπορούσε να
έχει τον τίτλο «Ατοµικός Φάκελος Υπαλλήλου». Στην περίπτωση κατά την
οποία αυτή η ιδιότητα εφαρµοσθεί πάνω σε ένα πλαίσιο ελέγχου όλως είναι για
παράδειγµα ένα edit box, επιτρέπει τον καθορισµού του τίτλου αυτού του αντι-
κειµένου. Το µέγιστο µήκος της συµβολοσειράς που µπορούµε να θέσουµε ως
τιµή σε αυτό το πεδίο, είναι οι 2048 χαρακτήρες.

• Προεπιλεγµένη προβολή (DefaultView property): χρησιµοποιούµε αυτή την


ιδιότητα για να καθορίσουµε τον προεπιλεγµένο τρόπο εµφάνισης των δεδο-
µένων της τρέχουσας φόρµας. Αυτή η ιδιότητα µπορεί να λάβει µια από τις ακό-
λουθες τιµές :

1. Μονή φόρµα (Single Form ή 0): είναι ο προεπιλεγµένος τρόπος εµφάνισης


δεδοµένων, και προκαλεί την εµφάνιση µιας εγγραφής κάθε φορά.

2. Συνεχόµενες φόρµες (Continuous Forms ή 1): εάν χρησιµοποιήσουµε αυτόν


τον τρόπο εµφάνισης, η φόρµα θα εµφανίσει πολλές εγγραφές (τουλάχιστον
όσες χωράνε στο παράθυρο της φόρµας) για κάθε µια από τις οποίες θα εµφα-
νίσει και µία ξεχωριστή ενότητα «Λεπτοµέρειες».

3. Φύλλο δεδοµένων (Datasheet ή 2): εάν χρησιµοποιήσουµε αυτόν τον τρόπο


εµφάνισης, τα δεδοµένα της φόρµας θα εµφανιστούν διατεταγµένα σε
γραµµές και στήλες, σε µορφή φύλλου δεδοµένων.

• Επιτρέπονται οι προβολές (ViewsAllowed property): η ιδιότητα αυτή επιτρέπει


να καθορίσουµε εάν ο χρήστης θα µπορεί να εναλλάσσεται ανάµεσα στη
µορφή φύλλου δεδοµένων (datasheet view) και στη µορφή φόρµας (form
view), όσον αφορά τον τρόπο εµφάνισης των δεδοµένων της τρέχουσας φόρµας.
Η παράµετρος αυτή µπορεί να λάβει τις ακόλουθες τιµές:

1. Και τα δύο (Both ή 0): αποτελεί την προεπιλεγµένη τιµή και επιτρέπει
την εναλλαγή του χρήστη ανάµεσα στη µορφή φόρµας και στη µορφή
φύλλου δεδοµένων.

2. Φόρµα (Form ή 1): η τιµή αυτή απαγορεύει στο χρήση να µεταβεί σε


µορφή φύλλου δεδοµένων όταν βρίσκεται σε µορφή φόρµας

3. Φύλλο δεδοµένων (Datasheet ή 2): η επιλογή αυτή απαγορεύει στο χρή-


στη να µεταβεί σε µορφή φόρµας όταν βρίσκεται σε µορφή φύλλου δεδο-
µένων.

Γραµµές κύλισης (ScrollBars property): χρησιµοποιούµε αυτή την ιδιότητα για να


καθορίσουµε εάν θα λάβει χώρα εµφάνιση γραµµών κύλισης (scrollbars) στην

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 204

τρέχουσα φόρµα. Οι τιµές που µπορεί να λάβει αυτή η παράµετρος, είναι οι ακόλου-
θες:

1. Κανένα (Neither ή 0): η τιµή αυτή προκαλεί την απόκρυψη τόσο της οριζό-
ντιας όσο και της κατακόρυφης γραµµής κύλισης από την επιφάνεια της τρέ-
χουσας φόρµας.

2. Μόνο οριζόντια (Horizontal Only ή 1): η τιµή αυτή προκαλεί την εµφάνιση
µόνο της οριζόντιας γραµµής κύλισης στην επιφάνεια της τρέχουσας φόρµας.

3. Μόνο κατακόρυφα (Vertical Only ή 2): η τιµή αυτή προκαλεί την εµφάνιση
µόνο της κατακόρυφης γραµµής κύλισης στην επιφάνεια της τρέχουσας φόρ-
µας

4. Και τα δύο (Both ή 3): η τιµή αυτή προκαλεί την εµφάνιση τόσο της οριζό-
ντιας όσο και της κατακόρυφης γραµµής κύλισης στην επιφάνεια της τρέχου-
σας φόρµας.

• ∆είκτες επιλογής εγγραφών (RecordSelectors property): η ιδιότητα αυτή παίρ-


νει µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν σε κάθε
εγγραφή κάποιου πίνακα θα εµφανίζεται το σύµβολο του εργαλείου επιλογής
εγγραφής «►». Η τιµή αυτή µπορεί να τεθεί είτε από το φύλλο ιδιοτήτων της
φόρµας είτε µέσα από κάποια µακροεντολή ή πρόγραµµα της Visual Basic.

• Κουµπιά µετακίνησης (NavigationButtons property): χρησιµοποιώντας την


ιδιότητα αυτή µπορούµε να καθορίσουµε εάν στο κάτω µέρος της τρέχουσας
φόρµας θα εµφανίζονται τα κουµπιά µετακίνησης (navigation buttons) ανά-
µεσα στις εγγραφές της φόρµας καθώς και το πλαίσιο ελέγχου που εµφανίζει
τον αριθµό της τρέχουσας εγγραφής. Αυτή η παράµετρος παίρνει µόνο τις τιµές
Ναι (Yes ή (-1)) και Όχι (No ή 0) και µπορεί να τεθεί είτε µέσα από το φύλλο
ιδιοτήτων της φόρµας είτε µέσα από κάποια µακροεντολή ή πρόγραµµα της Vis-
ual Basic.

• ∆ιαχωριστικές γραµµές (DividingLines property): χρησιµοποιώντας αυτή την


ιδιότητα µπορούµε να καθορίσουµε εάν οι διάφορες ενότητες της φόρµας ή οι
διαδοχικές εγγραφές σε µια συνεχόµενη φόρµα, θα διαχωρίζονται ή όχι από
συνεχείς οριζόντιες γραµµές έτσι ώστε να είναι πιο διακριτές µεταξύ τους.
Αυτή η παράµετρος παίρνει µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και
µπορεί να τεθεί είτε µέσα από το φύλλο ιδιοτήτων της φόρµας είτε µέσα από κά-
ποια µακροεντολή ή πρόγραµµα της Visual Basic.

• Αυτόµατη αλλαγή µεγέθους (AutoResize property): η ιδιότητα αυτή παίρνει τις


τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα θα ανα-
προσαρµόζει αυτόµατα το µέγεθός της κάθε φορά που την ανοίγουµε, έτσι
ώστε να εµφανίζει το σύνολο των πληροφοριών που περιλαµβάνονται σε µια εγ-
γραφή. Αυτή η ιδιότητα είναι ιδιαίτερα χρήσιµη σε περιπτώσεις κατά τις οποίες η
φόρµα έχει σχετικά µικρό µέγεθος µε αποτέλεσµα να µη χωράνε στην επιφάνειά
της τα δεδοµένα των εγγραφών του πίνακα µε τον οποίο συσχετίζεται.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 205

• Αυτόµατη στοίχιση στο κέντρο (AutoCenter property): αυτή η ιδιότητα παίρ-


νει τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα θα
κεντράρεται αυτόµατα ως προς το κύριο παράθυρο της εφαρµογής, κάθε
φορά που την ανοίγουµε.

• Στυλ περιγράµµατος (BorderStyle property): η ιδιότητα αυτή επιτρέπει να


καθορίσουµε το στυλ του περιγράµµατος της τρέχουσας φόρµας καθώς και το
πλήθος και είδος των στοιχείων εκείνων που περιλαµβάνονται στη γραµµή
του τίτλου της φόρµας (όπως είναι κουµπιά µεγιστοποίησης και ελαχιστοποί-
ησης, κουµπί τερµατισµού της λειτουργίας της φόρµας, κ.λ.π.). Αυτή η παρά-
µετρος µπορεί να λάβει µια από τις ακόλουθες τιµές:

1. Κανένα (None ή 0): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου το οποίο δεν φέρει περίγραµµα και στοιχεία τίτλου επικεφαλί-
δας, και το µέγεθος του οποίου δεν µπορεί να µεταβληθεί.

2. Λεπτό (Thin ή 1): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου το οποίο χαρακτηρίζεται από λεπτό περίγραµµα, περιλαµβάνει
στοιχεία τίτλου επικεφαλίδας και δεν επιτρέπει την αλλαγή του µεγέθους
του.

3. Μεγάλο (Sizable ή 2): η τιµή αυτή (που είναι και η προεπιλεγµένη)


προκαλεί την εµφάνιση ενός πλαισίου διαλόγου, το οποίο χαρακτηρίζεται
από το συνηθισµένο περίγραµµα των παραθύρων των Microsoft Windows,
περιλαµβάνει στοιχεία τίτλου επικεφαλίδας, και επιτρέπει την αλλαγή του
µεγέθους του από το χρήστη.

4. ∆ιάλογος (Dialog ή 3): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου, που διαθέτει µόνο τη γραµµή τίτλου, το µενού ελέγχου (control
menu) που βρίσκεται στην πάνω και αριστερή γωνία της φόρµας, και το
κουµπί τερµατισµού της λειτουργίας της φόρµας (close button). Επιπλέον,
η φόρµα δεν επιτρέπει την ελαχιστοποίηση και µεγιστοποίησή της καθώς
επίσης και την αλλαγή του µεγέθους της.

• Πλαίσιο ελέγχου (ControlBox property): η παράµετρος αυτή παίρνει µόνο τις


τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα θα διαθέ-
τει ή όχι το µενού ελέγχου που βρίσκεται στην πάνω και αριστερή γωνία και
στην γραµµή του τίτλου της φόρµας. Ας σηµειωθεί πως η απόδοση τιµής 0 σε
αυτή την παράµετρο, αποµακρύνει εκτός από το πλαίσιο ελέγχου, τα κουµπιά
ελαχιστοποίησης (minimize button), µεγιστοποίησης (maximize button) και τερ-
µατισµού της λειτουργίας της φόρµας (close button).

• Κουµπιά ελαχιστοποίησης µεγιστοποίησης (MinMaxButtons property):


χρησιµοποιούµε αυτή την ιδιότητα για να καθορίσουµε εάν η φόρµα θα εµφανί-
ζει τα κουµπιά ελαχιστοποίησης και µεγιστοποίησης στην πάνω δεξιά γωνία
και στη γραµµή τίτλου της. Η παράµετρος αυτή παίρνει τις επόµενες τιµές:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 206

1. Κανένα (None ή 0): αυτή η τιµή προκαλεί την απόκρυψη και των δύο
κουµπιών της φόρµας

2. Κουµπί ελαχιστοποίησης ενεργοποιηµένο (Min Enabled ή 1): αυτή η


τιµή εµφανίζει µόνο το κουµπί ελαχιστοποίησης της φόρµας

3. Κουµπί µεγιστοποίησης ενεργοποιηµένο (Max Enabled ή 2): αυτή η


τιµή εµφανίζει µόνο το κουµπί µεγιστοποίησης της φόρµας

4. Και τα δύο ενεργοποιηµένα (Both Enabled ή 3): αυτή η τιµή (που είναι
και η προεπιλεγµένη) προκαλεί την εµφάνιση τόσο του κουµπιού ελαχι-
στοποίησης όσο και του κουµπιού µεγιστοποίησης της φόρµας.

• Κουµπί κλεισίµατος (CloseButton property): η παράµετρος αυτή παίρνει µόνο


τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα θα
διαθέτει ή όχι το κουµπί τερµατισµού της λειτουργίας της (close button).

• Κουµπί «Τι είναι» (WhatThisButton property): η παράµετρος αυτή παίρνει


µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα
θα διαθέτει ή όχι το κουµπί «Τι είναι» που εµφανίζεται δίπλα στο Close But-
ton και φέρει ένα αγγλικό ερωτηµατικό. Για να εµφανίσουµε αυτό το κουµπί
στη γραµµή τίτλου µιας φόρµας, θα πρέπει να αποκρύψουµε τόσο το κουµπί µε-
γιστοποίησης, όσο και το κουµπί ελαχιστοποίησης από αυτή.

Το κουµπί «Τι είναι» έχει εµφανιστεί στις τελευταίες εκδόσεις των Microsoft
Windows, και επιτρέπει την εµφάνιση βοηθείας για τα διάφορα πλαίσια ελέγ-
χου που βρίσκονται στην επιφάνεια µιας φόρµας. Όταν ο χρήστης πατήσει αυτό
το κουµπί, ο δείκτης του ποντικιού µεταµορφώνεται σε ένα αγγλικό ερωτηµα-
τικό. Στη συνέχεια, εάν ο χρήστης επιλέξει κάποιο πλαίσιο της φόρµας εµφανίζε-
ται η οθόνη βοηθείας που εξηγεί τον τρόπο χρήσης αυτού του πλαισίου. Εάν αυτή
η βοήθεια δεν είναι διαθέσιµη, θα εµφανιστεί η οθόνη βοηθείας που συσχετίζεται
µε τη φόρµα στην οποία περιλαµβάνεται το πλαίσιο. Στην περίπτωση που ούτε
αυτή η βοήθεια είναι διαθέσιµη, το πρόγραµµα θα εµφανίσει τις σελίδες βοηθείας
της Microsoft Access.

• Πλάτος (Width property): η παράµετρος αυτή επιτρέπει τον καθορισµό του


πλάτους της τρέχουσας φόρµας και δέχεται ως όρισµα κάποια τιµή εκπεφρα-
σµένη σε εκείνη τη µονάδα µέτρησης που έχει καθορισθεί στις Τοπικές Ρυθµί-
σεις (Regional Settings) του πίνακα ελέγχου. Εάν θέλουµε να χρησιµοποιή-
σουµε κάποια άλλη µονάδα µέτρησης (π.χ. ίντσες), θα πρέπει να την καταχωρή-
σουµε µαζί µε την αριθµητική τιµή του πλάτους (π.χ. 5 in). Ας σηµειωθεί πως η
µέγιστη τιµή που µπορεί να λάβει αυτή η παράµετρος είναι τα 55.87 εκατοστά, ή
ισοδύναµα οι 22 ίντσες.

• Εικόνα (Picture property): χρησιµοποιώντας αυτή την ιδιότητα, µπορούµε να


καθορίσουµε ένα αρχείο εικόνας προκειµένου να χρησιµοποιηθεί µαζί µε κάποιο
κουµπί, στοιχείο εικόνας, κουµπί εναλλαγής, ή ακόµα και µαζί µε την ίδια τη
φόρµα σαν εικόνα φόντου (background image). Αυτό το αρχείο εικόνας, µπορεί

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 207

να καθορισθεί µε πάρα πολλούς τρόπους, όπως το φύλλο ιδιοτήτων της φόρµας,


µια µακροεντολή, ένα πρόγραµµα σε Visual Basic, ή από το κεντρικό µενού επι-
λογών της Access.

• Τύπος εικόνας (PictureType property): Στην περίπτωση κατά την οποία


χρησιµοποιήσουµε την προηγούµενη ιδιότητα για να συσχετίσουµε κάποιο αρχείο
εικόνας µε την τρέχουσα φόρµα, µπορούµε να χρησιµοποιήσουµε αυτή την ιδιό-
τητα για να καθορίσουµε τον τρόπο µε τον οποίο η Microsoft Access, θα δια-
πραγµατευτεί αυτή την εικόνα. Οι δυνατές τιµές που µπορούµε να χρησιµο-
ποιήσουµε µε αυτή την ιδιότητα, είναι οι ακόλουθες:

1. Ενσωµατωµένο (Embedded ή 0): πρόκειται για την προεπιλεγµένη τιµή


αυτής της ιδιότητας η οποία προκαλεί την ενσωµάτωση του αρχείου της
εικόνας στη βάση δεδοµένων της εφαρµογής. Λόγω αυτής της ενσωµά-
τωσης, το µέγεθος του αρχείου της βάσης δεδοµένων, αυξάνεται κατά το
µέγεθος του αρχείου της εικόνας που πρόκειται να χρησιµοποιήσουµε.

2. Συνδεδεµένο (Linked ή 1): η τιµή αυτή προκαλεί τη σύνδεση του αρ-


χείου της εικόνας στη βάση δεδοµένων. Αυτό σηµαίνει πως το αρχείο
της εικόνας δεν ενσωµατώνεται στη βάση δεδοµένων όπως στην προη-
γούµενη περίπτωση, αλλά αντίθετα η Microsoft Access αποθηκεύει ένα
pointer προς το αρχείο που περιέχει την εικόνα που θέλουµε να χρησιµο-
ποιήσουµε. Στην περίπτωση αυτή ωστόσο είναι προφανές πως αν µετακι-
νήσουµε ή µετονοµάσουµε το αρχείο της εικόνας, θα πρέπει να ενηµερώ-
σουµε την τιµή αυτής της ιδιότητας, προκειµένου να ενηµερωθεί για αυτή
τη µεταβολή.

• Τρόπος αλλαγής µεγέθους εικόνας (PictureSizeMode property): σε περιπτώ-


σεις κατά τις οποίες χρησιµοποιούµε κάποια εικόνα µαζί µε την φόρµα ή κάποιο
στοιχείο ελέγχου που συµπεριλαµβάνεται σε αυτή, µπορούµε να καθορίσουµε τον
τρόπο µε τον οποίο θα εµφανιστεί η εικόνα στην οθόνη του χρήστη, όσον αφορά
το µέγεθός της. Αυτή η παράµετρος, µπορεί να λάβει µια από τις τρεις ακόλουθες
τιµές:

1. Απόσπασµα (Clip ή 0): η τιµή αυτή που είναι και η προεπιλεγµένη,


προκαλεί την εµφάνιση µόνο εκείνου του τµήµατος της εικόνας το
οποίο χωράει στην επιφάνεια της φόρµας ή του στοιχείο ελέγχου. Αυτό
σηµαίνει πως το υπόλοιπο τµήµα της εικόνας δεν διατηρείται.

2. Αυξοµείωση (Stretch ή 1): η τιµή αυτή προκαλεί την αύξηση του µεγέ-
θους της εικόνας κατά την οριζόντια και κατακόρυφη κατεύθυνση
έτσι ώστε να καλύψει την επιφάνεια της φόρµας ή του στοιχείου ελέγ-
χου, ακόµη και εάν αυτή η διαδικασία µεταβάλλει την αναλογία του
πλάτους και του ύψους της εικόνας.
3. Ζουµ (Zoom ή 3): η τιµή αυτή προκαλεί τη µεγέθυνση της εικόνας έτσι
ώστε να καλύψει την επιφάνεια της φόρµας ή του στοιχείου ελέγχου,
αλλά µε τέτοιο τρόπο, ώστε να διατηρείται η αναλογία που υφίσταται
ανάµεσα στο πλάτος και στο ύψος της εικόνας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 208

• Στοίχιση εικόνας (PictureAlignment property): η ιδιότητα αυτή επιτρέπει τον


καθορισµό της θέσης στην οποία θα εµφανιστεί η εικόνα πάνω στην επιφά-
νεια της τρέχουσας φόρµας, και µπορεί να λάβει τις επόµενες τιµές:

1. Άνω αριστερά (Top Left ή 0): η εικόνα εµφανίζεται στην πάνω αριστερή
γωνία του στοιχείου εικόνας (image control), του παραθύρου της φόρµας,
ή της σελίδας της αναφοράς.

2. Άνω δεξιά (Top Right ή 1): η εικόνα εµφανίζεται στην πάνω δεξιά γωνία
του στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σελίδας της
αναφοράς.

3. Κέντρο (Center ή 2): η τιµή αυτή (που είναι και η προεπιλεγµένη) προκα-
λεί την εµφάνιση της εικόνας στο κέντρο του στοιχείου εικόνας, του πα-
ραθύρου της φόρµας, ή της σελίδας της αναφοράς.

4. Κάτω αριστερά (Bottom Left ή 3): η εικόνα εµφανίζεται στην κάτω αρι-
στερή γωνία του στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σε-
λίδας της αναφοράς.

5. Κάτω δεξιά (Bottom Right ή 4): η εικόνα εµφανίζεται στην κάτω δεξιά
γωνία στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σελίδας της
αναφοράς.

6. Στο κέντρο της φόρµας (Form Center ή 5): η τιµή αυτή χρησιµοποιείται
µόνο για τις φόρµες και προκαλεί την εµφάνιση της εικόνας στο κέντρο
της φόρµας. Η φόρµα κεντράρεται τόσο ως προς την οριζόντια διεύθυνση
(όσον αφορά το πλάτος της φόρµας) όσο και ως προς την κατακόρυφη δι-
εύθυνση (όσον αφορά το συνολικό ύψος της φόρµας).

• Παράθεση εικόνων (PictureTiling property): η παράµετρος αυτή παίρνει µόνο


τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η εικόνα φόντου
(background image) θα επαναλαµβάνεται (tiled) στην επιφάνεια του στοι-
χείου εικόνας (image control), του παραθύρου της φόρµας, ή της σελίδας της
αναφοράς.

• Πλέγµα Χ (GridX property) και Πλέγµα Υ (GridY property): κατά το στάδιο


σχεδίασης της φόρµας, η Access προσφέρει τη δυνατότητα να χρησιµοποιήσουµε
ένα πλέγµα στοίχισης (alignment grid) προκειµένου να στοιχίσουµε πιο εύκολα
τα διάφορα στοιχεία ελέγχου πάνω στην επιφάνεια της τρέχουσας φόρµας. Οι πα-
ράµετροι GridX και GridY δέχονται ως τιµές ακέραιους αριθµούς στο διάστηµα
[1, 24], οι οποίοι εκφράζουν τον αριθµό των υποδιαιρέσεων ανά µονάδα µέ-
τρησης για το πλέγµα στοίχισης.

• ∆ιάταξη εκτύπωσης (LayoutForPrint property): η παράµετρος αυτή παίρνει


µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει το εάν η φόρµα
χρησιµοποιεί γραµµατοσειρές της οθόνης (screen fonts) ή γραµµατοσειρές
του εκτυπωτή (printer fonts).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 209

Σε αντίθεση µε τις γραµµατοσειρές οθόνης οι οποίες εγκαθίστανται στο σύστηµά


µας και χρησιµοποιούνται για την εµφάνιση της πληροφορίας στην οθόνη του
χρήστη, οι γραµµατοσειρές του εκτυπωτή εγκαθίστανται µαζί µε το λογισµικό
που συνοδεύει τον εκτυπωτή, εξαρτώνται άµεσα από τον τύπο του εκτυπωτή που
διαθέτουµε, και χρησιµοποιούνται µόνο κατά το στάδιο της εκτύπωσης της φόρ-
µας ή της αναφοράς. Σε περιπτώσεις δε κατά τις οποίες ο εκτυπωτής στον οποίο
επιθυµούµε να εκτυπώσουµε είναι διαφορετικός από εκείνον για τον οποίο έχει
σχεδιαστεί η φόρµα ή η αναφορά, η Access θα εµφανίσει στο χρήστη ένα ενηµε-
ρωτικό µήνυµα, προκειµένου να τον πληροφορήσει για αυτή την ασυµβατότητα.
Εάν παρά το γεγονός αυτό, ο χρήστης επιθυµεί να εκτυπώσει τη φόρµα ή την
αναφορά, τότε υπάρχει πιθανότητα αντικατάστασης κάποιων γραµµατοσειρών
που ενδεχοµένως δεν βρίσκονται εγκατεστηµένες στο σύστηµα που εκτυπώνουµε,
από άλλες οι οποίες συσχετίζονται µε τον εκτυπωτή που χρησιµοποιούµε.

• Ύψος δευτερεύοντος φύλλου δεδοµένων (SubdatasheetHeight property): η


ιδιότητα αυτή χρησιµοποιείται προκειµένου να καθορίσει το ύψος ενός δευτε-
ρεύοντος φύλλου δεδοµένων, σε περιπτώσεις που αυτό χρησιµοποιείται. Αυτή η
ιδιότητα δέχεται ως όρισµα µια αριθµητική τιµή εκπεφρασµένη σε εκατοστά.
Η προεπιλεγµένη τιµή για την περίπτωση µιας φόρµας είναι η τιµή µηδέν.

Ένα δευτερεύον φύλλο δεδοµένων δεν είναι τίποτε άλλο από ένα φύλλο δεδοµέ-
νων που βρίσκεται µέσα σε ένα άλλο φύλλο δεδοµένων και περιέχει δεδοµένα
σχετικά ή ενωµένα µε το πρώτο φύλλο δεδοµένων. Στην περίπτωση µιας φόρµας
η χρήση ενός δευτερεύοντος φύλλου δεδοµένων πραγµατοποιείται δηµιουργώντας
µια υποφόρµα σε προβολή φύλλου δεδοµένων.

• Ανεπτυγµένο δευτερεύον φύλλο δεδοµένων (SubdatasheetExpanded prop-


erty): η παράµετρος αυτή παίρνει µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή
0) και καθορίζει το εάν το δευτερεύον φύλλο δεδοµένων που ενδεχοµένως εµφα-
νίζεται σε µια φόρµα, θα είναι κλειστό ή ανεπτυγµένο.

• Προέλευση παλέτας (PaletteSource Property): η παράµετρος αυτή επιτρέπει


τον καθορισµό της παλέτας χρωµάτων που χρησιµοποιείται για την τρέχουσα
φόρµα ή αναφορά, και δέχεται ως όρισµα τη διαδροµή και το όνοµα ενός αρ-
χείου παλέτας. Αυτό το αρχείο µπορεί να ανήκει σε κάποιον από τους επόµενους
τύπους αρχείων: (α) DIB (Device Independent Bitmap File) (β) PAL (Windows
Palette File), (γ) ICO (Windows Icon File), (δ) BMP (Windows Bitmap File),
(ε) WMF (Windows MetaFile).
Η προεπιλεγµένη τιµή για αυτή την ιδιότητα είναι η συµβολοσειρά Default που
υποδηλώνει πως η φόρµα θα σχεδιαστεί µε βάση το αρχείο παλέτας που συµπερι-
λαµβάνεται στη Microsoft Access.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 210

2) Ι∆ΙΟΤΗΤΕΣ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΑ ∆Ε∆ΟΜΕΝΑ ΤΗΣ ΦΟΡΜΑΣ

Αυτή η οµάδα ιδιοτήτων συσχετίζεται µε τα δεδοµένα που εµφανίζονται


µέσα από την τρέχουσα φόρµα καθώς και µε τις δυνατότητες του χρήστη να προ-
χωρήσει στην επεξεργασία αυτών των δεδοµένων χρησιµοποιώντας τα στοιχεία
ελέγχου της φόρµας. Αυτή η οµάδα ιδιοτήτων καθορίζεται µέσα από το ακόλουθο
πλαίσιο διαλόγου:

Σχήµα 103 : Ιδιότητες που συσχετίζονται µε τα δεδοµένα της φόρµας

Σε µια πιο αναλυτική περιγραφή, οι ιδιότητες που συσχετίζονται µε τα δεδο-


µένα της φόρµας, είναι οι ακόλουθες :

• Προέλευση εγγραφών (RecordSource property): χρησιµοποιούµε την ιδιότητα


αυτή για να καθορίσουµε την προέλευση των δεδοµένων της τρέχουσας φόρ-
µας ή αναφοράς. Ως πηγή προέλευσης των δεδοµένων της φόρµας, µπορούµε να
ορίσουµε ένα πίνακα, ένα ερώτηµα, ή µια πρόταση SQL. Στο παράδειγµά µας οι
εγγραφές που διαχειρίζεται ο χρήστης µέσω της τρέχουσας φόρµας, προέρχονται
από τον πίνακα EMPLOYEE που διατηρεί τα προσωπικά στοιχεία των υπαλλή-
λων της εταιρείας.

• Φίλτρο (Filter property): σε ορισµένες περιπτώσεις είναι επιθυµητή ή εµφάνιση


όχι όλων των εγγραφών που περιλαµβάνονται σε ένα πίνακα, αλλά µόνο εκείνων,
οι οποίες πληρούν κάποια ιδιότητα. Στην περίπτωση αυτή µπορούµε να ορίσουµε
ένα ή περισσότερα φίλτρα, τα οποία περιέχουν την ιδιότητα εκείνη που θα πρέ-
πει να ικανοποιούν οι εγγραφές προς εµφάνιση.

Η τιµή που καταχωρούµε στην εν λόγω παράµετρο, είναι µία συµβολοσειρά η


οποία περιέχει τη συνθήκη µιας πρότασης WHERE, χωρίς όµως αυτή τη δε-
σµευµένη λέξη. Εάν για παράδειγµα θέλουµε να περιοριστούµε µόνο στις εγγρα-
φές των υπαλλήλων της εταιρείας που έχουν µισθό µεγαλύτερο από 30000, αυτή
η έκφραση θα έχει τη µορφή «Salary>30000». Η τιµή αυτής της ιδιότητας µπορεί
να τεθεί από το φύλλο ιδιοτήτων της φόρµας, ή εναλλακτικά, µέσω της εκτέλεσης
µιας µακροεντολής, ή ενός προγράµµατος, γραµµένο σε γλώσσα Visual Basic.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 211

• Κατάταξη κατά (OrderBy property): σε ορισµένες περιπτώσεις επιθυµούµε να


εµφανίσουµε τις εγγραφές σε ένα πίνακα, σε µία φόρµα, σε ένα ερώτηµα ή σε µία
αναφορά, όχι µε τη σειρά µε την οποία έχουν αποθηκευτεί, αλλά ταξινοµηµέ-
νες µε βάση κάποιο πεδίο. Στην περίπτωση αυτή, ως τιµή σε αυτή την ιδιότητα,
θα πρέπει να καταχωρήσουµε το όνοµα του πεδίου, ως προς το οποίο θα λάβει
χώρα η ταξινόµηση των εγγραφών. Σε περιπτώσεις κατά τις οποίες επιθυµούµε
να ταξινοµήσουµε τις εγγραφές µας ως προς περισσότερα από ένα πεδία, θα πρέ-
πει να καταχωρήσουµε τα ονόµατα όλων αυτών των πεδίων, το ένα πίσω από το
άλλο και χωρισµένα µε κόµµα.

• Χρήση φίλτρων (AllowFilter property): η παράµετρος αυτή παίρνει µόνο τις


τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η εφαρµογή φίλτρων
επί των εγγραφών µιας φόρµας, είναι επιτρεπτή ή όχι. Η προεπιλεγµένη τιµή
αυτής της ιδιότητας, είναι «Ναι», κάτι που σηµαίνει πως στη γενική περίπτωση, ο
χρήστης έχει τη δυνατότητα της εφαρµογής φίλτρων πάνω στις εγγραφές της
τρέχουσας φόρµας.

• ∆υνατότητα επεξεργασίας (AllowEdits property): η παράµετρος αυτή παίρνει


µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν ο χρήστης
έχει τη δυνατότητα αποθήκευσης των εγγραφών του πίνακα µέσα από την
τρέχουσα φόρµα. Η προεπιλεγµένη τιµή αυτής της παραµέτρου είναι «Ναι» που
σηµαίνει πως γενικά ο χρήστης µπορεί να αποθηκεύει τις ενδεχόµενες αλλαγές
που έχει πραγµατοποιήσει όσον αφορά τα περιεχόµενα των εγγραφών που
εµφανίζονται στην τρέχουσα φόρµα.

• ∆υνατότητα διαγραφών (AllowDeletions property) και δυνατότητα προσθή-


κης (AllowAdditions property): αυτές οι δύο ιδιότητες καθορίζουν εάν ο χρή-
στης έχει τη δυνατότητα να διαγράψει υπάρχουσες εγγραφές ή να προσθέσει
καινούριες εγγραφές στον πίνακα µε τον οποίο συσχετίζεται η τρέχουσα
φόρµα. Η προεπιλεγµένη συµπεριφορά του προγράµµατος, επιτρέπει στο χρήστη
να πραγµατοποιήσει αυτές τις διαδικασίες, και εποµένως η προεπιλεγµένη τιµή
για αυτές τις δύο ιδιότητες, είναι η τιµή «Ναι».

• Καταχώρηση δεδοµένων (DataEntry property): η ιδιότητα αυτή καθορίζει εάν


η φόρµα θα ανοίξει για την καταχώρηση κάποιας νέας εγγραφής, ή απλά, για
να εµφανίσει στοιχεία των εγγραφών του πίνακα. Στην πρώτη περίπτωση (που
αντιστοιχεί στην τιµή «Ναι» για αυτή την ιδιότητα), η φόρµα εµφανίζει όλα της
τα πεδία κενά, προκειµένου ο χρήστης να καταχωρήσει νέα δεδοµένα. Στην δεύ-
τερη περίπτωση (που αντιστοιχεί στην τιµή «Όχι» για αυτή την ιδιότητα), η
φόρµα εµφανίζεται µε τα πεδία της να περιέχουν τα δεδοµένα της πρώτης εγ-
γραφής του πίνακα µε τον οποίο συσχετίζεται.
• Τύπος συνόλου εγγραφών (RecordSetType property): χρησιµοποιώντας αυτή
την ιδιότητα, µπορούµε να καθορίσουµε το είδος του συνόλου εγγραφών µε το
οποίο συσχετίζεται η τρέχουσα φόρµα. Αυτή η παράµετρος µπορεί να λάβει µια
από τις ακόλουθες τρεις τιµές:

1. ∆υναµοσύνολο (Dynaset ή 0): η τιµή αυτή (που είναι και η προεπιλεγ-


µένη), µας δίνει το δικαίωµα να τροποποιήσουµε τα περιεχόµενα στοι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 212

χείων ελέγχου, τα οποία συσχετίζονται µε κάποιο πεδίο κάποιου από


τους πίνακες της βάσης ο οποίος συµµετέχει σε κάποια συσχέτιση µε
πολλαπλότητα 1:1. Σε περιπτώσεις κατά τις οποίες το στοιχείο ελέγχου
συσχετίζεται µε κάποιο πεδίο πίνακα που συµµετέχει σε µια συσχέτιση µε
πολλαπλότητα 1:Ν, δεν επιτρέπεται η τροποποίηση της τιµής του πεδίου
που βρίσκεται «στην πλευρά του 1» αυτής της συσχέτισης, εκτός εάν για
την εν λόγω συσχέτιση ανάµεσα στους πίνακες, έχουµε ενεργοποιήσει τη
διαδοχική ενηµέρωση των σχετικών εγγραφών (cascade update).

2. ∆υναµοσύνολο (µη συνεπείς ενηµερώσεις) (Dynaset (Inconsistent Up-


dates) ή 1): η τιµή αυτή επιτρέπει την τροποποίηση των τιµών των πε-
δίων των πινάκων µέσα από την τρέχουσα φόρµα, σε κάθε περίπτωση,
και χωρίς να λαµβάνει υπ όψιν τους κανόνες ακεραιότητας. Η διαδικα-
σία αυτή, προφανώς, εάν δεν πραγµατοποιηθεί µε µεγάλη προσοχή ενδέ-
χεται να οδηγήσει στη δηµιουργία ασυνεπών δεδοµένων στη βάση δεδο-
µένων της εφαρµογής.

3. Στιγµιότυπο (Snapshot ή 2): η τιµή αυτή απαγορεύει την τροποποίηση


των τιµών των πεδίων των πινάκων µέσα από την τρέχουσα φόρµα.

Κλειδώµατα εγγραφών (RecordLocks property): χρησιµοποιώντας την ιδιότητα


αυτή µπορούµε να καθορίσουµε τον τρόπο µε τον οποίο οι διάφορες εγγραφές
κλειδώνονται από την εφαρµογή, έτσι ώστε να µην είναι δυνατή η τροποποίησή
τους από δύο χρήστες ταυτόχρονα. Υπάρχουν τρεις διαφορετικές τιµές, που µπο-
ρούµε να καθορίσουµε για αυτή την ιδιότητα:

1. Χωρίς κλειδώµατα (No Locks ή 0): η τιµή αυτή (που είναι και η προεπιλεγ-
µένη), επιτρέπει την τροποποίηση του περιεχοµένου της εγγραφής, από
δύο χρήστες ταυτόχρονα. Εάν όµως οι χρήστες προσπαθήσουν να αποθη-
κεύσουν τις αλλαγές που έχουν πραγµατοποιήσει πάνω σε κάποια από τις εγ-
γραφές, η Access εµφανίζει ένα µήνυµα στον δεύτερο από αυτούς τους χρή-
στες που τον ενηµερώνει ότι η εγγραφή που προσπαθεί να αποθηκεύσει, χρη-
σιµοποιείται ήδη από κάποιο άλλο. Σε µια τέτοια περίπτωση, ο χρήστης έχει
πολλές δυνατότητες, όπως για παράδειγµα να αναιρέσει τις αλλαγές που έχει
επιφέρει στο περιεχόµενο της εγγραφής, να αντιγράψει την εγγραφή στο
Clipboard για µελλοντική χρήση, ή να αποθηκεύσει την εγγραφή, κατα-
στρέφοντας τις αλλαγές που έκανε ο πρώτος χρήστης.

2. Όλες οι εγγραφές (All records ή 1): η τιµή αυτή προκαλεί το κλείδωµα


όλων των εγγραφών για όσο χρονικό διάστηµα λαµβάνει χώρα χρήση της
τρέχουσας φόρµας. Για όλο αυτό το χρονικό διάστηµα, ο χρήστης δεν έχει τη
δυνατότητα να προσθέσει, να αφαιρέσει ή να τροποποιήσει τις εγγραφές του
πίνακα που συσχετίζεται µε την τρέχουσα φόρµα.

3. Τροποποιηµένη εγγραφή (Edited Record ή 2): η τιµή αυτή προκαλεί το


κλείδωµα όχι όλων των εγγραφών αλλά µόνο µιας οµάδας από αυτές (και
πιο συγκεκριµένα αυτών που βρίσκονται στην ίδια σελίδα εγγραφών, το
µέγεθος της οποίας είναι ίσο µε 4Kbytes). Το κλείδωµα των εγγραφών ξε-
κινά τη στιγµή που ο χρήστης ξεκινά την τροποποίηση του περιεχοµένου κά-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 213

ποιας εγγραφής, και διατηρείται, µέχρι τη στιγµή που ο χρήστης θα µετακινη-


θεί σε κάποια άλλη εγγραφή του πίνακα.

3) Ι∆ΙΟΤΗΤΕΣ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΑ ΣΥΜΒΑΝΤΑ ΤΗΣ ΦΟΡΜΑΣ

Αυτή η οµάδα ιδιοτήτων καθορίζει τη συµπεριφορά της φόρµας, κάθε φορά


που λαµβάνει χώρα πραγµατοποίηση κάποιου συµβάντος. Αυτά τα συµβάντα
(events) ή µηνύµατα (messages) αποστέλλονται από τις εφαρµογές που εκτελούνται
σε κάθε χρονική στιγµή, στο λειτουργικό σύστηµα των Windows, το οποίο και ανα-
λαµβάνει την εξυπηρέτησή τους. Αυτός ο τρόπος λειτουργίας καθιστά τα Windows
ένα καθοδηγούµενο από µηνύµατα (event driven) λειτουργικό σύστηµα.

Για κάθε ένα από τα συµβάντα που συσχετίζονται µε τη λειτουργικότητα της


τρέχουσας φόρµας, µπορούµε να καθορίσουµε µια µακροεντολή ή ένα πρόγραµµα σε
γλώσσα Visual Basic που θα εκτελείται κάθε φορά που πραγµατοποιείται αυτό το
συµβάν. Με τον τρόπο αυτό µπορούµε να καθορίσουµε τον τρόπο συµπεριφοράς της
φόρµας κατά τη διάρκεια της αλληλεπίδρασης του χρήστη µε την εφαρµογή. Στο
επόµενο σχήµα παρουσιάζονται όλα τα συµβάντα που είναι δυνατό να καθοριστούν
για την περίπτωση µιας φόρµας, ενώ αµέσως µετά ακολουθεί η αναλυτική περιγραφή
αυτών των συµβάντων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 214

Σχήµα 104 : Ιδιότητες που συσχετίζονται µε τα συµβάντα της φόρµας

• Με το τρέχον (Current event): Αυτό το συµβάν πραγµατοποιείται όταν η εστί-


αση (focus) του χρήση µεταφέρεται σε κάποια εγγραφή, καθιστώντας τη έτσι
την τρέχουσα εγγραφή, ή όταν ανανεώνονται (refreshed) ή επανακτόνται (reque-
ried) τα περιεχόµενα της φόρµας.

• Πριν από εισαγωγή (BeforeInsert event): αυτό το συµβάν πραγµατοποιείται


όταν ο χρήστης καταχωρεί τον πρώτο χαρακτήρα µιας νέας εγγραφής, αλλά
πριν αυτή η διαγραφή δηµιουργηθεί στον πίνακα της βάσης δεδοµένων µε τον
οποίο συσχετίζεται η τρέχουσα φόρµα.

• Μετά από εισαγωγή (AfterInsert event): αυτό το συµβάν πραγµατοποιείται


µετά την εισαγωγή µιας καινούριας εγγραφής στον πίνακα της βάσης δεδοµέ-
νων µε τον οποίο συσχετίζεται η τρέχουσα φόρµα.

• Πριν από ενηµέρωση (BeforeUpdate event): αυτό το συµβάν πραγµατοποιείται


πριν την ενηµέρωση του περιεχοµένου κάποιου εγγραφής ή κάποιου στοι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 215

χείου ελέγχου, σε περίπτωση κατά την οποία τα δεδοµένα που αποθηκεύονται σε


αυτό έχουν τροποποιηθεί.

• Μετά από ενηµέρωση (AfterUpdate event): αυτό το συµβάν πραγµατοποιείται


µετά την ενηµέρωση του περιεχοµένου κάποιας εγγραφής του πίνακα ή στοι-
χείου ελέγχου της φόρµας.

• Με αλλοίωση εγγραφής µετά την αποθήκευση (Dirty event): αυτό το συµβάν


πραγµατοποιείται όταν µεταβάλλονται τα περιεχόµενα µιας φόρµας ή του
πλαισίου κειµένου κάποιου combo box, καθώς και όταν µετακινούµαστε ανά-
µεσα στις σελίδες ενός Tab Control. Χρησιµοποιείται µόνο σε φόρµες ή αναφο-
ρές οι οποίες συσχετίζονται µε κάποιο πίνακα ενώ δεν έχει καµία επίδραση σε µη
δεσµευµένες φόρµες ή αναφορές.

• Με τη διαγραφή (Delete event): αυτό το συµβάν πραγµατοποιείται όταν ο χρή-


στης έχει πραγµατοποιήσει κάποια ενέργεια προκειµένου να διαγράψει κά-
ποια εγγραφή – όπως για παράδειγµα να πατήσει το πλήκτρο Del του πληκτρο-
λογίου – αλλά πριν την πραγµατοποίηση της διαδικασίας της διαγραφής.

• Πριν από επιβεβαίωση διαγραφής (BeforeDelConfirm event): αυτό το συµβάν


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

• Μετά από επιβεβαίωση διαγραφής (AfterDelConfirm event): αυτό το συµβάν


πραγµατοποιείται όταν ο χρήστης έχει απαντήσει καταφατικά στο ερώτηµα
διαγραφής των επιλεγµένων εγγραφών από τη βάση – περίπτωση κατά την
οποία λαµβάνει χώρα η πραγµατική διαγραφή αυτών των εγγραφών – ή όταν έχει
ακυρώσει την όλη διαδικασία.

• Με το άνοιγµα (Open event): αυτό το συµβάν πραγµατοποιείται όταν ανοίγει


µία φόρµα αλλά πριν ακόµη η εγγραφή που περιέχεται σε αυτή εµφανιστεί
στην οθόνη του χρήστη. Στην περίπτωση των αναφορών, αυτό το συµβάν πραγ-
µατοποιείται πριν λάβει χώρα προεπισκόπηση ή εκτύπωση µιας αναφοράς.

• Με τη φόρτωση (Load event): αυτό το συµβάν πραγµατοποιείται όταν µια


φόρµα έχει εµφανιστεί στην οθόνη του χρήστη µαζί µε τις εγγραφές του πίνακα
µε τον οποίο συσχετίζεται.

• Με την αλλαγή µεγέθους (Size event): αυτό το συµβάν πραγµατοποιείται κάθε


φορά που ανοίγει µια φόρµα, και κάθε φορά που λαµβάνει χώρα αλλαγή του
µεγέθους της.

• Με την αποφόρτωση (Unload event): αυτό το συµβάν πραγµατοποιείται κάθε


φορά που κλείνει µια φόρµα, αλλά πριν η εικόνα της αποµακρυνθεί από την
οθόνη του χρήστη.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 216

• Με το κλείσιµο (Close event): αυτό το συµβάν πραγµατοποιείται όταν κλείνει


µια φόρµα και αποµακρύνεται από την οθόνη του χρήστη.

• Με την ενεργοποίηση (Activate event): αυτό το συµβάν πραγµατοποιείται κάθε


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

• Με την απενεργοποίηση (Deactivate event): αυτό το συµβάν πραγµατοποιείται


κάθε φορά που µια φόρµα ή αναφορά χάνει την εστίαση του συστήµατος.

• Με την εστίαση (GotFocus event): αυτό το συµβάν πραγµατοποιείται κάθε


φορά που µια φόρµα ή στοιχείο ελέγχου λαµβάνει την εστίαση του συστήµα-
τος και γίνεται η τρέχουσα φόρµα ή το τρέχον στοιχείο ελέγχου. Πραγµατο-
ποιείται αµέσως µετά το Activate event. ∆εν χρησιµοποιείται για αναφορές ή
στοιχεία ελέγχου αναφορών.

• Με την απώλεια της εστίασης (LostFocus event): αυτό το συµβάν


πραγµατοποιείται κάθε φορά που µια φόρµα ή στοιχείο ελέγχου φόρµας χάνει
την εστίαση του συστήµατος. ∆εν ισχύει για αναφορές ή στοιχεία ελέγχου ανα-
φοράς.

• Με το click (click event): αυτό το συµβάν πραγµατοποιείται όταν ο χρήστης πα-


τήσει και στη συνέχεια απελευθερώσει το αριστερό πλήκτρο του ποντικιού
πάνω από κάποιο αντικείµενο της φόρµας.

• Με το διπλό click (DblClick event): αυτό το συµβάν πραγµατοποιείται κάθε


φορά που ο χρήστης κάνει double click µε το ποντίκι πάνω σε κάποιο αντικεί-
µενο της φόρµας.

• Μετακινώντας το ποντίκι (MouseMove event): αυτό το συµβάν πραγµατοποιεί-


ται όταν ο χρήστης µετακινεί το δείκτη του ποντικιού πάνω από τα αντικείµενα
της τρέχουσας φόρµας.

• Αφήνοντας το ποντίκι (MouseUp event): αυτό το συµβάν πραγµατοποιείται


όταν ο χρήστης απελευθερώσει κάποιο πλήκτρο του ποντικιού πάνω από κά-
ποιο αντικείµενο της τρέχουσας φόρµας.

• Με το πλήκτρο κάτω (KeyDown event): αυτό το συµβάν πραγµατοποιείται


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

• Με το πλήκτρο επάνω (KeyUp event): αυτό το συµβάν πραγµατοποιείται όταν


ο χρήστης απελευθερώσει κάποιο πλήκτρο, τη στιγµή που η εστίαση του συ-
στήµατος βρίσκεται στη φόρµα, ή σε κάποιο από τα στοιχεία ελέγχου που περι-
λαµβάνονται σε αυτή.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 217

• Με το πάτηµα του πλήκτρου (KeyPress event): αυτό το συµβάν πραγµατοποιεί-


ται όταν ο χρήστης πατήσει και στη συνέχεια απελευθερώσει ένα πλήκτρο – ή
ένα συνδυασµό πλήκτρων που αντιστοιχεί σε κάποιο κώδικα ASCII – τη χρο-
νική στιγµή που η εστίαση του συστήµατος βρίσκεται στη φόρµα ή σε κάποιο από
τα στοιχεία ελέγχου που περιλαµβάνονται σε αυτή.

• Προεπισκόπηση πλήκτρων (KeyPreview property): αυτή ή παράµετρος


χρησιµοποιείται προκειµένου να διαχειριστούµε τους συνδυασµούς πλήκτρων
που µπορεί να χρησιµοποιήσει ο χρήστης κατά την αλληλεπίδρασή του µε την
τρέχουσα φόρµα. Οι τιµές που παίρνει είναι δύο – Ναι (Yes ή (-1)) και Όχι (No ή
0) – και καθορίζει το εάν οι διαδικασίες που συσχετίζονται µε τη χρήση των
πλήκτρων για ολόκληρη τη φόρµα (form level keyboard procedures) θα
εκτελούνται πριν από τις διαδικασίες που συσχετίζονται µε τη χρήση των
πλήκτρων για τα διάφορα στοιχεία ελέγχου της (control level keyboard pro-
cedures). Με τον τρόπο αυτό είναι δυνατός ο ορισµός λειτουργικών πλήκτρων
(function keys) για την τρέχουσα φόρµα.

• Με το σφάλµα (Error event): αυτό το συµβάν πραγµατοποιείται όταν λάβει


χώρα εµφάνιση κάποιου σφάλµατος εκτέλεσης (run time error) κατά τη διάρ-
κεια του χρονικού διαστήµατος που η εστίαση του συστήµατος βρίσκεται στην
τρέχουσα φόρµα.

• Με το φίλτρο (Filter event): αυτό το συµβάν πραγµατοποιείται όταν ο χρήστης


ετοιµάζεται να εφαρµόσει κάποιο φίλτρο πάνω στα δεδοµένα της τρέχουσας
φόρµας. Στις πιο πολλές περιπτώσεις αυτό συµβαίνει όταν ο χρήστης ανοίγει το
πλαίσιο διαλόγου που συσχετίζεται µε τα φίλτρα, προκειµένου να ορίσει τις ιδιό-
τητες του φίλτρου που θέλει να εφαρµόσει.

• Με το φιλτράρισµα (ApplyFilter event): αυτό το συµβάν πραγµατοποιείται


όταν ο χρήστης εφαρµόζει κάποιο φίλτρο πάνω στα δεδοµένα της τρέχουσας
φόρµας.

• Με το χρονόµετρο (Timer event): αυτό το συµβάν πραγµατοποιείται σε τακτά


χρονικά διαστήµατα, η χρονική διάρκεια των οποίων καθορίζεται από το χρήστη
µε βάση την επόµενη ιδιότητα. Η πραγµατοποίηση αυτών των συµβάντων µε
σταθερό ρυθµό, είναι ιδιαίτερα χρήσιµη, σε περιπτώσεις κατά τις οποίες επιθυ-
µούµε να ανανεώνουµε τα περιεχόµενα της φόρµας σε τακτές χρονικές στιγµές.

• Χρονικό διάστηµα χρονοµέτρου (TimerInterval Property): αυτή η παράµετρος


δέχεται ως όρισµα την τιµή του χρονικού διαστήµατος που καθορίζει τη συ-
χνότητα πραγµατοποίησης του Timer event. Αυτή η τιµή είναι ένας ακέραιος
µεγάλου µήκους (long integer) στο διάστηµα [0, 2.147.483.647].

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 218

4) Ι∆ΙΟΤΗΤΕΣ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΑΛΛΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ


ΤΗΣ ΦΟΡΜΑΣ

Το τελευταίο σύνολο ιδιοτήτων που µπορούµε να καθορίσουµε για µια φόρµα


περιλαµβάνει χαρακτηριστικά τα οποία δεν µπορούν να καταταγούν σε µια από
τις προηγούµενες τρεις κατηγορίες. Οι ιδιότητες αυτές παίρνουν τιµές δια της χρή-
σης του επόµενου πλαισίου διαλόγου, και σε γενικές γραµµές είναι οι ακόλουθες:

Σχήµα 105 : Ιδιότητες που συσχετίζονται µε άλλα χαρακτηριστικά της φόρµας

• Αναδυόµενο (PopUp property): η ιδιότητα αυτή παίρνει µόνο τις τιµές Ναι (Yes
ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η φόρµα θα ανοίξει ως αναδυόµενη
ή όχι. Μια φόρµα που ανοίγει ως αναδυόµενη βρίσκεται πάντοτε πάνω από όλα
τα παράθυρα των Microsoft Windows και προκαλεί την απόκρυψη της γραµ-
µής ιδιοτήτων της Access που επιτρέπει τη σχεδίαση και διαχείριση των φορµών
της εφαρµογής (form design toolbar).

• Αποκλειστική (Modal property): η ιδιότητα αυτή παίρνει µόνο τις τιµές Ναι
(Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η φόρµα µας θα είναι αποκλει-
στικής χρήσης ή όχι. Μια φόρµα χαρακτηρίζεται ως αποκλειστική (modal) σε
περιπτώσεις κατά τις οποίες ο χρήστης µπορεί να αλληλεπιδράσει µόνο µαζί της,
ενώ δεν έχει πρόσβαση σε άλλα αντικείµενα της εφαρµογής. Αυτό σηµαίνει πως ο
χρήστης µπορεί να χρησιµοποιήσει άλλα αντικείµενα της εφαρµογής, µόνο όταν
κλείσει την τρέχουσα φόρµα.

• Κυκλική εναλλαγή (Cycle property): η ιδιότητα αυτή καθορίζει τον τρόπο µε


τον οποίο συµπεριφέρεται η φόρµα όταν ο χρήστης πατήσει το πλήκτρο Tab
τη χρονική στιγµή που η εστίαση του συστήµατος βρίσκεται στο τελευταίο στοι-
χείο ελέγχου τις φόρµας, και µπορεί να λάβει µια από τις τρεις ακόλουθες τιµές:

1. Όλες οι εγγραφές (All Records ή 0): αυτή η τιµή που είναι και η προεπι-
λεγµένη, εµφανίζει στη φόρµα την επόµενη εγγραφή, και µεταφέρει την
εστίαση του συστήµατος στο πρώτο στοιχείο ελέγχου της φόρµας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 219

2. Τρέχουσα εγγραφή (Current Record ή 1): αυτή η τιµή προκαλεί τη


µετακίνηση της εστίασης του συστήµατος στο πρώτο στοιχείο ελέγχου της
φόρµας, αλλά διατηρώντας στα πεδία της φόρµας τα δεδοµένα της τρέ-
χουσας εγγραφής.

3. Τρέχουσα σελίδα (Current Page ή 2): η τιµή αυτή προκαλεί τη µετακί-


νηση της εστίασης του συστήµατος στο πρώτο στοιχεί ελέγχου της τρέ-
χουσας σελίδας της φόρµας.

Σηµείωση: στην περίπτωση µιας φόρµας η οποία περιέχει περισσότερα από ένα
στοιχεία ελέγχου, ο χρήστης έχει τη δυνατότητα να µεταφέρεται από το ένα
στο άλλο, χρησιµοποιώντας το πλήκτρο Tab. Προκειµένου δε να καθορίσουµε
τη σειρά (Tab Order) µε την οποία αυτά τα στοιχεία ελέγχου θα προσπελαύνο-
νται το ένα µετά το άλλο µπορούµε να χρησιµοποιήσουµε το πλαίσιο διαλόγου
που φέρει τον τίτλο «Σειρά Tab» και βρίσκεται στο υπο-µενού «Προβολή» του
κεντρικού µενού επιλογών της Access.

Σχήµα 106: Καθορισµός του Tab Order για τα στοιχεία ελέγχου της τρέχουσας φόρµας

Στο παράδειγµά µας η σειρά Tab που καθορίζουµε µέσα από το παραπάνω πλαίσιο
διαλόγου αφορά τα πεδία του κεντρικού τµήµατος της φόρµας που φέρει τον τίτλο
«Λεπτοµέρειες».

• Γραµµή µενού (MenuBar property): η ιδιότητα αυτή επιτρέπει την εµφάνιση


στην τρέχουσα φόρµα ενός µενού επιλογών το οποίο θα συσχετίζεται µε τη
λειτουργία της. Το είδος και τα περιεχόµενα αυτού του µενού µπορούν να καθο-
ριστούν πάρα πολύ εύκολα µέσω µιας µακροεντολής, το όνοµα της οποίας θα πε-
ράσουµε ως παράµετρο σε αυτή την ιδιότητα.

• Γραµµή εργαλείων (ToolBar property): σε περιπτώσεις κατά τις οποίες επιθυ-


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 220

γαλείων της Access, αλλά εάν το επιθυµεί, µπορεί να κατασκευάσει τη δική του
γραµµή εργαλείων (customized toolbar) έτσι ώστε να ικανοποιούνται οι ανά-
γκες του.

• Μενού συντόµευσης (ShortcutMenu property): η ιδιότητα αυτή παίρνει µόνο


τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν θα εµφανίζεται µε-
νού συντόµευσης (shortcut menu) ή όχι, στην περίπτωση κατά την οποία ο χρή-
στης πατήσει το δεξί πλήκτρο του ποντικιού πάνω στην επιφάνεια της τρέχουσας
φόρµας.

• Γραµµή µενού συντόµευσης (ShortcutMenuBar property): στην περίπτωση


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

• Γρήγορη εκτύπωση σε εκτυπωτή Laser (FastLaserPrinting property): η ιδιό-


τητα αυτή παίρνει µόνο τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει
εάν κατά την εκτύπωση της φόρµας σε ένα εκτυπωτή Laser, οι γραµµές και τα
τετράγωνα που περιλαµβάνονται σε αυτή, θα αντικαθίστανται από ειδικούς
χαρακτήρες, όπως είναι ο «_» και ο «|». Αυτή η αντικατάσταση οδηγεί σε πολύ
γρήγορους ρυθµούς εκτύπωσης, κάτι που είναι επιθυµητό σε περιπτώσεις εκτύ-
πωσης πολλών φορµών µε µεγάλο πλήθος δεδοµένων σε κάθε µια από αυτές.

• Αρχείο βοηθείας (HelpFile property): σε περιπτώσεις κατά τις οποίες η εφαρ-


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

• Αναγνωριστικό θέµατος βοηθείας (HelpContextID property): σε κάθε αρχείο


βοηθείας των Microsoft Windows, υπάρχει ένας µεγάλος αριθµός από ενότητες,
που αφορούν τη χρήση συγκεκριµένων αντικειµένων. Για το λόγο αυτό για κάθε
αντικείµενο, καθορίζουµε ένα αναγνωριστικό θέµατος βοήθειας, που θα επι-
τρέψει στην εφαρµογή να εµφανίζει κάθε φορά εκείνη την ενότητα του αρχείου
βοηθείας που αντιστοιχεί στη χρήση του συγκεκριµένου αντικειµένου. Αυτό το
αναγνωριστικό είναι ένας ακέραιος µεγάλου µήκους (long integer) µε τιµή στο
διάστηµα [0, 2.147.483.647] η οποία αποδίδεται σε αυτή την ιδιότητα.

• Ετικέτα (Tag property): χρησιµοποιούµε αυτή την ιδιότητα στην περίπτωση


κατά την οποία επιθυµούµε να αποθηκεύσουµε οποιαδήποτε επιπλέον πληρο-
φορία θεωρούµε ότι είναι αναγκαία για την τρέχουσα φόρµα. Αυτή η πληρο-
φορία καταχωρείται ως τιµή σε αυτή την ιδιότητα, µε τη µορφή µιας συµβολοσει-
ράς που έχει µέγιστο µήκος τους 2048 χαρακτήρες.

• Έχει λειτουργική µονάδα (HasModule property): η ιδιότητα αυτή παίρνει µόνο


τις τιµές Ναι (Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η τρέχουσα φόρµα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 221

συσχετίζεται µε κάποια λειτουργική µονάδα (class module) η οποία να περιέ-


χει τον ορισµό ενός νέου αντικειµένου. Η συνιστώµενη τιµή για αυτή την ιδιό-
τητα είναι η τιµή «Όχι», η οποία οδηγεί στην αύξηση της απόδοσης του συστή-
µατος και στη µείωση του µεγέθους της βάσης δεδοµένων.

• Επιτρέπονται αλλαγές στη σχεδίαση (AllowDesignChanges property): η ιδιό-


τητα αυτή µας επιτρέπει να καθορίσουµε εάν οι αλλαγές στη σχεδίαση της φόρ-
µας επιτρέπονται µόνο σε προβολή σχεδίασης (design view) ή επιτρέπονται σε
όλες τις προβολές στις οποίες µπορεί να βρεθεί η φόρµα (form view και de-
sign view). Αυτή η ιδιότητα µπορεί να λάβει τις επόµενες δύο τιµές:

1. Όλες οι προβολές (All Views ή (-1)): η τιµή αυτή που είναι και η προεπι-
λεγµένη, επιτρέπει την αλλαγή της σχεδίασης της φόρµας, σε όλες τις
προβολές στις οποίες αυτή µπορεί να βρεθεί.

2. Μόνο προβολή σχεδίασης (Design View Only ή 0): η τιµή αυτή επιτρέ-
πει την αλλαγή της σχεδίασης της τρέχουσας φόρµας, µόνο όταν αυτή
βρίσκεται σε προβολή σχεδίασης.

ΕΡΓΑΣΙΑ ΜΕ ΤΗ ΦΟΡΜΑ ΣΕ ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ

Έχοντας δηµιουργήσει µια φόρµα η οποία να περιέχει τα πεδία που χρειαζό-


µαστε σε κάθε περίπτωση, µπορούµε στη συνέχεια να την εµφανίσουµε σε προ-
βολή σχεδίασης, προκειµένου να διαµορφώσουµε τα χαρακτηριστικά της, έτσι
ώστε να ικανοποιήσουµε τις απαιτήσεις µας όσον αφορά τη λειτουργικότητά της.
Για παράδειγµα µπορούµε να προσθέσουµε ή να αφαιρέσουµε πεδία, να αλλά-
ξουµε τις θέσεις των στοιχείων ελέγχου πάνω στην επιφάνειά της, καθώς επίσης
και να διαµορφώσουµε κατάλληλα την κεφαλίδα της και το υποσέλιδό της. Το
παρακάτω σχήµα εµφανίζει σε προβολή σχεδίασης τη φόρµα EMPLOYEE µέσω της
οποίας διαχειριζόµαστε τα προσωπικά στοιχεία των υπαλλήλων της εταιρείας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 222

Σχήµα 107 : Η φόρµα EMPLOYEE σε προβολή σχεδίασης

Από το παραπάνω σχήµα διαπιστώσουµε πως µια φόρµα στη γενική περί-
πτωση αποτελείται από ένα σύνολο πεδίων, τα οποία συσχετίζονται µε τα πεδία
κάποιου από τους πίνακες της βάσης. Το κάθε πεδίο συνοδεύεται από µια ετικέτα,
και αναγράφει στο εσωτερικό του το όνοµα του πεδίου του πίνακα από το οποίο
δέχεται τιµές. Ας πάρουµε για παράδειγµα το πλαίσιο κειµένου LName Αυτό συνο-
δεύεται από µια ετικέτα που φέρει τον τίτλο «Last Name», και αναγράφει στο εσω-
τερικό του τη λέξη LName. Αυτή η λέξη είναι το όνοµα του πεδίου του πίνακα
EMPLOYEE µε το οποίο συσχετίζεται αυτό το πεδίο της φόρµας – µε άλλα λόγια
εάν στο πεδίο αυτό καταχωρήσουµε κάποιο επώνυµο, αυτό θα αποθηκευθεί στο πεδίο
LName της τρέχουσας εγγραφής. Όσον αφορά τον τίτλο της ετικέτας που συνοδεύει
αυτό το πεδίο, αυτός καθορίζεται από την ιδιότητα «Λεζάντα» του πεδίου Lname,
που εµφανίζεται εάν φέρουµε τον πίνακα EMPLOYEE σε προβολή σχεδίασης. Εάν
δεν καθορίσουµε κάποια λεζάντα, αυτή αυτόµατα θα τεθεί στο όνοµα του πεδίου
του πίνακα. Σε κάθε περίπτωση όµως µπορούµε να καθορίσουµε όποιον τίτλο θέ-
λουµε, µεταφέροντας τη φόρµα σε προβολή σχεδίασης

Προκειµένου να επιλέξουµε ένα πεδίο, θα πρέπει να µεταφέρουµε το δείκτη


του ποντικιού πάνω από αυτό – ή πάνω από την ετικέτα που το συνοδεύει – και
να πατήσουµε το αριστερό πλήκτρο του. Στην περίπτωση αυτή το πεδίο εµφανίζε-
ται επιλεγµένο, όπως φαίνεται στο ακόλουθο σχήµα:

Σχήµα 108 : Παράδειγµα επιλεγµένου πεδίου φόρµας σε προβολή σχεδίασης

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 223

∆ιατηρώντας αυτό το πεδίο επιλεγµένο, µπορούµε να εφαρµόσουµε πάνω σε


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

Σχήµα 109 : Μορφές επεξεργασίας που εφαρµόζονται πάνω σε επιλεγµένο πεδίο φόρµας

Από τις επιλογές που περιλαµβάνονται στο παραπάνω µενού επιλογών, η πιο
σηµαντική είναι η επιλογή «Ιδιότητες», που εµφανίζει τις ιδιότητες του συγκεκριµέ-
νου πεδίου της φόρµας. Το σύνολο αυτών των ιδιοτήτων εξαρτάται από τη φύση του
συγκεκριµένου πεδίου, αν και πάρα πολλές από αυτές είναι ακριβώς οι ίδιες µε εκεί-
νες που περιγράψαµε στις προηγούµενες σελίδες και αφορούν ολόκληρη τη φόρµα.
Ένα παράδειγµα φύλλου ιδιοτήτων που στην προκειµένη περίπτωση αφορούν το
πλαίσιο κειµένου Address στο οποίο καταχωρούµε τις διευθύνσεις των υπαλλήλων
της εταιρείας, παρουσιάζεται στο επόµενο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 10 : Φόρµες 224

Σχήµα 110 : Φύλλο ιδιοτήτων επιλεγµένου πεδίου φόρµας σε προβολή σχεδίασης

Η µετακίνηση ενός πεδίου γίνεται µε τη διαδικασία drag and drop, επιλέγο-


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11
Ερωτήµατα
Στο κεφάλαιο αυτό περιγράφεται ο τρόπος δηµιουργίας
και διαχείρισης ερωτηµάτων µέσα από το περιβάλλον της
Microsoft Access.

Όπως έχει ήδη αναφερθεί σε προηγούµενο κεφάλαιο, ένας από τους πιο σηµα-
ντικούς λόγους που υπαγορεύουν την οργάνωση των δεδοµένων µιας εφαρµογής, µε
τη βοήθεια ενός συστήµατος διαχείρισης βάσεων δεδοµένων, είναι η εύκολη ανά-
κτηση πληροφοριών από τη βάση, δια του καθορισµού συγκεκριµένων κριτηρίων
επιλογής. Θεωρώντας ως παράδειγµα, τη βάση δεδοµένων µιας Σχολικής Μονάδας,
µπορούµε σχετικά εύκολα, να ανακτήσουµε τα δεδοµένα που αφορούν τους µαθητές
ενός τµήµατος, και στη συνέχεια να εφαρµόσουµε πάνω σε αυτά διάφορες µορφές
επεξεργασίας, όπως για παράδειγµα να τα ταξινοµήσουµε ή να τα χωρίσουµε σε
οµάδες, σύµφωνα µε κάποιες ιδιότητες που τα χαρακτηρίζουν. Αυτές οι διαδικα-
σίες αναζήτησης επιλεγµένων δεδοµένων, είναι γνωστές ως ερωτήµατα (queries),
και η διαχείρισή τους, αποτελεί αναπόσπαστο χαρακτηριστικό όλων των συστηµάτων
διαχείρισης βάσεων δεδοµένων.

Η διατύπωση των ερωτηµάτων που υποβάλλονται προς τη βάση, λαµβάνει


χώρα, δια της χρήσης της δοµηµένης γλώσσας ερωτοαποκρίσεων (Structured
Query Language, SQL), που έχει µελετηθεί σε προηγούµενο κεφάλαιο. Η γλώσσα
αυτή καλύπτει πλήρως όλες σχεδόν τις µορφές διαχείρισης δεδοµένων, και οι εντο-
λές που περιλαµβάνει µπορούν να οµαδοποιηθούν σε δύο κατηγορίες, µε κριτήριο το
είδος της λειτουργίας που επιτελούν. Πιο συγκεκριµένα, οι εντολές µε τις οποίες είναι
δυνατός ο καθορισµός και η διαχείριση του σχεσιακού σχήµατος της βάσης, συνι-
στούν τη γλώσσα ορισµού δεδοµένων (Data Definition Language, DDL), ενώ οι
εντολές που επιτρέπουν τη διαχείριση του περιεχοµένου των πινάκων της βάσης,
περιλαµβάνονται στη γλώσσα χειρισµού δεδοµένων (Data Definition Language,
DDL). Ανάλογα µε το είδος της εφαρµογής και των πληροφοριών που συσχετίζονται
µε αυτή, η δυνατότητα χρήσης του συνόλου των εντολών της SQL, καθορίζεται από
το ρόλο του κάθε χρήστη µέσα στο σύστηµα. Έτσι, στα µεγάλα υπολογιστικά συστή-
µατα που περιλαµβάνουν ευαίσθητα και σηµαντικά δεδοµένα, οι εντολές της γλώσ-
σας ορισµού δεδοµένων, µπορούν να εκτελεστούν µόνο από το διαχειριστή της βά-
σης (Database Administrator, DBA), ενώ οι απλοί χρήστες του συστήµατος, µπο-
ρούν να εκτελέσουν µόνο τις εντολές της γλώσσας χειρισµού δεδοµένων, µε τη δυνα-
τότητα χρήσης της κάθε εντολής, να εξαρτάται από τα δικαιώµατα πρόσβασης που
έχει ο χρήστης πάνω στους πίνακες της βάσης.
Κεφάλαιο 11 : Ερωτήµατα 226

Η Microsoft Access, ως ένα µοντέρνο σχεσιακό σύστηµα διαχείρισης βάσεων


δεδοµένων, υποστηρίζει πλήρως τη δηµιουργία και διαχείριση ερωτηµάτων, τόσο
δια της ανάπτυξης κώδικα, απευθείας σε γλώσσα SQL, όσο και δια της σύνθεσης
του ερωτήµατος, µέσα από ένα εύχρηστο και φιλικό περιβάλλον. Η τελευταία πε-
ρίπτωση, που είναι και ένα από τα πιο ισχυρά χαρακτηριστικά της Access, επιτρέπει
τη δηµιουργία ερωτηµάτων, ακόµη και από χρήστες που δε γνωρίζουν τη χρήση της
γλώσσας SQL. Στην περίπτωση αυτή, ο χρήστης έχει τη δυνατότητα να καθορίσει
µε ένα απλό και εύκολο τρόπο, τους πίνακες και τα πεδία που θα συµµετάσχουν
στα ερωτήµατα προς κατασκευή, και στη συνέχεια η Access, θα αναλάβει τη δη-
µιουργία του κώδικα SQL έτσι ώστε να δηµιουργήσει το ερώτηµα που υπαγο-
ρεύεται από τις επιλογές του χρήστη. Περισσότερες λεπτοµέρειες σχετικά µε τη
δηµιουργία ερωτηµάτων µέσα από το περιβάλλον της Microsoft Access, παρουσιά-
ζονται στις επόµενες ενότητες.

Ολοκληρώνοντας αυτή τη θεωρητική εισαγωγή όσον αφορά τη φύση και τα


χαρακτηριστικά των ερωτηµάτων, είναι σηµαντικό να αναφέρουµε τους πέντε δια-
φορετικούς τύπους ερωτηµάτων που υποστηρίζει η Microsoft Access, και που φέ-
ρουν τα ονόµατα ερωτήµατα επιλογής (select queries), ερωτήµατα παραµέτρων
(parameter queries), ερωτήµατα διασταύρωσης (crosstab queries), ερωτήµατα
ενέργειας (action queries), και ερωτήµατα SQL (SQL queries). Σε µια πιο αναλυ-
τική περιγραφή, οι πέντε αυτές κατηγορίες ερωτηµάτων, χαρακτηρίζονται από τις
ακόλουθες ιδιότητες:

• Ερωτήµατα επιλογής (select queries): τα ερωτήµατα αυτού του τύπου, χρησιµο-


ποιούνται για την ανάκτηση δεδοµένων από έναν ή περισσότερους πίνακες της
βάσης, και την εµφάνιση των αποτελεσµάτων σε κατάλληλα διαµορφωµένο
φύλλο δεδοµένων. Αυτά τα ερωτήµατα χρησιµοποιούνται ακόµη για την οµαδο-
ποίηση εγγραφών, για τον υπολογισµό αθροισµάτων και για την εξαγωγή
στατιστικών µεγεθών όπως είναι για παράδειγµα ο µέσος όρος µιας οµάδας
αριθµητικών τιµών.

• Ερωτήµατα παραµέτρων (parameter queries): το βασικό χαρακτηριστικό αυ-


τού του τύπου ερωτηµάτων, είναι ο παραµετρικός τρόπος λειτουργίας τους.
Αυτό σηµαίνει πως η εκτέλεση αυτών των ερωτηµάτων προϋποθέτει την κα-
ταχώρηση από το χρήστη ενός συνόλου πληροφοριών µε βάση τις οποίες επι-
λέγονται και εµφανίζονται τα κατάλληλα σε κάθε περίπτωση δεδοµένα. Η κα-
ταχώρηση των τιµών αυτών των παραµέτρων γίνεται κατά τη φάση εκτέλεσης
του ερωτήµατος και δια της χρήσης ενός πλαισίου διαλόγου, το οποίο εµφανίζε-
ται από το ίδιο το ερώτηµα. Χαρακτηριστικό παράδειγµα ερωτήµατος παραµέ-
τρων, είναι ένα ερώτηµα που ζητάει από το χρήστη να καταχωρήσει δύο ηµερο-
µηνίες, και στη συνέχεια εµφανίζει όλες τις εγγραφές των πινάκων που εµπίπτουν
µεταξύ αυτών των δύο ηµεροµηνιών.

• Ερωτήµατα διασταύρωσης (crosstab queries): τα ερωτήµατα διασταύρωσης


εφαρµόζονται συνήθως σε µία στήλη του πίνακα και εµφανίζουν συγκεντρωτι-
κές τιµές (αθροίσµατα, καταµετρήσεις και µέσους όρους) για το σύνολο τιµών
που αντιστοιχούν στο συγκεκριµένο πεδίο του πίνακα. Επιπλέον υπάρχει η δυνα-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 227

τότητα οµαδοποίησης αυτών των συγκεντρωτικών τιµών, µε βάση ορισµένα


κριτήρια.

• Ερωτήµατα ενέργειας (action queries): τα ερωτήµατα ενέργειας χρησιµοποιού-


νται κατά κύριο λόγο, για την τροποποίηση του περιεχοµένου των πινάκων της
βάσης δια της εισαγωγής, διαγραφής και ενηµέρωσης εγγραφών, αλλά ταυτό-
χρονα, πραγµατοποιούν και άλλες σηµαντικές διαδικασίες, όπως είναι για παρά-
δειγµα η δηµιουργία βοηθητικών πινάκων. Αν και αυτού του είδους οι διαδικα-
σίες µπορούν να πραγµατοποιηθούν πάρα πολύ εύκολα δια της χρήσης κατάλ-
ληλα σχεδιασµένων φορµών, εν τούτοις, υπάρχουν περιπτώσεις, στις οποίες η δη-
µιουργία τέτοιων ερωτηµάτων επιταχύνει τη διαδικασία ενηµέρωσης της βάσης,
και διευκολύνει σηµαντικά την εργασία του χρήστη. Εάν για παράδειγµα επιθυ-
µούµε να µεταφέρουµε ένα πλήθος εγγραφών από ένα πίνακα σε ένα άλλο, είναι
προτιµότερο να πραγµατοποιήσουµε αυτή τη διαδικασία σε ένα και µόνο βήµα
δια της χρήσης ενός ερωτήµατος ενέργειας, παρά να περάσουµε όλες αυτές τις εγ-
γραφές τη µία µετά την άλλη.

• Ερωτήµατα SQL (SQL queries) : τα ερωτήµατα αυτού του τύπου, δηµιουργού-


νται χρησιµοποιώντας προτάσεις SQL (SQL statements). Μία πρόταση SQL,
ορίζεται ως µία έκφραση, που περιέχει κάποια εντολή της γλώσσας SQL – όπως
SELECT, UPDATE ή DELETE – καθώς και ένα πλήθος χαρακτηριστικών εκ-
φράσεων της γλώσσας, όπως είναι η WHERE και η ORDER BY. Υπάρχουν αρ-
κετές κατηγορίες ερωτηµάτων SQL, όπως είναι τα ερωτήµατα συνένωσης, τα
ερωτήµατα διαβίβασης, καθώς και τα ερωτήµατα που συσχετίζονται µε τη
γλώσσα ορισµού δεδοµένων. Τα ερωτήµατα συνένωσης συνδυάζουν πεδία από
δύο ή περισσότερους πίνακες (ή ερωτήµατα) σε ένα απλό πεδίο, δυνατότητα
που είναι ιδιαίτερα χρήσιµη σε περιπτώσεις δηµιουργίας συγκεντρωτικών απο-
τελεσµάτων. Τα ερωτήµατα διαβίβασης, επιτρέπουν την αποστολή προτάσεων
SQL σε άλλα συστήµατα διαχείρισης βάσεων δεδοµένων, µέσω του µηχανι-
σµού ODBC (Open Database Connectivity). Τέλος, τα ερωτήµατα ορισµού δε-
δοµένων, επιτρέπουν την πραγµατοποίηση διαδικασιών που συσχετίζονται µε
τη γλώσσα χειρισµού δεδοµένων, όπως είναι η δηµιουργία, τροποποίηση και
διαγραφή, πινάκων και ευρετηρίων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 228

∆ΗΜΙΟΥΡΓΙΑ ΕΡΩΤΗΜΑΤΩΝ ΣΤΗ MICROSOFT ACCESS

Η δηµιουργία ερωτηµάτων στη Microsoft Access, πραγµατοποιείται πάρα


πολύ εύκολα, εάν µεταφερθούµε στο κεντρικό παράθυρο διαχείρισης της βάσης δε-
δοµένων, και από εκεί, επιλέξουµε Ερωτήµατα. Στην περίπτωση αυτή, θα εµφανι-
στεί στην οθόνη του υπολογιστή µας, το επόµενο πλαίσιο διαλόγου:

Σχήµα 111 : Το κεντρικό παράθυρο διαχείρισης ερωτηµάτων στη Microsoft Access

Παρατηρώντας τα περιεχόµενα του παραπάνω σχήµατος, δεν είναι δύσκολο


να διαπιστώσουµε πως η δηµιουργία ερωτηµάτων µπορεί να γίνει µε δύο τρόπους.
Ο ένας τρόπος περιλαµβάνει τη δηµιουργία του ερωτήµατος σε προβολή σχεδία-
σης, κατά την οποία η δοµή και οι ιδιότητες του ερωτήµατος, θα πρέπει να καθορι-
στούν από το χρήστη, ενώ ο δεύτερος περιλαµβάνει τη δηµιουργία του ερωτήµα-
τος, µε τη βοήθεια του κατάλληλου οδηγού, ο οποίος θα βοηθήσει το χρήστη να
καθορίσει τα χαρακτηριστικά του ερωτήµατος, µε ένα εύκολο και γρήγορο τρόπο.
Στις σελίδες που ακολουθούν θα περιγράψουµε και τις δύο διαδικασίες, δηµιουργώ-
ντας παραδείγµατα ερωτηµάτων που εφαρµόζονται πάνω στη βάση δεδοµένων της
εταιρείας. Η δηµιουργία όλων αυτών των ερωτηµάτων πραγµατοποιείται εάν χρησι-
µοποιήσουµε το κουµπί µε ετικέτα «∆ηµιουργία» που περιλαµβάνεται στο πλαίσιο
διαλόγου του προηγούµενου σχήµατος. Στην περίπτωση αυτή, θα εµφανιστεί στην
οθόνη του υπολογιστή µας, το παράθυρο που ακολουθεί στη συνέχεια.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 229

Σχήµα 112 : Οι πέντε δυνατοί τρόποι δηµιουργίας ερωτηµάτων

Η πρώτη από τις επιλογές αυτού του πλαισίου που φέρει το όνοµα «Προβολή
Σχεδίασης», είναι η πιο γενική από όλες και περιλαµβάνει τον πλήρη καθορισµό
των παραµέτρων του ερωτήµατος, από το χρήστη. Αυτό σηµαίνει πως ο χρήστης
θα πρέπει να καθορίσει, τόσο τους πίνακες και τα πεδία που θα περιλαµβάνονται
στο ερώτηµα, όσο και τα κριτήρια επιλογής µε τη βοήθεια των οποίων θα λάβει
χώρα η αναζήτηση των δεδοµένων. Αντίθετα, η επιλογή «Οδηγός απλών ερωτη-
µάτων», που ακολουθεί στη συνέχεια, πραγµατοποιεί ακριβώς την ίδια διαδικασία,
αλλά επιτρέπει στο χρήστη να καθορίσει τα πεδία των πινάκων που θα συµµετάσχουν
στο ερώτηµα, µε ένα πιο εύκολο τρόπο σε σχέση µε εκείνον που του προσφέρει η
προβολή σχεδίασης. Τέλος, οι υπόλοιπες τρεις επιλογές, επιτρέπουν τη δηµιουργία
συγκεκριµένων τύπων ερωτηµάτων. Ο πρώτος τύπος αφορά τα ερωτήµατα δια-
σταύρωσης, τα οποία είναι ιδανικά για την εξαγωγή συγκεντρωτικών τιµών και
µέσων όρων. Ο δεύτερος τύπος, επιτρέπει την αναζήτηση διπλότυπων εγγραφών
στους πίνακες της βάσης, ενώ ο τελευταίος τύπος ερωτηµάτων, επιτρέπει την αναζή-
τηση αταίριαστων εγγραφών, δηλαδή εγγραφών, για τις οποίες δεν υπάρχουν συ-
σχετιζόµενες εγγραφές στους άλλους πίνακες. Στις σελίδες που ακολουθούν, θα περι-
γράψουµε µε αναλυτικό τρόπο, τη δηµιουργία ερωτηµάτων µέσα από τη Microsoft
Access, δια της χρήσης συγκεκριµένων παραδειγµάτων, τα οποία θα συµβάλλουν
στην ευκολότερη κατανόηση του αντικειµένου.

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

Για να κατανοήσουµε καλύτερα τη δηµιουργία ενός ερωτήµατος σε προβολή


σχεδίασης, θα χρησιµοποιήσουµε τη βάση δεδοµένων της εταιρείας, και θα σχεδιά-
σουµε ένα απλό ερώτηµα, το οποίο θα επιστρέφει τα ονόµατα και τα επώνυµα όλων
των υπαλλήλων που εργάζονται στο τµήµα µε κωδικό 5. Για να το κάνουµε αυτό,
θα χρησιµοποιήσουµε την επιλογή «Προβολή σχεδίασης» από το πλαίσιο διαλόγου
του προηγούµενου σχήµατος, και θα πατήσουµε το πλήκτρο OK. Στην περίπτωση
αυτή, θα εµφανιστεί στην οθόνη του υπολογιστή µας το παράθυρο του επόµενου
σχήµατος.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 230

Σχήµα 113 : Καθορισµός των πινάκων της βάσης που θα χρησιµοποιηθούν για τη δηµιουργία του
ερωτήµατος σε προβολή σχεδίασης.

Αυτό το παράθυρο, εµφανίζει ένα κατάλογο ο οποίος περιλαµβάνει όλους


τους πίνακες που έχουν δηµιουργηθεί στη βάση δεδοµένων της εταιρείας. Από τους
πίνακες αυτούς, θα επιλέξουµε εκείνους που θέλουµε να χρησιµοποιήσουµε στο
νέο ερώτηµα. Εάν το επιθυµούµε µπορούµε εκτός από τους πίνακες, να επιλέξουµε
και ερωτήµατα – χρησιµοποιώντας την οµώνυµη σελίδα ιδιοτήτων – κάτι που µας
δίνει τη δυνατότητα, να δηµιουργήσουµε ένα ερώτηµα που να στηρίζεται πάνω σε
ένα άλλο ερώτηµα. Επιπλέον είναι σηµαντικό να αναφέρουµε, πως έχουµε τη δυνα-
τότητα να επιλέξουµε πολλούς πίνακες ή ερωτήµατα ταυτόχρονα, χρησιµοποιώ-
ντας τα πλήκτρα Ctrl και Shift µε το συνήθη τρόπο µε τον οποίο τα χρησιµοποιούµε
στις άλλες εφαρµογές των Windows.

Στο παράδειγµά µας, το ερώτηµα που θέλουµε να δηµιουργήσουµε, αφορά


πεδία, τα οποία περιλαµβάνονται στον πίνακα EMPLOYEE. Για το λόγο αυτό, επι-
λέγουµε τον εν λόγω πίνακα από τη λίστα των πινάκων της βάσης, χρησιµοποιώντας
το ποντίκι, και στη συνέχεια, πατώντας το κουµπί «Προσθήκη», τον εµφανίζουµε
στο κεντρικό παράθυρο σχεδίασης ερωτηµάτων που βρίσκεται ακριβώς από πίσω.
Στη συνέχεια, κλείνουµε το παράθυρο προσθήκης πινάκων και ερωτηµάτων, χρησι-
µοποιώντας κατά τα γνωστά, το κουµπί «Κλείσιµο».

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 231

Σχήµα 114 : ∆ηµιουργία ερωτήµατος σε προβολή σχεδίασης

Έχοντας ολοκληρώσει αυτή τη διαδικασία, το κεντρικό παράθυρο δηµιουρ-


γίας ερωτηµάτων, θα παρουσιάζει την εικόνα του προηγούµενου σχήµατος. Σύµφωνα
µε αυτή την εικόνα, ο µοναδικός πίνακας ο οποίος θα συµµετάσχει στο νέο ερώτηµα,
είναι ο πίνακας EMPLOYEE. Για να καθορίσουµε όµως πλήρως τα χαρακτηριστικά
του ερωτήµατος, δεν αρκεί να καθορίσουµε µόνο τους πίνακες της βάσης, αλλά
και τα πεδία των πινάκων αυτών. Μελετώντας προσεκτικά τη διατύπωση του ερω-
τήµατος που θέλουµε να υλοποιήσουµε, δεν είναι δύσκολο να διαπιστώσουµε, πως τα
πεδία του πίνακα EMPLOYEE που συµµετέχουν στο νέο ερώτηµα, είναι το
LNAME, το FNAME και το DNO. Τα δύο πρώτα πεδία είναι εκείνα που θέλουµε να
επιστρέψει το ερώτηµα, ενώ το πεδίο DNO, περιέχει το κριτήριο που θέλουµε να χα-
ρακτηρίζει τις επιστρεφόµενες εγγραφές, και το οποίο είναι το DNO=5. Αυτό σηµαί-
νει πως στη διαδικασία σχεδίασης του ερωτήµατος, θα πρέπει να καθορίσουµε και τα
τρία αυτά πεδία.

Προκειµένου να καθορίσουµε τα πεδία του πίνακα που θα συµµετέχουν στο


νέο ερώτηµα, θα πρέπει να τα µεταφέρουµε στο φύλλο δεδοµένων που βρίσκεται
στο κάτω µέρος του παραθύρου, και µε τέτοιο τρόπο, ώστε να τοποθετήσουµε ένα
πεδίο σε κάθε στήλη. Ο πρώτος τρόπος που είναι και ο πιο απλός, περιλαµβάνει µια
διαδικασία drag and drop, κατά την οποία, επιλέγουµε το πεδίο του πίνακα που
θέλουµε να χρησιµοποιήσουµε, και στη συνέχεια κρατώντας πατηµένο το αρι-
στερό πλήκτρο του ποντικιού, µεταφέρουµε το πεδίο σε κάποια από τις στήλες

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 232

του φύλλου δεδοµένων που βρίσκεται ακριβώς από κάτω. Ας σηµειωθεί πως η
σειρά µε την οποία τοποθετούµε τα πεδία στις στήλες του φύλλου δεδοµένων,
καθορίζει και τη σειρά µε την οποία θα εµφανιστούν τα αποτελέσµατα του ερω-
τήµατος, κατά τη φάση της εκτέλεσής του. Έτσι εάν στην πρώτη στήλη τοποθετή-
σουµε το πεδίο LNAME και στη δεύτερη το πεδίο FNAME, αυτή η σειρά εµφάνισης
θα τηρηθεί και κατά την παρουσίαση των αποτελεσµάτων στην οθόνη του χρήστη – η
στήλη µε τα επώνυµα των υπαλλήλων θα εµφανιστεί πρώτη. Εάν λοιπόν τοποθετή-
σουµε τα τρία πεδία του πίνακα EMPLOYEE στις στήλες του φύλλου δεδοµένων
του πλαισίου διαλόγου, αυτό θα παρουσιάσει την ακόλουθη εικόνα:

Σχήµα 115 : Καθορισµός των πεδίων του πίνακα που θα χρησιµοποιηθούν στο νέο ερώτηµα

Η δεύτερη δυνατότητα που έχουµε στη διάθεσή µας είναι να επιλέξουµε τα


πεδία του πίνακα που θα χρησιµοποιήσουµε, απευθείας από το φύλλο δεδοµένων
του παραθύρου σχεδίασης του ερωτήµατος. Για να το κάνουµε αυτό, θα πατή-
σουµε το αριστερό πλήκτρο που ποντικιού στο πρώτο κελί της πρώτης στήλης που
αντιστοιχεί στην ετικέτα «Πεδίο», και από το Combo Box που θα εµφανιστεί, θα
επιλέξουµε το πεδίο LNAME. Στη συνέχεια, θα πραγµατοποιήσουµε την ίδια διαδι-
κασία για το δεύτερο κελί της πρώτης στήλης που αντιστοιχεί στην ετικέτα «Πίνα-
κας», και από τη λίστα των πινάκων που θα εµφανιστεί, θα επιλέξουµε τον πίνακα
EMPLOYEE. Με τον ίδιο τρόπο θα καθορίσουµε και τα πεδία που θα τοποθετηθούν
στις υπόλοιπες στήλες. Το επόµενο σχήµα, παρουσιάζει αυτή τη διαδικασία επιλογής
των πινάκων και των πεδίων που θα χρησιµοποιηθούν στο ερώτηµα που κατασκευά-
ζουµε.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 233

Σχήµα 116 : Εναλλακτική διαδικασία καθορισµού των πεδίων του πίνακα που θα χρησιµοποιηθούν
στο νέο ερώτηµα

Μελετώντας τώρα προσεκτικά τις γραµµές που περιλαµβάνονται στο παρα-


πάνω φύλλο δεδοµένων, δεν είναι δύσκολο να διαπιστώσουµε πως επιτρέπουν τον
καθορισµό επιµέρους χαρακτηριστικών για το κάθε ένα από τα πεδία που συµµε-
τέχουν στο ερώτηµα προς κατασκευή. Πιο συγκεκριµένα, η γραµµή «Ταξινόµηση»
χρησιµοποιείται για να καθορίσουµε εάν τα αποτελέσµατα του ερωτήµατος θα εµ-
φανιστούν ταξινοµηµένα ως προς κάποιο πεδίο. Εάν επιλέξουµε την ταξινοµηµένη
εµφάνιση των πεδίων θα πρέπει να καθορίσουµε εάν αυτή θα είναι αύξουσα ή φθί-
νουσα. Ο καθορισµός του είδους της ταξινόµησης, γίνεται πατώντας το αριστερό
πλήκτρο του ποντικιού στο κελί της στήλης του πεδίου που βρίσκεται στη γραµµή της
ταξινόµησης, και επιλέγοντας τον τύπο της ταξινόµησης από το combo box που εµ-
φανίζεται. Στο παράδειγµα του επόµενου σχήµατος, έχουµε επιλέξει αύξουσα ταξι-
νόµηση, τόσο για τα ονόµατα, όσο και για τα επώνυµα των υπαλλήλων της εταιρείας.

Η αµέσως επόµενη γραµµή του φύλλου δεδοµένων του ερωτήµατος που φέρει
το όνοµα «Εµφάνιση», καθορίζει εάν κάποιο από τα πεδία που συµµετέχουν στο
ερώτηµα, θέλουµε να εµφανιστεί στο τελικό αποτέλεσµα, ή όχι. Η επιλογή αυτή
είναι ιδιαίτερα χρήσιµη, καθώς η χρησιµοποίηση κάποιου πεδίου στην κατασκευή
του ερωτήµατος, δεν σηµαίνει πως αυτό το πεδίο θα πρέπει υποχρεωτικά να εµ-
φανίζεται κατά την εκτέλεση του ερωτήµατος στο οποίο συµµετέχει. Χαρακτηρι-
στικό παράδειγµα ενός τέτοιου πεδίου, είναι το πεδίο DNO. Αυτό το πεδίο, δεν θα
εµφανιστεί στο τελικό αποτέλεσµα, διότι οι πληροφορίες που θέλουµε να ανακτή-
σουµε από τη βάση, αφορούν µόνο το όνοµα και το επώνυµο των υπαλλήλων που
περιλαµβάνονται στα πεδία FNAME και LNAME αντίστοιχα. Παρά το γεγονός
όµως αυτό, το πεδίο DNO χρησιµοποιείται στο ερώτηµα, διότι περιέχει το κριτήριο
επιλογής των εγγραφών του πίνακα EMPLOYEE που είναι η συνθήκη DNO=5. Για
το λόγο αυτό, θα αφήσουµε επιλεγµένα τα check boxes των στηλών LNAME και
FNAME που βρίσκονται στη γραµµή µε την ετικέτα «Εµφάνιση», ενώ θα αφαιρέ-
σουµε το check mark, από το check box που αντιστοιχεί στο πεδίο DNO, όπως φαί-
νεται στο επόµενο σχήµα.

Τέλος, στην τελευταία γραµµή του φύλλου δεδοµένων που φέρει το όνοµα
«Κριτήρια», καθώς και σε όσες γραµµές ακολουθούν από εκεί και κάτω, καθορί-
ζουµε µια ή περισσότερες συνθήκες τις οποίες πρέπει να πληρούνε τα δεδοµένα
που επιθυµούµε να ανακτήσουµε. Στο παράδειγµά µας, ζητούµε τα ονόµατα και τα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 234

επώνυµα των υπαλλήλων, που ανήκουν στο τµήµα της εταιρείας µε κωδικό
αριθµό 5. Για το λόγο αυτό, θα πρέπει να µεταφερθούµε στη στήλη του πεδίου DNO,
και στο κελί που αντιστοιχεί στη γραµµή «Κριτήρια», θα πρέπει να βάλουµε την
τιµή 5. Το επόµενο σχήµα, περιέχει όλες τις ρυθµίσεις που θα πρέπει να κάνουµε έτσι
ώστε να ανακτήσουµε τη συγκεκριµένη πληροφορία από τη βάση.

Σχήµα 117 : Καθορισµός των παραµέτρων για τα πεδία του πίνακα που θα χρησιµοποιηθούν στο νέο
ερώτηµα

Έχοντας ολοκληρώσει τη σχεδίαση του ερωτήµατος, µπορούµε να το αποθη-


κεύσουµε για µελλοντική χρήση, καταχωρώντας ένα όνοµα στο επόµενο πλαίσιο δια-
λόγου. Αυτό το πλαίσιο εµφανίζεται εάν χρησιµοποιήσουµε το κουµπί µε τη δι-
σκέτα που βρίσκεται στην κεντρική γραµµή εργαλείων της εφαρµογής ή την επι-
λογή «Αποθήκευση» από το κεντρικό µενού επιλογών της Access. Και στις δύο
περιπτώσεις, θα λάβει χώρα αποθήκευση του ερωτήµατος, το οποίο στη συνέχεια
θα εµφανιστεί στον κατάλογο των ερωτηµάτων του κεντρικού παραθύρου διαχείρισης
της βάσης δεδοµένων.

Σχήµα 118 : Αποθήκευση του νέου ερωτήµατος στη βάση δεδοµένων της εφαρµογής

Η εκτέλεση του ερωτήµατος που θα µας εµφανίσει τα κατάλληλα σε κάθε πε-


ρίπτωση δεδοµένα, µπορεί να πραγµατοποιηθεί µε πολλούς διαφορετικούς τρόπους.
Σε πλήρη αναλογία µε τα υπόλοιπα αντικείµενα που υποστηρίζονται από την εφαρ-
µογή, ένα ερώτηµα, µπορεί να βρεθεί σε τρεις διαφορετικές προβολές. Η πρώτη
προβολή, είναι η προβολή σχεδίασης (design view), που έχει παρουσιαστεί στις
προηγούµενες παραγράφους, και επιτρέπει την τροποποίηση της δοµής του ερωτή-
µατος, έτσι ώστε να ικανοποιούνται οι ανάγκες που υφίστανται σε κάθε περίπτωση.
Η δεύτερη προβολή, είναι η προβολή φύλλου δεδοµένων (datasheet view), η οποία
εµφανίζει τα περιεχόµενα των πινάκων της βάσης, που επιστρέφονται από το ερώ-
τηµα. Εποµένως, η εκτέλεση ενός ερωτήµατος, δεν είναι τίποτε άλλο, από τη µε-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 235

ταφορά του, σε προβολή φύλλου δεδοµένων. Τέλος, η τρίτη προβολή στην οποία
µπορεί να βρεθεί ένα ερώτηµα, είναι η προβολή SQL (SQL view), η οποία εµφανίζει
τον κώδικα SQL που αντιστοιχεί στο ερώτηµα που χρησιµοποιούµε. Αυτός ο κώδι-
κας δηµιουργείται ανάλογα µε τα χαρακτηριστικά του ερωτήµατος που καθορίζονται
στην προβολή σχεδίασης και είναι αυτός που ουσιαστικά εκτελείται σε κάθε διαδικα-
σία ανάκτησης πληροφοριών από τη βάση δεδοµένων. Στο επόµενο σχήµα παρουσιά-
ζουµε τρεις διαφορετικούς τρόπους µε τους οποίους µπορούµε να εκτελέσουµε ένα
ερώτηµα, δηλαδή να το φέρουµε σε προβολή φύλλου δεδοµένων.

Σχήµα 119 : Μεταφορά ερωτήµατος σε προβολή φύλλου δεδοµένων

Τέλος, τα αποτελέσµατα της εκτέλεσης αυτού του ερωτήµατος, παρουσιάζο-


νται στο επόµενο σχήµα.

Σχήµα 120 : Προεπισκόπηση αποτελεσµάτων ερωτήµατος στην Microsoft Access

Ο κώδικας SQL που αντιστοιχεί στο ερώτηµα που κατασκευάσαµε, µπορεί να


εµφανιστεί µεταφέροντας το ερώτηµα σε προβολή SQL, και για το ερώτηµα του
προηγούµενου παραδείγµατος, παρουσιάζεται στη συνέχεια.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 236

Σχήµα 121 : Προεπισκόπηση ενός ερωτήµατος σε προβολή SQL

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως ο κώδικας SQL που
δηµιουργεί η Access για το κάθε ερώτηµα, µπορεί να υποστεί περαιτέρω επεξερ-
γασία, έτσι ώστε να διαµορφωθεί ανάλογα µε τις επιλογές του χρήστη. Αξίζει
επίσης να σηµειωθεί, πως ανάµεσα στις προβολές σχεδίασης και SQL, υφίσταται
µια αµφίδροµη αλληλεπίδραση. Αυτό σηµαίνει, πως αλλαγές στην προβολή σχε-
δίασης, προκαλούν µεταβολές στη δοµή του κώδικα SQL, και αντίστροφα, τρο-
ποποίηση του κώδικα SQL, προκαλεί αλλαγή στη δοµή του ερωτήµατος, έτσι
όπως αυτή παρουσιάζεται στην προβολή σχεδίασης.

Ολοκληρώνουµε αυτή τη συνοπτική παρουσίαση της διαδικασίας δηµιουργίας


ενός ερωτήµατος σε προβολή σχεδίασης, παρουσιάζοντας δύο παραδείγµατα ερωτη-
µάτων από τη βάση δεδοµένων της εταιρείας.

Παράδειγµα 1ο : Να ανακτηθούν τα επώνυµα και τα ονόµατα των υπαλ-


λήλων της εταιρείας που δουλεύουν στο Research Department.

Προκειµένου να υλοποιήσουµε το συγκεκριµένο ερώτηµα, θα πρέπει να ταυ-


τοποιήσουµε τους πίνακες και τα πεδία που συµµετέχουν σε αυτό. Αυτά τα πεδία,
είναι το LNAME και το FNAME του πίνακα EMPLOYEE, που θα εµφανιστούν
στο τελικό αποτέλεσµα, καθώς και το πεδίο DNAME του πίνακα DEPARTMENT
το οποίο συµµετέχει στη συνθήκη επιλογής DNAME=”Research”. Εφ όσον στην
προκειµένη περίπτωση, η δηµιουργία του ερωτήµατος περιλαµβάνει συνδυασµό
πληροφορίας από περισσότερους από έναν πίνακες, είναι προφανές, πως αυτοί οι
πίνακες θα πρέπει να συνδυαστούν δια της πράξης της σύζευξης (join). Η εφαρµογή
αυτής της πράξης, θα λάβει χώρα, συσχετίζοντας το πεδίο DNUMBER του πίνακα
DEPARTMENT, µε το πεδίο DNO του πίνακα EMPLOYEE. Άλλωστε, όπως
έχουµε αναφέρει στο στάδιο σχεδίασης της δοµής της βάσης δεδοµένων της εται-
ρείας, το πεδίο DNUMBER του πίνακα DEPARTMENT, έχει προστεθεί µε το
όνοµα DNO, στον πίνακα EMPLOYEE, προκειµένου να υλοποιήσει τη συσχέ-
τιση WORKS_FOR που υφίσταται ανάµεσα στους τύπους οντότητας EMPLOYEE
και DEPARTMENT και της οποίας η πολλαπλότητα (cardinality) είναι 1:Ν. Υπό
αυτή την οπτική γωνία, το πεδίο DNO του πίνακα EMPLOYEE θεωρείται ως η
κοινή στήλη των δύο πινάκων, πάνω στην οποία θα υλοποιηθεί η πράξη της σύ-
ζευξης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 237

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως εάν κατά τη σχεδίαση
της δοµής της βάσης, έχουµε δηµιουργήσει τις συσχετίσεις που υφίστανται ανά-
µεσα στους πίνακες που περιέχει, αυτές εµφανίζονται αυτόµατα στο κεντρικό
παράθυρο σχεδίασης των ερωτηµάτων, κάθε φορά που προσθέτουµε νέους πίνα-
κες. Στην αντίθετη περίπτωση, θα πρέπει να εµφανίσουµε τους πίνακες και στη συνέ-
χεια να δηµιουργήσουµε τις συσχετίσεις από µόνοι µας. Η δηµιουργία αυτών των
συσχετίσεων, γίνεται µε τον τρόπο που περιγράψαµε στο οµώνυµο κεφάλαιο, δηλαδή
µε µια διαδικασία drag and drop, που ξεκινά από το πρωτεύον κλειδί του ενός πί-
νακα, και καταλήγει στο αντίστοιχο ξένο κλειδί του άλλου πίνακα. Στην προκειµένη
περίπτωση αυτή η διαδικασία θα συσχετίσει το πεδίο DNUMBER του πίνακα DE-
PARTMENT µε το πεδίο DNO του πίνακα EMPLOYEE.

Μετά τη δηµιουργία της συσχέτισης ανάµεσα στους δύο πίνακες, καθορί-


ζουµε τα πεδία που θα χρησιµοποιηθούν στο ερώτηµα, εφαρµόζοντας τη διαδικα-
σία που περιγράψαµε στις προηγούµενες σελίδες. Αυτό σηµαίνει πως θα πρέπει να
κατεβάσουµε στις δυο πρώτες στήλες του φύλλου δεδοµένων τα πεδία LNAME και
FNAME του πίνακα EMPLOYEE, και το πεδίο DNAME του πίνακα DEPART-
MENT. Στη συνέχεια, θα πρέπει να αφαιρέσουµε το check mark από το check box
της γραµµής «Εµφάνιση» του πεδίου DNAME – καθώς αυτό δεν θέλουµε να εµφα-
νίζεται στο αποτέλεσµα – να επιλέξουµε (προαιρετικά) την αύξουσα ταξινόµηση για
τα ονόµατα και τα επώνυµα των υπαλλήλων, και να τοποθετήσουµε στη γραµµή
«Κριτήρια» του πεδίο DNAME, τη λέξη «Research», καθώς αυτό είναι το κριτήριο
επιλογής για τις εγγραφές που θέλουµε να ανακτήσουµε. Το σύνολο όλων αυτών των
παραµέτρων που θα πρέπει να καθορίσουµε για να υλοποιήσουµε το συγκεκριµένο
ερώτηµα, παρουσιάζεται στο επόµενο σχήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 238

Σχήµα 122 : Προεπισκόπηση του ερωτήµατος σε προβολή σχεδίασης

Εάν µεταφέρουµε αυτό το ερώτηµα σε προβολή SQL, µπορούµε να δούµε τον


κώδικα σε γλώσσα SQL, που αντιστοιχεί στις παραµέτρους του ερωτήµατος που
έχουµε καθορίσει. Αυτός ο κώδικας έχει τη µορφή

SELECT EMPLOYEE.LName, EMPLOYEE.Fname


FROM DEPARTMENT INNER JOIN EMPLOYEE ON DE-
PARTMENT.DNumber = EMPLOYEE.DNO
WHERE (((DEPARTMENT.DName)="Research"));

Παρατηρώντας τον παραπάνω κώδικα δεν είναι δύσκολο να διαπιστώσουµε πως


εκτός από την πρόταση WHERE στην οποία περιλαµβάνεται η συνθήκη επιλογής

DEPARTMENT.DName="Research";
υπάρχει και η φράση

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 239

DEPARTMENT INNER JOIN EMPLOYEE ON DEPART-


MENT.DNumber = EMPLOYEE.DNO
η οποία αναφέρεται στη σύζευξη των δύο πινάκων έτσι ώστε να είναι δυνατή η συν-
δυασµένη ανάκτηση πληροφορίας και από τους δύο πίνακες. Η φράση INNER
JOIN …… ON χρησιµοποιείται από την Access κάθε φορά που λαµβάνει χώρα σύ-
ζευξη δύο ή περισσοτέρων πινάκων, αλλά εάν το επιθυµούµε, µπορούµε κατά τα
γνωστά, να τοποθετήσουµε τη συνθήκη σύζευξης στην πρόταση WHERE και χρησι-
µοποιώντας το λογικό τελεστή AND. Έτσι η παραπάνω πρόταση SQL µπορεί να
γραφεί και µε τη µορφή

SELECT EMPLOYEE.LName, EMPLOYEE.Fname


FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT.DNUMBER=EMPLOYEE.DNO
AND DEPARTMENT.DName="Research";
που είναι ισοδύναµη µε αυτή που δηµιουργεί η Access και οδηγεί ακριβώς στο ίδιο
αποτέλεσµα.

Παράδειγµα 2ο : Για κάθε PROJECT που γίνεται στο Stafford, να βρεθεί


ο κωδικός του, ο κωδικός του τµήµατος που το παρακολουθεί, καθώς και το
επώνυµο, η διεύθυνση, και η ηµεροµηνία γέννησης του MANAGER αυτού του
τµήµατος.

Στο παράδειγµα αυτό, η σχεδίαση του ερωτήµατος, περιλαµβάνει τη χρήση


τριών πινάκων: του πίνακα PROJECT από τον οποίο θα χρησιµοποιήσουµε τα πεδία
PLOCATION και PNUMBER, του πίνακα DEPARTMENT από τον οποίο θα χρη-
σιµοποιήσουµε τα πεδία DNUMBER και MGRSSN, και τον πίνακα EMPLOYEE,
από τον οποίο θα χρησιµοποιήσουµε τα πεδία LNAME, ADDRESS, BDATE και
SSN.

Από το µοντέλο οντοτήτων συσχετίσεων της βάσης δεδοµένων της εταιρείας


που έχει µελετηθεί στο οµώνυµο κεφάλαιο, µπορούµε να ανακτήσουµε τους τύπους
συσχέτισης που υφίστανται ανάµεσα στους τύπους οντότητας EMPLOYEE, DE-
PARTMENT και PROJECT. Πιο συγκεκριµένα, ανάµεσα στους τύπους οντότητας
EMPLOYEE και PROJECT υφίσταται η συσχέτιση MANAGES µε πολλαπλότητα
1:1 – η συσχέτιση WORKS_FOR δεν θα µας απασχολήσει εδώ – ενώ ανάµεσα
στους τύπους οντότητα DEPARTMENT και PROJECT υφίσταται η συσχέτιση
CONTROLS µε πολλαπλότητα 1:N. Αυτός είναι και ο λόγος που εκτός από τα πεδία
των οµώνυµων πινάκων που εµπλέκονται άµεσα στο ερώτηµα, θα πρέπει να χρησι-
µοποιήσουµε και τα πεδία MGRSSN του πίνακα EMPLOYEE και DNUMBER του
πίνακα DEPARTMENT, επειδή αυτά συµµετέχουν στις συσχετίσεις που υφίστανται
ανάµεσα στους τρεις πίνακες.

Προκειµένου να απαντήσουµε στο ερώτηµα αυτό, θα πρέπει κατά τα γνωστά


να δηµιουργήσουµε τις συσχετίσεις ανάµεσα στους πίνακες – εάν αυτές δεν υπάρχουν
– και στη συνέχεια να κατεβάσουµε στις στήλες του φύλλου δεδοµένων, όλα τα πεδία
των πινάκων που ζητούνται από το συγκεκριµένο ερώτηµα. Τα πεδία αυτά είναι το

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 240

DNUMBER από τον πίνακα DEPARTMENT, τα LNAME, SALARY και BDATE


από τον πίνακα EMPLOYEE, και τα PNUMBER και PLOCATION από τον πί-
νακα PROJECT. Τα πεδία αυτά θα πρέπει να εµφανιστούν στο τελικό αποτέλεσµα,
και για το λόγο αυτό διατηρούµε επιλεγµένο το check box που βρίσκεται στη γραµµή
«Εµφάνιση» για αυτά τα πεδία. Εάν το επιθυµούµε, µπορούµε προαιρετικά να καθο-
ρίσουµε εάν κάποιο ή όλα τα πεδία, θα εµφανίζονται µε βάση κάποιο τύπο ταξινόµη-
σης. Τέλος, στη γραµµή «Κριτήρια» του πεδίου PLOCATION, καταχωρούµε τη
λέξη Stafford, που είναι και το κριτήριο αναζήτησης των εγγραφών από τους πίνακες
της βάσης. Το επόµενο σχήµα, παρουσιάζει το συγκεκριµένο ερώτηµα, σε προβολή
σχεδίασης.

Σχήµα 123 : Προεπισκόπηση του ερωτήµατος σε προβολή σχεδίασης

Προκειµένου να ανακτήσουµε τις εγγραφές που επιστρέφονται από το παρα-


πάνω ερώτηµα, θα πρέπει να το µεταφέρουµε σε προβολή φύλλου δεδοµένων. Στην
περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο
διαλόγου, το οποίο περιλαµβάνει τις εγγραφές των πινάκων της βάσης που πληρούν
τα κριτήρια του ερωτήµατος και επιστρέφονται από αυτό.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 241

Σχήµα 124 : Τα αποτελέσµατα που επιστρέφονται από το ερώτηµα µετά την εκτέλεσή του

Τέλος, ο κώδικας SQL που αντιστοιχεί στο εν λόγω ερώτηµα, παρουσιάζεται στη συ-
νέχεια.

SELECT
DEPARTMENT.DNumber, EMPLOYEE.LName, EMPLOYEE.Salary,
EMPLOYEE.BDate, PROJECT.[Project Number],
PROJECT.[Project Location]

FROM
(EMPLOYEE INNER JOIN DEPARTMENT
ON EMPLOYEE.SSN = DEPARTMENT.MGRSSN) INNER JOIN PROJECT
ON DEPARTMENT.DNumber = PROJECT.DNUM

WHERE (((PROJECT.[Project Location])="Stafford"));

και σύµφωνα µε τα όσα αναφέραµε στις προηγούµενες σελίδες µπορεί να µετασχηµα-


τιστεί στην πιο γνωστή µας µορφή

SELECT
DEPARTMENT.DNumber, EMPLOYEE.LName, EMPLOYEE.Salary,
EMPLOYEE.BDate, PROJECT.[Project Number],
PROJECT.[Project Location]

FROM
EMPLOYEE, DEPARTMENT, PROJECT

WHERE
EMPLOYEE.SSN = DEPARTMENT.MGRSSN AND
DEPARTMENT.DNumber = PROJECT.DNUM AND
PROJECT.[Project Location])="Stafford"

Από τα παραδείγµατα που παρουσιάστηκαν στις προηγούµενες ενότητες, είναι


προφανές, πως εάν ανάµεσα στους πίνακες του ερωτήµατος, υπάρχουν Μ συσχε-
τίσεις ενώ τα δεδοµένα των πινάκων που θέλουµε να ανακτήσουµε, υπακούουν
σε Ν κριτήρια, τότε, το πλήθος των συνθηκών επιλογής που θα περάσουµε ως
ορίσµατα στην πρόταση WHERE, θα είναι Μ+Ν. Αυτό συµβαίνει, διότι ο καθορι-
σµός των κριτηρίων για τα δεδοµένα προς ανάκτηση δεν είναι αρκετός – απαιτείται

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 242

και η καταχώρηση των συνθηκών σύζευξης (join conditions), έτσι ώστε να είναι
δυνατός ο συνδυασµός της πληροφορίας, από περισσότερους από έναν πίνακες.

∆ΗΜΙΟΥΡΓΙΑ ΕΡΩΤΗΜΑΤΩΝ ΜΕ ΤΗ ΧΡΗΣΗ Ο∆ΗΓΟΥ

Σε πλήρη αναλογία µε τη δηµιουργία των άλλων βασικών αντικειµένων της


Microsoft Access, η δηµιουργία ενός νέου ερωτήµατος, µπορεί να γίνει µε τη χρήση
του κατάλληλου προγράµµατος καθοδήγησης. Μέσα από το πρόγραµµα αυτό, ο
χρήστης έχει τη δυνατότητα να επιλέξει τα πεδία των πινάκων που θέλει να χρησι-
µοποιήσει στο ερώτηµα, και τον τρόπο µε τον οποίο θα λαµβάνει χώρα η εµφά-
νιση των αποτελεσµάτων. Ο καθορισµός αυτών των χαρακτηριστικών πραγµατο-
ποιείται µέσα από µια σειρά κατάλληλα διαµορφωµένων διαλόγων αλληλεπίδρασης,
και στη συνέχεια, η Access, δηµιουργεί το ερώτηµα, ανάλογα µε τις επιλογές του
χρήστη.

Ας υποθέσουµε για παράδειγµα, πως για κάθε ένα από τα τµήµατα της
εταιρείας, θέλουµε να εµφανίσουµε το όνοµά του καθώς και το ονοµατεπώνυµο
του MANAGER που το διοικεί. Το ερώτηµα αυτό, µπορεί ασφαλώς να σχεδιαστεί
από το χρήστη, σύµφωνα µε τα όσα αναφέραµε στις προηγούµενες σελίδες – στην
περίπτωσή µας όµως, θα το σχεδιάσουµε µε τη βοήθεια του οδηγού ερωτηµάτων. Για
να το κάνουµε αυτό, µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης της βάσης
δεδοµένων, και από εκεί επιλέγουµε Ερωτήµατα Æ ∆ηµιουργία Æ Οδηγός Απλών
Ερωτηµάτων. Στη συνέχεια, πατάµε το κουµπί OK, κάτι που έχει ως αποτέλεσµα να
εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο διαλόγου:

Σχήµα 125 : Εκκίνηση του οδηγού ερωτηµάτων της Microsoft Access

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 243

Αυτό το παράθυρο είναι εντελώς ανάλογο µε εκείνο που χρησιµοποιήσαµε


κατά τη διαδικασία σχεδίασης µιας φόρµας, και η βασική του λειτουργία είναι ο κα-
θορισµός των πεδίων των πινάκων της βάσης που θα συµµετάσχουν στο νέο ερώ-
τηµα. Στην περίπτωσή µας, αυτά τα πεδία είναι το πεδίο DNAME του πίνακα DE-
PARTMENT και τα πεδία LNAME, FNAME και MINIT του πίνακα EM-
PLOYEE. Τα πεδία αυτά θα πρέπει να µεταφερθούν στο πλαίσιο λίστας που βρίσκε-
ται στο δεξί τµήµα του πλαισίου διαλόγου, κάτι που όπως έχουµε ήδη αναφέρει, γίνε-
ται µε τα τέσσερα κουµπιά που βρίσκονται ανάµεσα στα δύο πλαίσια λίστας και το
ένα κάτω από το άλλο. Αρχικά επιλέγουµε το πεδίο DNAME του πίνακα DE-
PARTMENT και χρησιµοποιώντας το πρώτο από τα τέσσερα κουµπιά το µεταφέ-
ρουµε στο δεξί πλαίσιο λίστας του παραθύρου. Στη συνέχεια εµφανίζουµε τα πεδία
του πίνακα EMPLOYEE και µεταφέρουµε µε τον ίδιο τρόπο τα πεδία LNAME,
FNAME και MINIT. Στην περίπτωση αυτή τα περιεχόµενα του πλαισίου διαλόγου,
θα είναι αυτά που παρουσιάζονται στο επόµενο σχήµα:

Σχήµα 126 : Καθορισµός των πεδίων των πινάκων που θα χρησιµοποιηθούν στο νέο ερώτηµα

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε ένα όνοµα για
το νέο ερώτηµα, και να διαλέξουµε εάν θα το ανοίξουµε σε προβολή φύλλου δεδο-
µένων – για να δούµε τα αποτελέσµατα που θα µας επιστρέψει – ή εάν θα µεταφερ-
θούµε σε προβολή σχεδίασης – για να τροποποιήσουµε τη δοµή του – κάτι που γίνε-
ται όταν το ερώτηµα είναι αρκετά πολύπλοκο και η σχεδίασή του απαιτεί τον καθορι-
σµό και άλλων παραµέτρων που δεν είναι δυνατό να πραγµατοποιηθεί δια της χρήσης
του προγράµµατος καθοδήγησης. Στο παράδειγµά µας το όνοµα που θα αποδώσουµε
στο ερώτηµα θα είναι το DEPT-MANAGERS ενώ η προβολή την οποία θα επιλέ-
ξουµε, θα είναι η προβολή σχεδίασης, όπως φαίνεται από το επόµενο πλαίσιο διαλό-
γου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 244

Σχήµα 127 : Ολοκλήρωση της σχεδίασης του ερωτήµατος δια της χρήσης του οδηγού ερωτηµάτων

Στο σηµείο αυτό έχουµε καθορίσει όλες τις παραµέτρους που είναι αναγκαίες
για τη δηµιουργία του νέου ερωτήµατος. Εάν τώρα ανοίξουµε το ερώτηµα σε προ-
βολή φύλλου δεδοµένων, θα εµφανιστούν στην οθόνη του υπολογιστή µας τα αποτε-
λέσµατα του ερωτήµατος, δηλαδή το όνοµα του κάθε τµήµατος και το ονοµατεπώ-
νυµο του MANAGER που το διοικεί.

Σχήµα 128 : Μεταφορά του νέου ερωτήµατος σε προβολή φύλλου δεδοµένων

Ο κώδικας SQL που αντιστοιχεί σε αυτό το ερώτηµα, εµφανίζεται εάν µετα-


φερθούµε στην οµώνυµη προβολή, και παρουσιάζεται στη συνέχεια.

SELECT [DEPARTMENT].[DName], [EMPLOYEE].[FName], [EM-


PLOYEE].[MInit], [EMPLOYEE].[LName]
FROM EMPLOYEE INNER JOIN DEPARTMENT ON
[EMPLOYEE].[SSN] =[DEPARTMENT].[MGRSSN];

Τέλος, η προβολή σχεδίασης του εν λόγω ερωτήµατος, περιλαµβάνει κατά τα


γνωστά τους πίνακες EMPLOYEE και DEPARTMENT, οι οποίοι συσχετίζονται

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 245

µέσω της συνθήκης EMPLOYEE.SSN = DEPARTMENT.MGRSSN. Ας σηµειωθεί


πως εάν η δηµιουργία του ερωτήµατος λάβει χώρα µετά τον ορισµό των συσχετίσεων
ανάµεσα στους πίνακες της βάσης, η γραµµή που ενώνει αυτά τα πεδία των δύο πινά-
κων και περιγράφει τη συσχέτιση που υφίσταται ανάµεσά τους, θα εµφανιστεί από
µόνη της και χωρίς τη µεσολάβηση του χρήστη.

Σχήµα 129 : Μεταφορά του νέου ερωτήµατος σε προβολή σχεδίασης

∆ΗΜΙΟΥΡΓΙΑ ΕΡΩΤΗΜΑΤΩΝ ∆ΙΑΣΤΑΥΡΩΣΗΣ

Όπως έχει ήδη αναφερθεί, τα ερωτήµατα διασταύρωσης χρησιµοποιούνται


για την εµφάνιση συνοπτικών τιµών (αθροίσµατα, καταµετρήσεις και µέσοι
όροι), δυνατότητα η οποία είναι ιδιαίτερα χρήσιµη σε περιπτώσεις δηµιουργίας φύλ-
λων δεδοµένων που να εµφανίζουν συγκεντρωτικά αποτελέσµατα. Στο παράδειγµά
µας θα κατασκευάσουµε ένα ερώτηµα διασταύρωσης, που για κάθε τµήµα και για
κάθε έργο, θα εµφανίζει το σύνολο των ωρών που οι υπάλληλοι του τµήµατος ερ-
γάζονται σε αυτό.

Επειδή στη γενική περίπτωση τα ερωτήµατα διασταύρωσης δηµιουργούνται


µε βάση κάποιο πίνακα ή κάποιο ερώτηµα, είναι κοινή πρακτική η δηµιουργία ενδιά-
µεσων πινάκων ή ερωτηµάτων, που θα περιέχουν τα δεδοµένα εκείνα, πάνω στα
οποία θα εφαρµοσθεί το ερώτηµα διασταύρωσης. Για το λόγο αυτό, πριν τη δηµιουρ-
γία του ερωτήµατος για το παράδειγµά µας, θα πρέπει να κατασκευάσουµε ένα ερώ-
τηµα που για κάθε τµήµα να εµφανίζει τα ονοµατεπώνυµα των υπαλλήλων που
ανήκουν σε αυτό, καθώς επίσης, το όνοµα του έργου στο οποίο εργάζονται, και το
πλήθος των ωρών ανά εβδοµάδα, που εργάζονται σε αυτό το έργο. Το ερώτηµα
αυτό φέρει το όνοµα DEP_PRJ_EMP και αντιστοιχεί στην προβολή σχεδίασης που
παρουσιάζεται στο επόµενο σχήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 246

Σχήµα 130 : ∆ηµιουργία ενδιάµεσου ερωτήµατος που θα χρησιµοποιηθεί για την κατασκευή του ερω-
τήµατος διασταύρωσης

Ο κώδικας SQL που αντιστοιχεί στο ερώτηµα αυτό έχει τη µορφή

SELECT DEPARTMENT.DName, EMPLOYEE.LName, EMPLOYEE.FName,


PROJECT.[Project Name], WORKS_ON.HOURS
FROM PROJECT INNER JOIN ((DEPARTMENT INNER JOIN EMPLOYEE
ON DEPARTMENT.DNumber = EMPLOYEE.DNO) INNER JOIN
WORKS_ON ON EMPLOYEE.SSN = WORKS_ON.ESSN) ON
PROJECT.[Project Number] = WORKS_ON.PNO;

ενώ τα αποτελέσµατα που επιστρέφει εάν το µεταφέρουµε σε προβολή φύλλου δεδο-


µένων, παρουσιάζονται στον επόµενο πίνακα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 247

Σχήµα 131 : Μεταφορά του ενδιάµεσου ερωτήµατος σε προβολή φύλλου δεδοµένων

∆εν είναι δύσκολο να διαπιστώσει κανείς πως τα αποτελέσµατα αυτού του


ερωτήµατος είναι βεβαίως σωστά, αλλά διατεταγµένα µε τέτοιο τρόπο ώστε να µην
είναι εύκολο να διαπιστώσει κανείς µε µια πρώτη µατιά σε ποια έργα απασχολείται ο
κάθε υπάλληλος. Για το λόγο αυτό, βασιζόµενοι στο ερώτηµα που µόλις δηµιουργή-
σαµε, θα κατασκευάσουµε ένα ερώτηµα διασταύρωσης που θα εµφανίζει τα ονόµατα
των έργων σε γραµµές, τα επώνυµα των υπαλλήλων σε στήλες, και στην τοµή
κάθε γραµµής µε κάθε στήλη, θα περιέχει το πλήθος των ωρών ανά εβδοµάδα,
που ο συγκεκριµένος υπάλληλος απασχολείται στο συγκεκριµένο έργο. Ταυτό-
χρονα, τα ονόµατα των υπαλλήλων, θα είναι διατεταγµένα, µε βάση το τµήµα στο
οποίο ανήκουν.

Προκειµένου να υλοποιήσουµε αυτό το ερώτηµα, θα πρέπει να µεταφερθούµε


στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, και από εκεί να επιλέ-
ξουµε Ερωτήµατα Æ ∆ηµιουργία Æ Οδηγός Ερωτηµάτων ∆ιασταύρωσης. Στη
συνέχεια, από το παράθυρο που ακολουθεί, θα εµφανίσουµε τον κατάλογο µε τα ερω-
τήµατα της βάσης, και θα επιλέξουµε το ερώτηµα DEP_PRJ_EMP, καθώς, το ερώ-
τηµα διασταύρωσης που θα δηµιουργηθεί, θα βασιστεί πάνω σε αυτό το ερώτηµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 248

Σχήµα 132 : Εκκίνηση του οδηγού ερωτηµάτων διασταύρωσης

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε τα πεδία του


ενδιάµεσου ερωτήµατος που θα τοποθετηθούν στις γραµµές και στις στήλες του
ερωτήµατος διασταύρωσης. Σύµφωνα µε τα όσα αναφέραµε στις προηγούµενες πα-
ραγράφους, τα δεδοµένα των πινάκων θα εµφανιστούν οµαδοποιηµένα κατά
τµήµα και κατά έργο. Για το λόγο αυτό, µεταφερόµαστε στο επόµενο παράθυρο
χρησιµοποιώντας το οµώνυµο κουµπί, και µεταφέρουµε στον κατάλογο των επιλεγ-
µένων πεδίων το DNAME και το Project Name, ακολουθώντας τη γνωστή πια δια-
δικασία. Εάν η µεταφορά των πεδίων γίνει µε τη σειρά που παρουσιάζεται στο επό-
µενο σχήµα – δηλαδή πρώτα µεταφέρουµε το DNAME και µετά το Project Name,
τότε τα δεδοµένα που θα περιλαµβάνονται στο τελικό αποτέλεσµα, θα είναι ταξινο-
µηµένα, πρώτα ως προς το όνοµα του τµήµατος και µετά ως προς το όνοµα του
έργου το οποίο εποπτεύεται από το κάθε τµήµα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 249

Σχήµα 133 : Καθορισµός των πεδίων που θα εµφανιστούν στις γραµµές του ερωτήµατος διασταύρω-
σης

Μετά τον καθορισµό των πεδίων που θα εµφανιστούν στις γραµµές του απο-
τελέσµατος, θα πρέπει να καθορίσουµε και τα πεδία που θα εµφανιστούν στις στήλες,
καθώς το τελικό αποτέλεσµα θα έχει τη µορφή φύλλου δεδοµένων. Σύµφωνα µε τις
προδιαγραφές του ερωτήµατος, οι στήλες του αποτελέσµατος θα περιέχουν τα
επώνυµα των υπαλλήλων, ένα επώνυµο σε κάθε στήλη. Για το λόγο αυτό, µεταφε-
ρόµαστε στο επόµενο παράθυρο, και επιλέγουµε το πεδίο LNAME ως το πεδίο που
επιθυµούµε να εµφανίζεται στην κεφαλίδα της κάθε στήλης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 250

Σχήµα 134 : Καθορισµός των πεδίων που θα εµφανιστούν στις στήλες του ερωτήµατος διασταύρωσης

Το τελευταίο στοιχείο που θα πρέπει να καθορίσουµε για να ολοκληρώσουµε


την κατασκευή του ερωτήµατος διασταύρωσης, είναι το πεδίο του πίνακα που θα
εµφανίζεται στην τοµή της κάθε γραµµής µε την κάθε στήλη. Επειδή στο συγκε-
κριµένο παράδειγµα, για κάθε υπάλληλο αναζητούµε το πλήθος των ωρών που εργά-
ζεται σε κάθε έργο, θα επιλέξουµε ως τέτοιο πεδίο, το πεδίο HOURS όπως φαίνεται
στο ακόλουθο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 251

Σχήµα 135 : Καθορισµός του πεδίου που θα εµφανιστεί στην τοµή της κάθε γραµµής µε την κάθε
στήλη

Στο τελευταίο βήµα της διαδικασίας, θα πρέπει κατά τα γνωστά να αποδώ-


σουµε στο ερώτηµα κάποιο όνοµα και να καθορίσουµε εάν θα το µεταφέρουµε σε
προβολή σχεδίασης ή σε προβολή φύλλου δεδοµένων.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 252

Σχήµα 136 : Ολοκλήρωση της σχεδίασης του ερωτήµατος διασταύρωσης

Εάν επιλέξουµε να φέρουµε το ερώτηµα σε προβολή φύλλου δεδοµένων, θα


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

Σχήµα 137 : Μεταφορά του ερωτήµατος διασταύρωσης σε προβολή φύλλου δεδοµένων

Από το παραπάνω σχήµα διαπιστώνουµε πως οι εργαζόµενοι των τµηµάτων της


εταιρείας είναι ταξινοµηµένοι κατά τµήµα, και οργανωµένοι σε στήλες, µε την

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 253

κάθε στήλη να περιέχει το πλήθος των ωρών που ο κάθε εργαζόµενος απασχολεί-
ται σε κάθε έργο.

Εάν µεταφέρουµε αυτό το ερώτηµα σε προβολή SQL θα εµφανιστεί ο κώδικας

TRANSFORM Min(DEP_PRJ_EMP.HOURS) AS Μικρότερη_τιµήΤουHOURS


SELECT DEP_PRJ_EMP.DName, DEP_PRJ_EMP.[Project Name]
FROM DEP_PRJ_EMP
GROUP BY DEP_PRJ_EMP.DName, DEP_PRJ_EMP.[Project Name]
PIVOT DEP_PRJ_EMP.LName;

ο οποίος εκτός από τις απλές εντολές της SQL περιέχει και άλλες προτάσεις που είναι
κατανοητές µόνο από τη Microsoft Access, και όχι από άλλα σχεσιακά συστήµατα
διαχείρισης βάσεων δεδοµένων. Επίσης στην προβολή σχεδίασης αυτού του ερωτή-
µατος εµφανίζονται και άλλες ιδιότητες που δεν περιλαµβάνονται στη διαδικασία
σχεδίασης απλών ερωτηµάτων, όπως είναι τα «Συγκεντρωτικά Στοιχεία» και η
«∆ιασταύρωση Πινάκων».

Σχήµα 138 : Χαρακτηριστικές ιδιότητες πεδίων πινάκων που συµµετέχουν σε ερώτηµα διασταύρωσης

∆ΗΜΙΟΥΡΓΙΑ ΕΡΩΤΗΜΑΤΩΝ ΠΟΥ ΑΝΑΖΗΤΟΥΝ ∆ΙΠΛΟΤΥΠΕΣ ΚΑΙ


ΑΤΑΙΡΙΑΣΤΕΣ ΕΓΓΡΑΦΕΣ

Μία χρήσιµη δυνατότητα που παρέχει η Microsoft Access, είναι η δηµιουργία


ειδικού τύπου ερωτηµάτων, µε τη βοήθεια των οποίων µπορούµε να αναζητήσουµε
διπλότυπες ή αταίριαστες εγγραφές. Για παράδειγµα µπορούµε να ζητήσουµε από
την εφαρµογή, να εµφανίσει όλες τις γραµµές ενός πίνακα, για τις οποίες κάποια πε-
δία έχουν τις ίδιες τιµές. Η ύπαρξη τέτοιων γραµµών που περιέχουν επαναλαµβα-
νόµενη πληροφορία ενδέχεται να δηµιουργήσει προβλήµατα όσον αφορά τη συνέ-
πεια των δεδοµένων της εφαρµογής, και για το λόγο αυτό είναι κοινή πρακτική, η
διαγραφή των διπλότυπων εγγραφών αµέσως µετά τον εντοπισµό τους στους πίνα-
κες της βάσης. Η δηµιουργία ερωτηµάτων που να εντοπίζουν διπλότυπες εγγραφές
γίνεται χρησιµοποιώντας το κατάλληλο πρόγραµµα καθοδήγησης της Microsoft Ac-
cess, διαδικασία, η οποία ωστόσο δεν θα µας απασχολήσει στις επόµενες σελίδες.

Από την άλλη πλευρά, οι αταίριαστες εγγραφές αναφέρονται σε εγγραφές


κάποιου πίνακα, για τις οποίες δεν υπάρχουν σχετικές εγγραφές στους άλλους πί-
νακες της βάσης. Ως ένα παράδειγµα αταίριαστων εγγραφών, αναφέρουµε το σύ-
νολο των εγγραφών του πίνακα EMPLOYEE, για τις οποίες δεν υπάρχουν σχετι-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 254

κές εγγραφές στον πίνακα DEPENDENT. Αλλά αυτοί ουσιαστικά είναι οι υπάλλη-
λοι της εταιρείας οι οποίοι δεν έχουν προστατευόµενα µέλη. Ας υλοποιήσουµε
λοιπόν το ερώτηµα αυτό, χρησιµοποιώντας το πρόγραµµα καθοδήγησης της Micro-
soft Access, όσον αφορά τη δηµιουργία ερωτηµάτων.

Ξεκινώντας τη διαδικασία δηµιουργίας νέου ερωτήµατος µε τον τρόπο που


περιγράψαµε στις προηγούµενες σελίδες, εµφανίζουµε το παράθυρο «∆ηµιουργία
Ερωτήµατος», και από εκεί επιλέγουµε «Οδηγός εύρεσης αταίριαστων». Στη συ-
νέχεια πατάµε το κουµπί OK, διαδικασία, η οποία έχει ως αποτέλεσµα, την εµφάνιση
επί της οθόνης του υπολογιστή µας, του επόµενου πλαισίου διαλόγου:

Σχήµα 139 : Εκκίνηση του ερωτήµατος αναζήτησης αταίριαστων εγγραφών

Σε αυτό το παράθυρο, θα πρέπει να καθορίσουµε τον πίνακα του οποίου οι εγ-


γραφές δεν συσχετίζονται µε τις εγγραφές άλλων πινάκων της βάσης δεδοµένων. Εί-
ναι προφανές, πως οι εγγραφές αυτού του πίνακα, θα εµφανιστούν και στο τελικό
αποτέλεσµα του ερωτήµατος. Στο παράδειγµά µας, αυτές οι εγγραφές ανήκουν στον
πίνακα EMPLOYEE, καθώς το ερώτηµα θα επιστρέψει τα στοιχεία των υπαλλή-
λων της εταιρείας, οι οποίοι δεν διαθέτουν προστατευόµενα µέλη. Για το λόγο
αυτό, επιλέγουµε τον πίνακα EMPLOYEE από τους διαθέσιµους πίνακες της βάσης
δεδοµένων, και χρησιµοποιώντας το πλήκτρο «Επόµενο» µεταφερόµαστε στην επό-
µενη οθόνη.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 255

Σχήµα 140 : Καθορισµός του πίνακα µε τον οποίο συσχετίζεται ο πίνακας EMPLOYEE

Αυτό το δεύτερο πλαίσιο διαλόγου, µας επιτρέπει να καθορίσουµε τον πίνακα


της εφαρµογής µε τον οποίο συσχετίζεται ο πίνακας EMPLOYEE. Επειδή στο παρά-
δειγµά µας, ζητούµε τις εγγραφές του πίνακα EMPLOYEE για τις οποίες δεν υπάρ-
χουν σχετικές εγγραφές στον πίνακα DEPENDENT, θα επιλέξουµε ως δεύτερο πί-
νακα για τη δηµιουργία του ερωτήµατος, τον πίνακα DEPENDENT. Εκτός όµως από
τον πίνακα αυτό κάθε αυτό, θα πρέπει να καθορίσουµε και την κοινή στήλη των δύο
πινάκων πάνω στην οποία βασίζεται η πράξη της σύζευξης που επιτρέπει τη συνδυα-
σµένη ανάκτηση πληροφορίας και από τους δύο πίνακες. Στο παράδειγµά µας η κοινή
στήλη των δύο πινάκων είναι ο κωδικός του υπαλλήλου ο οποίος στον πίνακα EM-
PLOYEE εµφανίζεται µε το όνοµα SSN, ενώ στον πίνακα DEPENDENT εµφανίζε-
ται µε το όνοµα ESSN. Αυτό το κοινό πεδίο των δύο πινάκων µπορούµε να το καθο-
ρίσουµε χρησιµοποιώντας την επόµενη οθόνη του προγράµµατος καθοδήγησης, η
οποία εµφανίζεται στο σχήµα που ακολουθεί.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 256

Σχήµα 141 : Καθορισµός του κοινού πεδίου των συσχετιζόµενων πινάκων δια της χρήσης του οποίου
ορίζεται η πράξη της σύζευξης που υφίσταται ανάµεσά τους

∆εν είναι δύσκολο να διαπιστώσει κανείς, πως η διαδικασία συσχετισµού


αυτών των δύο πεδίων, περιλαµβάνει την επιλογή του κάθε πεδίου στον κάθε ένα
από τους δύο πίνακες, και στη συνέχεια τη συσχέτισή τους, πού ορίζεται πατώ-
ντας το κουµπί µε το σύµβολο «Ù» που βρίσκεται ανάµεσα στα πλαίσια λίστας
που περιέχουν τα πεδία των δύο πινάκων. Κάνοντας αυτή τη διαδικασία, θα λάβει
χώρα εµφάνιση των συσχετισµένων πεδίων στο πλαίσιο κειµένου µε τίτλο «Πεδία
που ταιριάζουν». Στο παράδειγµά µας, και όπως µπορούµε εύκολα να διαπιστώ-
σουµε από το παραπάνω σχήµα, η συσχέτιση των πεδίων SSN και ESSN συµβολίζε-
ται µε «SSNÙESSN».

Ή τελευταία παράµετρος που θα πρέπει να καθορίσουµε προκειµένου να ολο-


κληρώσουµε τη δηµιουργία του ερωτήµατος, είναι το σύνολο των πεδίων του πί-
νακα EMPLOYEE τα οποία θα εµφανίζονται στο τελικό αποτέλεσµα. Ας υποθέ-
σουµε για παράδειγµα, πως για εκείνους τους υπαλλήλους της εταιρείας για τους
οποίους δεν υφίστανται προστατευόµενα µέλη, επιθυµούµε να εµφανίσουµε το ονο-
µατεπώνυµό τους και το µισθό τους. Ο καθορισµός αυτών των πεδίων µπορεί να
γίνει χρησιµοποιώντας την επόµενη οθόνη µε τον τρόπο που ακολουθεί στη συνέχεια.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 257

Σχήµα 142 : Καθορισµός των πεδίων του πίνακα EMPLOYEE που θα εµφανιστούν κατά την εκτέ-
λεση του ερωτήµατος που κατασκευάζουµε

Έχοντας καθορίσει και αυτή την πληροφορία, η σχεδίαση του ερωτήµατος


έχει ολοκληρωθεί, και το µόνο που αποµένει είναι η αποθήκευσή του µε κάποιο
όνοµα, και η εκτέλεσή του, προκειµένου να δούµε τα αποτελέσµατα που επιστρέ-
φονται από αυτό. Ο καθορισµός του ονόµατος του ερωτήµατος και της προβολής
στην οποία επιθυµούµε να το µεταφέρουµε, πραγµατοποιούνται χρησιµοποιώντας το
πλαίσιο διαλόγου του επόµενου σχήµατος.

Σχήµα 142 : Ολοκλήρωση της κατασκευής του ερωτήµατος αταίριαστων εγγραφών

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 258

Μεταφέροντας το ερώτηµα σε προβολή φύλλου δεδοµένων, θα λάβουµε τα αποτελέ-


σµατα του επόµενου πίνακα, τα οποία αναφέρονται στους υπαλλήλους της εταιρείας
που δεν έχουν προστατευόµενα µέλη.

Σχήµα 143 : Μεταφορά του ερωτήµατος αταίριαστων εγγραφών που κατασκευάσαµε, σε προβολή
φύλλου δεδοµένων

ΤΟ ΠΕΡΙΒΑΛΛΟΝ ∆ΟΜΗΣΗΣ ΕΚΦΡΑΣΕΩΝ

Σε ορισµένες περιπτώσεις δηµιουργίας πολύπλοκων ερωτηµάτων, οι εκφρά-


σεις που συµπεριλαµβάνονται σε αυτά, µπορεί να είναι αρκετά σύνθετες, και να
µην είναι δυνατό να κατασκευαστούν µέσα από το περιβάλλον σχεδίασης του
ερωτήµατος. Για τις ειδικές αυτές περιπτώσεις, η Microsoft Access µας παρέχει ένα
ειδικό πλαίσιο διαλόγου, το οποίο επιτρέπει τη δηµιουργία σύνθετων εκφράσεων,
όσο πολύπλοκες και αν είναι.

Προκειµένου να εµφανίσουµε το παράθυρο της δόµησης εκφράσεων, θα πρέ-


πει να µεταφέρουµε το δείκτη του ποντικιού στη γραµµή «Κριτήρια» του πεδίου για
το οποίο θέλουµε να δηµιουργήσουµε την έκφραση, να πατήσουµε το δεξί πλήκτρο
του ποντικιού, και από το αναδυόµενο µενού που θα εµφανιστεί, να ενεργοποιήσουµε
την επιλογή «∆όµηση». Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολο-
γιστή µας το επόµενο πλαίσιο διαλόγου:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 259

Σχήµα 144 : Το περιβάλλον δόµησης εκφράσεων της Microsoft Access

Στο παράδειγµα του παραπάνω παραθύρου, το πεδίο για το οποίο επιθυµούµε


να δηµιουργήσουµε την έκφραση, είναι το πεδίο SSN του πίνακα EMPLOYEE. Αυ-
τός είναι και ο λόγος για τον οποίο το εν λόγω πεδίο εµφανίζεται στο πλαίσιο λίστας
που βρίσκεται στο κέντρο του πλαισίου διαλόγου. Εάν θέλουµε να εµφανίσουµε άλλα
πεδία του πίνακα EMPLOYEE – ή και άλλων πινάκων της βάσης – µπορούµε να τα
εµφανίσουµε επιλέγοντας από το αριστερό πλαίσίο λίστας τον πίνακα που περιέ-
χει αυτά τα πεδία. Στο επόµενο σχήµα έχουµε επιλέξει για περαιτέρω επεξεργασία
τα πεδία του πίνακα DEPARTMENT. Εκτός από πεδία πινάκων, µπορούµε µε τον
ίδιο τρόπο να επιλέξουµε στοιχεία που ανήκουν σε άλλους τύπους αντικειµένων της
Microsoft Access, όπως είναι οι φόρµες, τα ερωτήµατα και οι εκτυπώσεις.

Σχήµα 145 : Επιλογή του πεδίου του πίνακα που θα χρησιµοποιηθεί κατά τη
διαδικασία δόµησης εκφράσεων

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 11 : Ερωτήµατα 260

Έχοντας εµφανίσει στο κεντρικό πλαίσιο λίστας το σύνολο των πεδίων κά-
ποιου πίνακα, µπορούµε να επιλέξουµε το πεδίο που µας ενδιαφέρει, κάνοντας dou-
ble click µε το ποντίκι πάνω στο όνοµά του. Στην περίπτωση αυτή το εν λόγω πεδίο
εµφανίζεται στο κεντρικό παράθυρο της δόµησης εκφράσεων, και ο τρόπος εµφά-
νισής του ακολουθεί τη σύνταξη [Table Name]![Field Name]. Εάν για παράδειγµα
επιλέξουµε το πεδίο MGRSSN του πίνακα DEPARTMENT, αυτό θα εµφανιστεί µε
τη µορφή [DEPARTMENT]![MGRSSN].

Στο επόµενο βήµα της διαδικασίας θα πρέπει να δοµήσουµε την έκφραση


στην οποία θα συµµετέχει αυτό το πεδίο. Στην έκφραση αυτή, το εν λόγω πεδίο
µπορεί να χρησιµοποιηθεί µαζί µε ένα πλήθος αριθµητικών τελεστών, τελεστών
σύγκρισης και λογικών τελεστών τους οποίους µπορούµε να επιλέξουµε από τη
γραµµή εργαλείων του επόµενου σχήµατος. Για παράδειγµα, εάν θέλουµε να δοµή-
σουµε την έκφραση SALARY>30000, θα εµφανίσουµε το πεδίο SALARY του πί-
νακα EMPLOYEE µε τον τρόπο που περιγράψαµε στις προηγούµενες παραγράφους,
θα πατήσουµε µε το ποντίκι το κουµπί που φέρει πάνω το σύµβολο «>», και στη συ-
νέχεια θα καταχωρήσουµε την τιµή 30000. Χρησιµοποιώντας στη συνέχεια το κουµπί
OK, κλείνουµε το παράθυρο δόµησης εκφράσεων, και επιστρέφουµε στο περιβάλλον
της σχεδίασης ερωτηµάτων, όπου πλέον, στη γραµµή «Κριτήρια» του πεδίου µε το
οποίο ασχολούµαστε, θα εµφανιστεί η έκφραση που δηµιουργήσαµε χρησιµοποιώ-
ντας το παράθυρο της δόµησης εκφράσεων.

Σχήµα 146 : Παραδείγµατα τελεστών που µπορούν να χρησιµοποιηθούν κατά τη διαδικασία δόµησης
µιας έκφρασης για κάποιο από τα πεδία των πινάκων της βάσης

Εφαρµόζοντας την παραπάνω διαδικασία, µπορούµε να δηµιουργήσουµε µια


έκφραση, όσο πολύπλοκη και εάν είναι.

Περισσότερες λεπτοµέρειες όσον αφορά τη διαδικασία δόµησης ερωτηµάτων,


µπορούν να βρεθούν σε ένα τυπικό εγχειρίδιο χρήσης της Microsoft Access.

ΤΟ ΦΥΛΛΟ Ι∆ΙΟΤΗΤΩΝ ΓΙΑ ΤΑ ΕΡΩΤΗΜΑΤΑ ΤΗΣ ΒΑΣΗΣ

Σε πλήρη αναλογία µε τους υπόλοιπους τύπους αντικειµένων της Microsoft


Access, µπορούµε για τα ερωτήµατα που έχουµε δηµιουργήσει, να ορίσουµε ένα
πλήθος ιδιοτήτων που περιγράφουν τη λειτουργία και τα χαρακτηριστικά του ερωτή-
µατος. Αυτό το πλαίσιο διαλόγου, µπορεί να εµφανιστεί από το µενού «Προβολή»
και την επιλογή «Ιδιότητες», και παρουσιάζεται στο σχήµα που ακολουθεί.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 261

Σχήµα 147 : Το φύλλο ιδιοτήτων ερωτηµάτων της Microsoft Access.

Η αναλυτική περιγραφή όλων αυτών των ιδιοτήτων βρίσκεται έξω από τον
σκοπό συγγραφής αυτού του κεφαλαίου. Για κάθε µια ιδιότητα ωστόσο, µπορούµε
να ανακτήσουµε πληροφορίες σχετικά µε το ρόλο της και τον τρόπο χρήσης της,
εάν µεταφερθούµε στην τιµή της µε το αριστερό πλήκτρο του ποντικιού, και στη
συνέχεια πατήσουµε το πλήκτρο F1 προκειµένου να εµφανίσουµε το Online Help
της Access µε πληροφορίες για τη συγκεκριµένη ιδιότητα του ερωτήµατος.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12
Αναφορές
Στο κεφάλαιο αυτό περιγράφεται η διαδικασία δηµιουρ-
γίας αναφορών οι οποίες εµφανίζουν τα δεδοµένα των πινά-
κων της βάσης ή τα αποτελέσµατα των ερωτηµάτων της
εφαρµογής, σε µορφή κατάλληλη για προεπισκόπηση ή εκτύ-
πωση.

Μια από τις πιο σηµαντικές λειτουργίες που περιλαµβάνονται σε κάθε τυπικό
σύστηµα µηχανογράφησης, είναι η εκτύπωση των δεδοµένων που βρίσκονται απο-
θηκευµένα στους πίνακες της βάσης. Χαρακτηριστικό παράδειγµα µιας τέτοιας
περίπτωσης είναι η εκτύπωση της καρτέλας ενός µαθητή η οποία περιέχει τα προ-
σωπικά του στοιχεία, όπως αυτά έχουν καταχωρηθεί στον οµώνυµο πίνακα. Ας ση-
µειωθεί πως αυτή η διαδικασία µπορεί να πραγµατοποιηθεί πολύ πιο απλά, εκτυπώ-
νοντας κατευθείαν τη φόρµα επεξεργασίας των στοιχείων του µαθητή. Ωστόσο στη
γενική περίπτωση το αποτέλεσµα αυτής της διαδικασίας δεν είναι αποδεκτό καθώς
µαζί µε τα στοιχεία του µαθητή θα εκτυπωθούν και τα πεδία της φόρµας, κάτι που
συνήθως δεν είναι επιθυµητό. Για το λόγο αυτό, θα πρέπει να κατασκευάσουµε µια
αναφορά ή έκθεση (report) η οποία θα συσχετίζεται µε τον πίνακα των στοιχείων
του µαθητή, και θα εµφανίζει τα προσωπικά του δεδοµένα µε τα επιθυµητά σε κάθε
περίπτωση χαρακτηριστικά εµφάνισης.

Μιλώντας γενικά, τα δεδοµένα που περιλαµβάνονται σε µία αναφορά, µπορεί


να προέρχονται τόσο από τους πίνακες της βάσης δεδοµένων, όσο και από τα
ερωτήµατα που έχουν δηµιουργηθεί σε προγενέστερο στάδιο της διαδικασίας. Ας
πάρουµε για παράδειγµα την κατάσταση της αναλυτικής βαθµολογίας ενός µαθητή.
Θεωρώντας πως ο κάθε µαθητής και το κάθε µάθηµα ταυτοποιούνται µονοσήµαντα
από κατάλληλα επιλεγµένο κωδικό, και πως η συσχέτιση που υφίσταται ανάµεσα
στους τύπους οντότητας ΜΑΘΗΜΑ και ΜΑΘΗΤΗΣ χαρακτηρίζεται από πολλα-
πλότητα M:N, είναι προφανές, πως οι βαθµοί των µαθητών του σχολείου θα καταχω-
ρηθούν σε ένα ενδιάµεσο πίνακα (ας τον ονοµάσουµε ΒΑΘΜΟΛΟΓΙΑ) που θα πε-
ριέχει τα πρωτεύοντα κλειδιά των πινάκων ΜΑΘΗΤΗΣ και ΜΑΘΗΜΑ, και τον κα-
τάλληλο σε κάθε περίπτωση ΒΑΘΜΟ ΜΑΘΗΜΑΤΟΣ. Προκειµένου να κατασκευ-
άσουµε την αναλυτική βαθµολογία ενός µαθητή θα πρέπει να ανακτήσουµε τα προ-
σωπικά στοιχεία του µαθητή από τον πίνακα ΜΑΘΗΤΗΣ, το όνοµα του µαθή-
µατος από τον πίνακα ΜΑΘΗΜΑ και τους βαθµούς των µαθηµάτων που περι-
λαµβάνονται στον πίνακα ΒΑΘΜΟΛΟΓΙΑ για τους οποίους το πεδίο ΚΩ∆ΙΚΟΣ
ΜΑΘΗΤΗ ταυτίζεται µε το αντίστοιχο πεδίο του πίνακα ΜΑΘΗΤΗΣ. Αλλά
αυτή η διαδικασία θα λάβει χώρα δια της κατασκευής ενός ερωτήµατος (query) που
Κεφάλαιο 12 : Αναφορές 264

θα χαρακτηρίζεται από την παραπάνω δοµή. Έχοντας κατασκευάσει το εν λόγω ερώ-


τηµα και έχοντας διασφαλίσει πως η εκτέλεσή του επιστρέφει τα σωστά αποτελέ-
σµατα, µπορούµε στη συνέχεια να κατασκευάσουµε µια αναφορά η οποία θα στηρί-
ζεται σε αυτό το ερώτηµα και θα επιτρέπει την εκτύπωση των αποτελεσµάτων που
επιστρέφονται από αυτό.

Η ∆ΟΜΗ ΤΩΝ ΑΝΑΦΟΡΩΝ ΣΤΗ MICROSOFT ACCESS

Σε πλήρη αναλογία µε τις φόρµες που χρησιµοποιούνται για την καταχώ-


ρηση και επεξεργασία δεδοµένων, οι αντίστοιχες αναφορές που συσχετίζονται µε τις
διαδικασίες προεπισκόπησης και εκτύπωσης αυτών, χαρακτηρίζονται από µία πα-
ρόµοια δοµή η οποία περιλαµβάνει την κεφαλίδα (header), το κυρίως τµήµα της
αναφοράς (details), και το υποσέλιδο (footer). Σε περιπτώσεις κατά τις οποίες η
τρέχουσα αναφορά αποτελείται από περισσότερες από µία σελίδες, µπορούµε να ορί-
σουµε κεφαλίδα και υποσέλιδο για την κάθε σελίδα ξεχωριστά, καταλήγοντας έτσι
στη λογική οργάνωση της αναφοράς η οποία παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 148 : Τυπική οργάνωση αναφοράς στη Microsoft Access

Σε µια πιο λεπτοµερή περιγραφή, η κεφαλίδα έκθεσης (report header) εµ-


φανίζεται µία και µοναδική φορά στην αρχή της έκθεσης και χρησιµοποιείται για
την τοποθέτηση στοιχείων (όπως είναι η ηµεροµηνία εκτύπωσης και ο τίτλος της
έκθεσης) ή ακόµη και εικόνων (όπως είναι για παράδειγµα το λογότυπο κάποιας
εταιρείας ή οργανισµού). Αντίθετα η κεφαλίδα σελίδας (page header) εµφανίζεται
στην αρχή της κάθε σελίδας, και χρησιµοποιείται για την εµφάνιση πληροφοριών
όπως οι τίτλοι των στηλών δεδοµένων που περιλαµβάνονται στην αναφορά. Η ενό-
τητα δεδοµένων της έκθεσης (report details) περιλαµβάνει τα πεδία που εκτυπώνο-
νται σε αυτή, ενώ το υποσέλιδο σελίδας (page footer) χρησιµοποιείται όπως και η
αντίστοιχη κεφαλίδα για την εκτύπωση πληροφοριών που αφορούν την κάθε σε-
λίδα ξεχωριστά (µε χαρακτηριστικότερο παράδειγµα τον αριθµό σελίδας (page

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 265

number)). Τέλος το υποσέλιδο της έκθεσης (report footer), εµφανίζεται µια και
µοναδική φορά στο τέλος της έκθεσης, και χρησιµοποιείται για την εµφάνιση πληρο-
φοριών που αφορούν το σύνολο της έκθεσης, όπως είναι για παράδειγµα συγκεντρω-
τικά στοιχεία. Στην περίπτωση κατά την οποία οι εγγραφές του πίνακα εµφανίζονται
οµαδοποιηµένες σε σύνολα εγγραφών, µπορούµε να ορίσουµε και µία κεφαλίδα
οµάδας (group header), η οποία θα περιλαµβάνει στοιχεία που συσχετίζονται µε την
κάθε οµάδα εγγραφών.

ΠΕΡΙΓΡΑΦΗ ΤΗΣ ∆ΙΑ∆ΙΚΑΣΙΑΣ ∆ΗΜΙΟΥΡΓΙΑΣ ΑΝΑΦΟΡΩΝ

Η δηµιουργία µιας νέας αναφοράς στη Microsoft Access, πραγµατοποιείται


κατά τα γνωστά από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, εάν
µεταφερθούµε στη σελίδα που περιλαµβάνει τις εκθέσεις της εφαρµογής, και στη
συνέχεια χρησιµοποιήσουµε το κουµπί που φέρει την ετικέτα «∆ηµιουργία». Στην
περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο
διαλόγου, το οποίο απεικονίζει τους εναλλακτικούς τρόπους δηµιουργίας νέων ανα-
φορών που σε γενικές γραµµές είναι οι ακόλουθοι:

Σχήµα 149 : Επιλογή του τρόπου δηµιουργίας της νέας αναφοράς

∆ηµιουργία έκθεσης σε προβολή σχεδίασης: αποτελεί την πιο γενική περί-


πτωση δηµιουργίας αναφοράς, καθώς εµφανίζει µία κενή έκθεση την οποία ο χρή-
στης διαµορφώνει ανάλογα µε τις ανάγκες που πρόκειται να καλύψει. Αυτή η δια-
µόρφωση περιλαµβάνει την τοποθέτηση στην αναφορά των κατάλληλων σε κάθε
περίπτωση πεδίων, τη συσχέτιση αυτών των πεδίων µε τα αντίστοιχα πεδία του
πίνακα ή του ερωτήµατος από το οποίο η αναφορά θα παίρνει δεδοµένα, και την
οργάνωση της πληροφορίας που θα εµφανίζεται στην κεφαλίδα και στο υποσέ-
λιδο της αναφοράς και των σελίδων που περιλαµβάνονται σε αυτή. Λόγω της αυ-
ξηµένης πολυπλοκότητας που χαρακτηρίζει τη δηµιουργία µιας έκθεσης σε προβολή
σχεδίασης, η εν λόγω διαδικασία δεν θα µας απασχολήσει στη συνέχεια καθώς θα
ασχοληθούµε µε ποιο αυτοµατοποιηµένες διαδικασίες δηµιουργίας αναφορών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 266

∆ηµιουργία έκθεσης µε τη χρήση οδηγού: στην περίπτωση αυτή, η διαδικα-


σία δηµιουργίας µιας νέας αναφοράς, είναι εξαιρετικά πιο απλή. Ο χρήστης καλείται
να καθορίσει τα πεδία των πινάκων και των ερωτηµάτων που θέλει να χρησιµο-
ποιήσει – ο καθορισµός αυτών των στοιχείων λαµβάνει χώρα δια της χρήσης του
οδηγού αναφορών (control wizard) της Access – και τον τρόπο µε το οποίο αυτά θα
εµφανίζονται και θα οµαδοποιούνται. Στη συνέχεια, η δηµιουργία της αναφοράς
γίνεται αυτόµατα από την εφαρµογή. Λόγω της ευρείας χρήσης που χαρακτηρίζει το
συγκεκριµένο τρόπο δηµιουργίας αναφορών, θα λάβει χώρα αναλυτική παρουσίασή
του σε κάποια από τις επόµενες ενότητες.

∆ηµιουργία αυτόµατης έκθεσης: η µέθοδος αυτή επιτρέπει τη δηµιουργία


µιας αναφοράς η οποία εµφανίζει όλες τις εγγραφές που ανήκουν σε ένα πίνακα ή
σε κάποιο ερώτηµα. Η αυτόµατη έκθεση µπορεί να δηµιουργηθεί µε δύο τρόπους εκ
των οποίων ο πρώτος επιβάλλει την εκτύπωση των πεδίων των εγγραφών του πίνακα
ή του ερωτήµατος σε ξεχωριστή γραµµή το καθένα, ενώ στη δεύτερη περίπτωση τα
πεδία κάθε εγγραφής εκτυπώνονται όλα στην ίδια γραµµή της αναφοράς. Στο
επόµενο σχήµα παρουσιάζεται αυτόµατη έκθεση που εµφανίζει όλες τις εγγραφές του
πίνακα EMPLOYEE και ακολουθεί το δεύτερο τρόπο εµφάνισης, που χαρακτηρίζε-
ται από την εκτύπωση των εγγραφών του πίνακα σε ξεχωριστή γραµµή η κάθε µια.
Ας σηµειωθεί πως η αναφορά του επόµενου σχήµατος δεν εµφανίζει όλες τις στήλες
του πίνακα, καθώς ορισµένες από αυτές έχουν αφαιρεθεί µετά τη δηµιουργία της.

Σχήµα 150 : Παράδειγµα αυτόµατης έκθεσης που εµφανίζει τις εγγραφές του πίνακα EMPLOYEE

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


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 267

Σχήµα 151 : ∆ιαθέσιµοι τύποι γραφηµάτων που µπορούν να χρησιµοποιηθούν κατά τη διαδικασία
δηµιουργίας της νέας αναφοράς

Από το σχήµα αυτό διαπιστώνουµε πως η Microsoft Access υποστηρίζει τους πιο συ-
νηθισµένους τύπους γραφηµάτων όπως είναι τα γραφήµατα στηλών που µπορούν να
απεικονισθούν στους χώρους των δύο και των τριών διαστάσεων, τα γραφήµατα
γραµµών που επιτρέπουν την απεικόνιση της µεταβολής των τιµών ενός µεγέθους σε
σχέση µε κάποιο άλλο, και τα γραφήµατα πίτας (pie charts) που χρησιµοποιούνται
για την εµφάνιση ποσοστιαίων κατανοµών. Για κάθε γράφηµα ο χρήστης έχει τη
δυνατότητα να ορίσει το είδος της επεξεργασίας που θα εφαρµοσθεί πάνω στα δε-
δοµένα που απεικονίζονται σε αυτό, και την αντιστοιχία που υφίσταται ανάµεσα
στις στήλες των δεδοµένων του πίνακα και στους άξονες του διαγράµµατος.

∆ηµιουργία έκθεσης µε τη χρήση του οδηγού ετικετών: αυτός ο τρόπος


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 268

∆ΗΜΙΟΥΡΓΙΑ ΑΝΑΦΟΡΑΣ ΜΕ ΤΗ ΧΡΗΣΗ Ο∆ΗΓΟΥ

Μετά τη συνοπτική παρουσίαση των διαφορετικών τρόπων δηµιουργίας ανα-


φορών στη Microsoft Access, ας περάσουµε τώρα στην αναλυτική περιγραφή της
διαδικασίας δηµιουργίας µιας αναφοράς, δια της χρήσης του οδηγού αναφορών (re-
port wizard). Η εκκίνηση αυτού του οδηγού µπορεί να πραγµατοποιηθεί χρησιµο-
ποιώντας τη δεύτερη από τις παραπάνω επιλογές, ή εναλλακτικά ενεργοποιώντας
την επιλογή «∆ηµιουργία Έκθεσης µε τη χρήση οδηγού» που βρίσκεται στο κε-
ντρικό παράθυρο διαχείρισης της βάσης δεδοµένων και στη σελίδα «Εκθέσεις». Στην
περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το πλαίσιο διαλόγου
που παρουσιάζεται στο επόµενο σχήµα. Χρησιµοποιώντας αυτό το πλαίσιο, µπο-
ρούµε να καθορίσουµε το σύνολο των πεδίων που θα χρησιµοποιηθούν στη δη-
µιουργία της νέας αναφοράς. Τα πεδία αυτά µπορεί να ανήκουν τόσο σε κάποιον
από τους πίνακες της βάσης όσο και σε κάποιο από τα ερωτήµατα που έχουν δη-
µιουργηθεί. Όσον αφορά τη διαδικασία καθορισµού τους αυτή γίνεται µε τον ίδιο
ακριβώς τρόπο που περιγράψαµε στην παρουσίαση της δηµιουργίας µιας νέας φόρ-
µας.

Σχήµα 152 : Καθορισµός των πεδίων του πίνακα ή του ερωτήµατος που θα περιλαµβάνονται στη νέα
αναφορά

Στο επόµενο βήµα της διαδικασίας µπορούµε να ορίσουµε χαρακτηριστικά


οµαδοποίησης των πεδίων της αναφοράς. Για παράδειγµα µπορούµε να εκτυπώ-
σουµε τα στοιχεία των υπαλλήλων της εταιρείας, οµαδοποιηµένα ως προς το
τµήµα στο οποίο ανήκουν. Αυτού του είδους η οµαδοποίηση µπορεί να επεκταθεί σε
περισσότερα από ένα επίπεδα, επιτρέποντας έτσι τη δηµιουργία µιας ιεραρχηµένης
αναφοράς δεδοµένων. Προκειµένου να ορίσουµε το είδος και το πλήθος των επι-
πέδων οµαδοποίησης θα πρέπει να εµφανίσουµε στην οθόνη του υπολογιστή µας το

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 269

πλαίσιο διαλόγου του επόµενου σχήµατος, να επιλέξουµε µε το ποντίκι κάποιο από τα


πεδία που περιλαµβάνονται στο αριστερό πλαίσιο λίστας, και χρησιµοποιώντας το
κουµπί που φέρει το σύµβολο «>» να το µεταφέρουµε στην εικόνα που βρίσκεται στο
δεξί µέρος του παραθύρου. Για να ορίσουµε περισσότερα επίπεδα οµαδοποίησης, θα
πρέπει να εφαρµόσουµε αυτή τη διαδικασία και µε ένα δεύτερο πεδίο του πί-
νακα. Στην περίπτωση αυτή ενεργοποιούνται και τα δύο άλλα κουµπιά που φέρουν
τα σύµβολα «y» και «z» και χρησιµοποιούνται για να καθορίσουν τη σειρά µε την
οποία λαµβάνει χώρα αυτή η οµαδοποίηση. Ας υποθέσουµε για παράδειγµα πως
επιθυµούµε να οµαδοποιήσουµε τα προσωπικά στοιχεία των υπαλλήλων ως προς το
τµήµα στο οποίο ανήκουν και ως προς το έργο στο οποίο εργάζονται. Στην περί-
πτωση αυτή χρησιµοποιώντας τα κουµπιά που παρουσιάσαµε προηγουµένως, µπο-
ρούµε να καθορίσουµε εάν η οµαδοποίηση των πεδίων της αναφοράς θα γίνει πρώτα
ως προς το όνοµα του τµήµατος και στη συνέχεια ως προς το όνοµα του έργου, ή
κατά την αντίστροφη διάταξη πεδίων. Παράδειγµα δηµιουργίας αναφοράς που να χα-
ρακτηρίζεται από οµαδοποίηση των πεδίων της θα παρουσιαστεί στην επόµενη ενό-
τητα.

Σχήµα 153 : Παράδειγµα δηµιουργίας αναφοράς χωρίς οµαδοποίηση των πεδίων της

Στο παράδειγµα που ακολουθεί, η αναφορά που δηµιουργείται δια της χρήσης
του οδηγού χαρακτηρίζεται από πλήρη απουσία οµαδοποίησης, και εµφανίζει απλά
τις εγγραφές του πίνακα EMPLOYEE τη µία κάτω από την άλλη. Στο επόµενο βήµα
της διαδικασίας µπορούµε να καθορίσουµε εάν οι εγγραφές του πίνακα θα εκτυπω-
θούν µε την ίδια σειρά µε την οποία βρίσκονται καταχωρηµένες σε αυτόν, ή εάν
θα παρουσιαστούν ταξινοµηµένες ως προς κάποιο πεδίο – κάτι που συνήθως γίνε-
ται στην πράξη. Σε πλήρη αναλογία µε την οµαδοποίηση πεδίων, η διαδικασία ταξι-
νόµησης µπορεί να λάβει χώρα ως προς περισσότερα από ένα πεδία, ο καθορισµός
των οποίων γίνεται χρησιµοποιώντας το επόµενο πλαίσιο διαλόγου. Στο παράδειγµα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 270

του σχήµατος αυτού, οι εγγραφές του πίνακα EMPLOYEE εµφανίζονται ταξινοµη-


µένες, πρώτα ως προς το επώνυµο του υπαλλήλου, και στη συνέχεια ως προς το
όνοµά του. Στη γενική περίπτωση µιας αναφοράς, µπορεί να λάβει χώρα συνδυα-
σµένη χρήση οµαδοποίησης και ταξινόµησης σε ένα ή περισσότερα επίπεδα. Με
τον τρόπο αυτό είναι δυνατή η δηµιουργία αναφορών που χαρακτηρίζονται από εξαι-
ρετική οργάνωση και από εύκολη αναζήτηση πληροφορίας σε αυτές.

Σχήµα 154 : Καθορισµός του είδους της ταξινόµησης των πεδίων της αναφοράς

Η επόµενη παράµετρος που θα πρέπει να καθορίσουµε κατά το στάδιο δη-


µιουργίας µιας αναφοράς, είναι ο τρόπος οργάνωσης της πληροφορίας που θα
απεικονίζεται σε αυτή. Υπάρχουν τρεις διαφορετικές διατάξεις που µπορούµε να
χρησιµοποιήσουµε: (α) όρθια διάταξη κατά την οποία τα πεδία των εγγραφών
εκτυπώνονται σε ξεχωριστή σειρά το καθένα, και το ένα κάτω από το άλλο (β)
διάταξη σε στήλες κατά την οποία τα πεδία της κάθε εγγραφής εκτυπώνονται
όλα στην ίδια σειρά, ενώ η κάθε µια από τις εγγραφές του πίνακα εκτυπώνεται
σε ξεχωριστή σειρά (γ) στοιχισµένη διάταξη που χαρακτηρίζεται από την ύπαρξη
ετικετών σε κάθε εγγραφή του πίνακα (και όχι µόνο στην αρχή της κάθε στήλης
όπως συµβαίνει στην προηγούµενη περίπτωση). Ο καθορισµός της διάταξης της
νέας αναφοράς λαµβάνει χώρα δια της χρήσης του πλαισίου διαλόγου που παρουσιά-
ζεται στο επόµενο σχήµα. Χρησιµοποιώντας αυτό το πλαίσιο, µπορούµε ακόµη να
ορίσουµε εάν ο προσανατολισµός σελίδας θα είναι οριζόντιος (portrait) ή κατακό-
ρυφος (landscape) καθώς και το αν τα πεδία της αναφοράς θα πρέπει να είναι δια-
τεταγµένα µε τέτοιο τρόπο ώστε να χωράνε όλα στην ίδια σελίδα – στην αντίθετη
περίπτωση η αναφορά θα επεκταθεί σε περισσότερες σελίδες.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 271

Σχήµα 155 : Καθορισµός της διάταξης των πεδίων στην επιφάνεια της έκθεσης

Το τελευταίο χαρακτηριστικό της αναφοράς που θα πρέπει να καθορίσουµε


κατά το στάδιο της δηµιουργίας της, συσχετίζεται µε τον τρόπο εµφάνισής της. Εδώ
µπορούµε να ορίσουµε κάποιο στυλ εµφάνισης από µία λίστα διαθέσιµων επιλογών,
δηλαδή ένα συνδυασµό γραµµών και χρωµάτων για την κεφαλίδα, το υποσέλιδο
και το κυρίως τµήµα της αναφοράς. Ας σηµειωθεί πως η επιλογή που θα κάνουµε
στο στάδιο αυτό, δεν είναι δεσµευτική όσον αφορά τα χαρακτηριστικά εµφάνισης της
έκθεσης, καθώς σε κάθε χρονική στιγµή µπορούµε να µεταβάλλουµε αυτά τα χαρα-
κτηριστικά, χρησιµοποιώντας το κατάλληλο φύλλο ιδιοτήτων.

Σχήµα 156 : Καθορισµός των χαρακτηριστικών εµφάνισης της νέας αναφοράς

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 272

Μετά τον καθορισµό όλων αυτών των χαρακτηριστικών µε τον τρόπο που πα-
ρουσιάσαµε στις προηγούµενες σελίδες, το µόνο πράγµα που έχουµε να κάνουµε για
να ολοκληρώσουµε τη διαδικασία δηµιουργίας της νέας αναφοράς, είναι να αποδώ-
σουµε σε αυτή κάποιο όνοµα που θα την ταυτοποιεί µε µοναδικό τρόπο µέσα στη
βάση δεδοµένων. Η διαδικασία αυτή πραγµατοποιείται χρησιµοποιώντας το επόµενο
πλαίσιο διαλόγου, που είναι και το τελευταίο πλαίσιο που περιλαµβάνεται στον οδηγό
δηµιουργίας αναφορών. Από το πλαίσιο αυτό, µπορούµε ακόµη να καθορίσουµε, εάν
µετά την ολοκλήρωση της δηµιουργίας της αναφοράς θα λάβει χώρα άµεση προ-
επισκόπηση και εκτύπωσή της, ή εάν θα την εµφανίσουµε σε προβολή σχεδίασης
έτσι ώστε να προχωρήσουµε σε τροποποίηση των ιδιοτήτων που την περιγρά-
φουν.

Σχήµα 157 : Καθορισµός του ονόµατος της νέας αναφοράς και ολοκλήρωση της διαδικασίας δηµιουρ-
γίας της

Το επόµενο σχήµα παρουσιάζει την αναφορά που έχει δηµιουργηθεί µετά την
ολοκλήρωση των διαδικασιών που περιγράψαµε στις προηγούµενες σελίδες. Η εν
λόγω αναφορά εµφανίζει τα στοιχεία των υπαλλήλων της εταιρείας σε κατακό-
ρυφη διάταξη µε την κάθε γραµµή να περιλαµβάνει τα στοιχεία ενός υπαλλήλου.
Από το σχήµα αυτό διαπιστώνουµε πως η κεφαλίδα της αναφοράς περιλαµβάνει το
όνοµά της όπως αυτό έχει ορισθεί κατά το τελευταίο στάδιο της διαδικασίας,
ενώ το υποσέλιδο περιλαµβάνει την τρέχουσα ηµεροµηνία και τον αριθµός της
τρέχουσας σελίδας σε σχέση µε το συνολικό αριθµό σελίδων της αναφοράς.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 273

Σχήµα 158 : Τυπικό παράδειγµα αναφοράς που έχει προκύψει δια της εφαρµογής της διαδικασίας
δηµιουργίας αναφορών που παρουσιάστηκε στις προηγούµενες σελίδες

Ως ένα δεύτερο παράδειγµα δηµιουργίας αναφοράς, ας θεωρήσουµε την πε-


ρίπτωση µιας έκθεσης η οποία για κάθε τµήµα και για κάθε υπάλληλο, θα εµφα-
νίζει το µισθό του, το όνοµα του έργου στο οποίο απασχολείται και τον αριθµό
των ωρών ανά εβδοµάδα που εργάζεται πάνω σε αυτό το έργο. Ωστόσο σε αντί-
θεση µε την προηγούµενη περίπτωση, τα δεδοµένα της αναφοράς δεν θα είναι απλά
διατεταγµένα το ένα κάτω από το άλλο, αλλά οµαδοποιηµένα πρώτα ως προς το
όνοµα του τµήµατος στο οποίο ανήκει ο κάθε υπάλληλος, και έπειτα ως προς το
όνοµα του υπαλλήλου ο οποίος απασχολείται σε κάποιο έργο. Προκειµένου να κα-
τασκευάσουµε µια αναφορά η οποία θα περιέχει την παραπάνω πληροφορία, θα πρέ-
πει πρώτα να κατασκευάσουµε ένα ερώτηµα το οποίο θα φέρει το όνοµα ΑΠΑ-
ΣΧΟΛΗΣΗ και το οποίο για κάθε υπάλληλο θα εµφανίζει το ονοµατεπώνυµο, το
µισθό και τον κωδικό του, το όνοµα του τµήµατος στο οποίο ανήκει, το όνοµα
του έργου στο οποίο απασχολείται, και τον αριθµό των ωρών ανά εβδοµάδα που
εργάζεται σε αυτό το έργο. Η δοµή αυτού του ερωτήµατος σε προβολή σχεδίασης,
παρουσιάζεται στο επόµενο σχήµα, ενώ στη συνέχεια ακολουθούν οι εγγραφές που
επιστρέφονται από το ερώτηµα, και ο κώδικας υλοποίησης του ερωτήµατος σε
γλώσσα SQL.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 274

Σχήµα 159 : Προεπισκόπηση του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ σε προβολή σχεδίασης

Σχήµα 160 : Προεπισκόπηση του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ σε προβολή φύλλου δεδοµένων. Οι


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 275

Σχήµα 161 : Προεπισκόπηση του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ σε προβολή πηγαίου κώδικα (σε
γλώσσα SQL)

Μετά τη δηµιουργία του παραπάνω ερωτήµατος µπορούµε να κατασκευά-


σουµε την αναφορά η οποία θα περιέχει τη ζητούµενη πληροφορία. Για να το κά-
νουµε αυτό, εµφανίζουµε το πλαίσιο διαλόγου που φέρει τον τίτλο «∆ηµιουργία Έκ-
θεσης», επιλέγουµε τον οδηγό εκθέσεων από τη λίστα των διαθέσιµων επιλογών, και
ορίζουµε το ερώτηµα ΑΠΑΣΧΟΛΗΣΗ ως την πηγή προέλευσης των δεδοµένων που
θα περιλαµβάνονται στην καινούρια αναφορά.

Σχήµα 162 : Ορισµός του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ ως την προέλευση των δεδοµένων της νέας
αναφοράς

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 276

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε ποια από τα


πεδία του ερωτήµατος θα χρησιµοποιηθούν στην κατασκευή της καινούριας έκ-
θεσης. Στην προκειµένη περίπτωση, η αναφορά που κατασκευάζουµε θα πρέπει να
περιέχει όλα αυτά τα πεδία. Για το λόγο αυτό µεταφέρουµε το σύνολο των πεδίων
του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ στο δεξί πλαίσιο λίστας του πλαισίου διαλόγου
του επόµενου σχήµατος. Τα πεδία αυτά µπορούν να µεταφερθούν είτε ένα προς ένα
επιλέγοντάς τα µε το ποντίκι και χρησιµοποιώντας το κουµπί που φέρει το σύµ-
βολο «>» είτε όλα µαζί χρησιµοποιώντας το πλήκτρο που βρίσκεται ακριβώς
κάτω από το προηγούµενο, και φέρει το σύµβολο «>>».

Σχήµα 163 : Καθορισµός των πεδίων του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ που θα χρησιµοποιηθούν στη
δηµιουργία της νέας αναφοράς

Στο επόµενο βήµα της διαδικασίας που είναι και το πιο ενδιαφέρον, θα πρέπει
να καθορίσουµε το είδος της οµαδοποίησης που θα εφαρµοσθεί πάνω στα πεδία
της αναφοράς. Επειδή στην προκειµένη περίπτωση το ερώτηµα ΑΠΑΣΧΟΛΗΣΗ
επιστρέφει δεδοµένα που ανήκουν σε τέσσερις διαφορετικούς πίνακες – τους πίνακες
DEPARTMENT, EMPLOYEE, WORKS_ON και PROJECT – είναι προφανές
πως µπορούµε να ορίσουµε τέσσερα διαφορετικά είδη οµαδοποίησης, ως προς τα
πεδία του κάθε ένα από τους τέσσερις πίνακες της βάσης. Στην προκειµένη περί-
πτωση η οµαδοποίηση των δεδοµένων της αναφοράς, επιθυµούµε να γίνεται
πρώτα ως προς το όνοµα του τµήµατος (που ανήκει στον πίνακα DEPART-
MENT) και κατόπιν ως προς το όνοµα του υπαλλήλου (που ανήκει στον πίνακα
EMPLOYEE). Για το λόγο αυτό θα πρέπει να ορίσουµε την οµαδοποίηση έτσι όπως
αυτή απεικονίζεται στο επόµενο σχήµα. Εάν επιθυµούµε να ορίσουµε και επιπλέον
πεδία οµαδοποίησης µπορούµε να το κάνουµε χρησιµοποιώντας το επόµενο πλαίσιο
διαλόγου του οδηγού δηµιουργίας αναφορών. Στην περίπτωση αυτή µπορούµε να
ορίσουµε και την προτεραιότητα των πεδίων που καθορίζει τα διαδοχικά επί-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 277

πεδα οµαδοποίησης χρησιµοποιώντας τα κουµπιά που φέρουν τα σύµβολα «y»


και «z».

Σχήµα 164 : Καθορισµός του είδους οµαδοποίησης των πεδίων της αναφοράς

Σχήµα 165 : Καθορισµός επιπρόσθετων επιπέδων οµαδοποίησης

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 278

Σχήµα 166 : Καθορισµός του είδους της ταξινόµησης των δεδοµένων της αναφοράς

Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε το είδος της


ταξινόµησης που επιθυµούµε να εφαρµόσουµε πάνω στα δεδοµένα της αναφοράς.
Η ταξινόµηση αυτή µπορεί να γίνει µόνο ως προς εκείνα τα πεδία τα οποία δεν
έχουν χρησιµοποιηθεί για την οµαδοποίηση των δεδοµένων. Στην προκειµένη πε-
ρίπτωση τα πεδία αυτά είναι το Project Name και το HOURS που περιέχουν το
όνοµα του έργου και τις εβδοµαδιαίες ώρες απασχόλησης του κάθε υπαλλήλου σε
αυτό. Στο συγκεκριµένο παράδειγµα η ταξινόµηση των πεδίων της αναφοράς γί-
νεται πρώτα ως προς το όνοµα του έργου και στη συνέχεια ως προς τον αριθµό
των ωρών όπως φαίνεται από το πλαίσιο διαλόγου του προηγούµενου σχήµατος.

Το τελευταίο σηµαντικό χαρακτηριστικό που θα πρέπει να καθορίσουµε για


να ολοκληρώσουµε τη δηµιουργία της νέας αναφοράς, έχει να κάνει µε τη διάταξη
των πεδίων στην επιφάνεια της έκθεσης. Στο παράδειγµα που περιγράφουµε
έχουµε επιλέξει τη χρήση της κλιµακωτής διάταξης στην οποία τα δεδοµένα που
ανήκουν σε χαµηλότερα επίπεδα οµαδοποίησης εκτυπώνονται µε µεγαλύτερο
µήκος εσοχής σε σχέση µε το αριστερό περιθώριο της σελίδας. Εναλλακτικά µπο-
ρούµε να χρησιµοποιήσουµε κάποιον από τους υπόλοιπους διαθέσιµους τύπους δια-
τάξεων που απεικονίζονται στο πλαίσιο διαλόγου του επόµενου σχήµατος. Τέλος
όσον αφορά τον προσανατολισµό της ίδιας της αναφοράς, χρησιµοποιείται η κατα-
κόρυφη διάταξη (portrait) µε το πλάτος των πεδίων κατάλληλα προσαρµοσµένο
έτσι ώστε να χωράνε κατά τη διεύθυνση του πλάτους της σελίδας.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 279

Σχήµα 167 : Καθορισµός της διάταξης των πεδίων της νέας αναφοράς

Η διαδικασία δηµιουργίας της νέας αναφοράς ολοκληρώνεται µε τον καθορι-


σµό των χαρακτηριστικών εµφάνισης και του ονόµατος µε το οποίο θα χρησιµο-
ποιείται. Η παρουσίαση των πλαισίων διαλόγου δια της χρήσης των οποίων λαµβάνει
χώρα αυτή η διαδικασία, πραγµατοποιήθηκε στις προηγούµενες σελίδες, και δεν
υπάρχει λόγος να επαναληφθεί εκ νέου. Το τελικό αποτέλεσµα που προκύπτει µετά
από την ολοκλήρωση αυτής της διαδικασίας, είναι η αναφορά τµήµα της οποίας πα-
ρουσιάζεται στο επόµενο σχήµα.

Σχήµα 168 : Τυπικό παράδειγµα αναφοράς που χαρακτηρίζεται από οµαδοποίηση των πεδίων της

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 280

ΕΠΕΞΕΡΓΑΣΙΑ ΜΙΑΣ ΕΚΘΕΣΗΣ ΣΕ ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ

Μετά τη δηµιουργία της νέας αναφοράς µε τη βοήθεια κάποιας από τις τεχνι-
κές που παρουσιάσαµε στην προηγούµενη ενότητα, µπορούµε να περάσουµε στο
επόµενο στάδιο της διαδικασίας που περιλαµβάνει την τροποποίηση της δοµής της
αναφοράς έτσι ώστε να καλύψουµε τις ανάγκες που υφίστανται σε κάθε περίπτωση.
Προκειµένου να πραγµατοποιήσουµε αυτή τη διαδικασία, θα πρέπει να µεταφέρουµε
την αναφορά σε προβολή σχεδίασης. Υπάρχουν δύο τρόποι µε τους οποίους µπο-
ρούµε να κάνουµε αυτή τη µεταφορά: (α) από το κεντρικό παράθυρο διαχείρισης
της βάσης δεδοµένων, επιλέγουµε την αναφορά που θέλουµε να επεξεργαστούµε
και τη συνέχεια χρησιµοποιούµε το κουµπί που φέρει την ετικέτα «Σχεδίαση» (β)
εφ’ όσον η αναφορά έχει προηγουµένως ανοίξει σε κατάσταση προεπισκόπησης,
µπορούµε να τη µεταφέρουµε σε προβολή σχεδίασης χρησιµοποιώντας το οµώ-
νυµο κουµπί που βρίσκεται στην αντίστοιχη γραµµή εργαλείων. Τυπικό παρά-
δειγµα αναφοράς σε προβολή σχεδίασης, παρουσιάζεται στο επόµενο σχήµα.

Σχήµα 169 : Προεπισκόπηση αναφοράς σε προβολή σχεδίασης

Στο σχήµα αυτό απεικονίζονται οι πέντε βασικές ενότητες που χαρακτηρί-


ζουν µια αναφορά στη Microsoft Access, και οι οποίες είναι η κεφαλίδα και το
υποσέλιδο της έκθεσης, η κεφαλίδα και το υποσέλιδο της σελίδας, και το κύριο
τµήµα της έκθεσης που στο σχήµα φέρει τον τίτλο «Λεπτοµέρεια». Επιπλέον
επειδή η συγκεκριµένη αναφορά χαρακτηρίζεται από δύο επίπεδα οµαδοποίησης
όσον αφορά τα δεδοµένα που εµφανίζονται σε αυτή, περιέχει δύο ακόµη κεφαλίδες,
µια κεφαλίδα για κάθε επίπεδο οµαδοποίησης. Η κάθε µία από αυτές τις ξεχωριστές
περιοχές, µπορεί να υποστεί τη δική της επεξεργασία ανεξάρτητα από τις υπόλοιπες.
Αυτή η επεξεργασία περιλαµβάνει τον καθορισµό ενός συνόλου ιδιοτήτων οι οποίες
θα παρουσιαστούν σε επόµενη ενότητα και µπορεί να πραγµατοποιηθεί χρησιµοποιώ-
ντας το menu επιλογών που εµφανίζεται εάν πατήσουµε το δεξί πλήκτρο του ποντι-
κιού σε οποιοδήποτε σηµείο της επιφάνειάς της. Το εν λόγω menu παρουσιάζεται

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 281

στη δεξιά εικόνα του επόµενου σχήµατος, ενώ στην αριστερή εικόνα εµφανίζεται το
menu επιλογών που επιτρέπει την επεξεργασία των πλαισίων ελέγχου (report con-
trols) που βρίσκονται διατεταγµένα στην επιφάνεια της αναφοράς. Όσον αφορά τις
διαδικασίες που µπορούν να πραγµατοποιηθούν χρησιµοποιώντας αυτά τα δύο
menus, αυτές σε γενικές γραµµές είναι οι ακόλουθες:

Σχήµα 170 : Menu επιλογών για τις ενότητες και τα πλαίσια ελέγχου της αναφοράς

∆όµηση Συµβάντος: η επιλογή αυτή επιτρέπει τη δηµιουργία µιας διαδικα-


σίας, που θα κληθεί όταν λάβει χώρα η πραγµατοποίηση κάποιου συµβάντος. Όπως
θα δούµε στην ενότητα περιγραφής των ιδιοτήτων της κεφαλίδας, υπάρχουν τρία τέ-
τοια συµβάντα για κάθε ένα από τα οποία µπορούµε να καθορίσουµε και το είδος της
διαδικασίας που θα εφαρµοσθεί. Όσον αφορά το είδος αυτής της διαδικασίας αυτή
µπορεί να περιγράφεται από µια έκφραση αλλά µπορεί να είναι και µια µακροεντολή
ή ένα πρόγραµµα γραµµένο σε γλώσσα Visual Basic.

Αλλαγή σε: η επιλογή αυτή εφαρµόζεται σε πεδίο της αναφοράς και προκα-
λεί το µετασχηµατισµό του σε πεδίο διαφορετικού τύπου. Θα πρέπει να σηµειωθεί
ωστόσο, πως ο νέος τύπος πεδίου θα πρέπει να είναι συµβατός µε τον τρέχοντα τύπο
για αυτό το πεδίο. Για παράδειγµα, ένα πλαίσιο κειµένου, µπορεί να µετατραπεί
µόνο σε ετικέτα, πλαίσιο λίστας ή σύνθετο πλαίσιο.

Αντιγραφή, αποκοπή και επικόλληση (copy, cut, paste): οι τρεις αυτές επι-
λογές χρησιµοποιούνται για την αντιγραφή ή µετακίνηση του επιλεγµένου πεδίου
σε κάποιο άλλο σηµείο της αναφοράς και µπορούν να εφαρµοσθούν τόσο σε ένα
απλό πεδίο, όσο και σε µια ολόκληρη οµάδα επιλεγµένων πεδίων.

Στοίχιση και Μέγεθος: οι επιλογές αυτές επιτρέπουν τον καθορισµό της θέ-
σης και του µεγέθους των επιλεγµένων πεδίων πάνω στην επιφάνεια της τρέχουσας
αναφοράς.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 282

Χρώµα γεµίσµατος / δεύτερου πλάνου, Χρώµα γραµµατοσειράς / πρώτου


πλάνου, Ειδικό effect: αυτές οι ιδιότητες επιτρέπουν τον καθορισµό των χαρακτηρι-
στικών εµφάνισης των επιλεγµένων πεδίων.

Ιδιότητες: αυτή η επιλογή εµφανίζει το φύλλο ιδιοτήτων των διαφόρων


περιοχών της αναφοράς (κεφαλίδες, υποσέλιδα, κυρίως τµήµα) καθώς και των πε-
δίων που βρίσκονται στην επιφάνειά της.

Ταξινόµηση και Οµαδοποίηση: σε περίπτωση κατά την οποία επιθυµούµε


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

Σχήµα 171 : Καθορισµός χαρακτηριστικών ταξινόµησης και οµαδοποίησης

Χρησιµοποιώντας αυτό το πλαίσιο, µπορούµε για κάθε ένα από τα πεδία της
αναφοράς να καθορίσουµε την ταξινόµηση των τιµών του καθώς και τα χαρα-
κτηριστικά της οµαδοποίησης που θα εφαρµόσουµε σε αυτές. Η ταξινόµηση των
πεδίων µπορεί να γίνει τόσο κατά αύξουσα όσο και κατά φθίνουσα σειρά, ενώ όσον
αφορά την οµαδοποίηση, αυτή διαµορφώνεται δια του καθορισµού των ακόλουθων
πληροφοριών:

• Κεφαλίδα οµάδας και υποσέλιδο οµάδας (GroupHeader και GroupFooter


Properties): οι ιδιότητες αυτές παίρνουν µόνο δύο τιµές (Yes και No) και
προκαλούν την εµφάνιση (ή όχι) κεφαλίδας και υποσέλιδου για την κάθε
οµάδα εγγραφών της τρέχουσας αναφοράς.

• Οµαδοποίηση µε βάση (GroupOn Property): η ιδιότητα αυτή επιτρέπει να


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

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 283

τον κατάλογο πεδίων που εµφανίζεται στο επάνω µέρος του πλαισίου διαλό-
γου του προηγούµενου σχήµατος. Όσον αφορά το είδος της οµαδοποίησης
αυτή σε γενικές γραµµές χαρακτηρίζεται από τους ακόλουθους κανόνες:

Εάν ο τύπος του πεδίου είναι κείµενο (text), η οµαδοποίηση µπορεί να γίνει
είτε ως προς την κάθε τιµή του πεδίου (each value) – αυτή είναι η προεπι-
λεγµένη τιµή της ιδιότητας για όλους τους τύπους πεδίων – είτε ως προς ένα
σύνολο χαρακτήρων που θα εµφανίζονται µπροστά από την τιµή του πε-
δίου (prefix). Αντίθετα, στην περίπτωση κατά την οποία το εν λόγω πεδίο εί-
ναι πεδίο ηµεροµηνίας ή ώρας (Date/Time), η ταξινόµησή του µπορεί να γί-
νει ανά µήνα (month), ανά έτος (year), ανά τρίµηνο (qtr), ανά εβδοµάδα
(week), ανά ηµέρα (day), ανά ώρα (hour) και ανά λεπτό (minute). Τέλος
στην περίπτωση κατά την οποία ο τύπος δεδοµένων είναι αυτόµατη αρίθ-
µηση (autonumber), αριθµός (number) ή αριθµητική µονάδα (currency) η
οµαδοποίηση των εγγραφών µπορεί να γίνει ανά διάστηµα τιµών, µε εύρος
του εν λόγω διαστήµατος να καθορίζεται από το χρήστη.

1. ∆ιάστηµα Οµαδοποίησης (GroupInterval Property): χρησιµοποιώντας την


ιδιότητα αυτή, µπορούµε να ορίσουµε το εύρος του διαστήµατος οµαδοποί-
ησης των δεδοµένων της αναφοράς, για κάθε ένα από τα πεδία που περι-
λαµβάνονται σε αυτή. Ας σηµειωθεί πως πριν καθορίσουµε την τιµή αυτής της
ιδιότητας θα πρέπει να επιλέξουµε το πεδίο πάνω στο οποίο θα εφαρµοσθεί,
κάτι που γίνεται δια της χρήσης της λίστας πεδίων που βρίσκεται στο πάνω
µέρος του πλαισίου διαλόγου. Όσον αφορά την τιµή που µπορεί να λάβει αυτή
η ιδιότητα, αυτή είναι συνάρτηση του τύπου δεδοµένων του εν λόγω πεδίου,
και πιο συγκεκριµένα:

Εάν το πεδίο είναι πεδίο κειµένου (text) και ο τύπος οµαδοποίησης που έχει
επιλεγεί είναι δια της χρήσης κάποιου προθέµατος (prefix), εδώ καθορίζουµε
το µήκος του προθέµατος σε χαρακτήρες. Για παράδειγµα εάν στο πεδίο
αυτό θέσουµε την τιµή 3, αυτό σηµαίνει πως η ταξινόµηση των τιµών του πε-
δίου θα λάβει χώρα µε βάση τους τρεις πρώτους χαρακτήρες που περιέχο-
νται σε αυτές. Αντίθετα εάν ο τύπος δεδοµένων του πεδίου είναι ηµεροµηνία
και ώρα (date/time), εδώ καθορίζουµε το πλήθος των χρονικών µονάδων
ως προς τις οποίες έχουµε ζητήσει να γίνεται η οµαδοποίηση. Έτσι εάν
στην προηγούµενη ιδιότητα ζητήσαµε να γίνεται οµαδοποίηση ανά εβδο-
µάδα, η απόδοση στην τρέχουσα ιδιότητα τιµής ίσης µε 2, θα επιβάλλει την
οµαδοποίηση των δεδοµένων της αναφοράς ανά δύο εβδοµάδες. Αντίθετα,
εάν στην προηγούµενη ιδιότητα ζητήσαµε να γίνεται οµαδοποίηση ανά ώρα,
η καταχώρηση της τιµής 12 στην εν λόγω ιδιότητα επιβάλλει την οµαδοποί-
ηση των δεδοµένων ανά 12 ώρες. Ας σηµειωθεί πως σε πλήρη αναλογία µε
την προηγούµενη περίπτωση, η προεπιλεγµένη τιµή για την εν λόγω ιδιότητα
είναι οµαδοποίηση για κάθε τιµή ξεχωριστά, χαρακτηριστικό που ισχύει για
όλους τους τύπους πεδίων.

2. ∆ιατήρηση µαζί (KeepTogether Property): η ιδιότητα αυτή µας επιτρέπει


να καθορίσουµε εάν οι ενότητες της κάθε οµάδας θα πρέπει υποχρεωτικά
να βρίσκονται στην ίδια σελίδα της αναφοράς ή µπορεί να επεκτείνονται

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 284

σε περισσότερες σελίδες, και µπορεί να λάβει µία από τις τρεις επόµενες τι-
µές:

1. Όχι (No): η τιµή αυτή – που είναι και η προεπιλεγµένη – προκαλεί την
εκτύπωση της κάθε οµάδας χωρίς να ενδιαφέρεται για το εάν η κεφα-
λίδα, το κυρίως τµήµα και το υποσέλιδο της οµάδας µπορούν να εκτυ-
πωθούν στην ίδια σελίδα.

2. Ολόκληρη Οµάδα (Whole Group): η τιµή αυτή επιβάλλει την εκτύ-


πωση της κεφαλίδας, των δεδοµένων και του υποσέλιδου της οµάδας
στην ίδια σελίδα.

3. Με την πρώτη λεπτοµέρεια (With First Detail): η τιµή αυτή προκα-


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

Χάρακας, πλέγµα και εργαλειοθήκη: οι επιλογές αυτές χρησιµοποιούνται


για την εµφάνιση ή την απόκρυψη των βοηθητικών εργαλείων που χρησιµοποιού-
νται κατά τη διάρκεια της σχεδίασης της τρέχουσας αναφοράς. Τα εργαλεία αυτά εί-
ναι ο χάρακας που επιτρέπει τη µέτρηση και τον καθορισµό αποστάσεων πάνω στην
επιφάνεια της αναφοράς, το πλέγµα που είναι ιδιαίτερα χρήσιµο για τη στοίχιση των
στοιχείων ελέγχου, και η εργαλειοθήκη που επιτρέπει την προσθήκη νέων στοιχείων
ελέγχου.

Κεφαλίδα – υποσέλιδο σελίδας / κεφαλίδα – υποσέλιδο έκθεσης: επιτρέπει


την προσθήκη ή τη διαγραφή κεφαλίδας και υποσέλιδου στην τρέχουσα αναφορά ή
σε κάθε µια από τις σελίδες που περιλαµβάνονται σε αυτή. Ας σηµειωθεί πως η δια-
γραφή αυτών των ενοτήτων δεν δύναται να αναιρεθεί και εποµένως θα πρέπει να
γίνεται µε µεγάλη προσοχή και µόνο όπου αυτό κρίνεται αναγκαίο.

Η προσθήκη νέων στοιχείων στις διάφορες περιοχές µιας αναφοράς, γίνεται


πολύ εύκολα, χρησιµοποιώντας τα κατάλληλα σε κάθε περίπτωση εργαλεία. Υπάρ-
χουν δύο τέτοια είδη εργαλείων: (α) το βοηθητικό πλαίσιο ελέγχου που φέρει το
όνοµα Εργαλειοθήκη (Toolbox) και επιτρέπει την προσθήκη πλαισίων ελέγχου,
και (β) η λίστα µε τα πεδία του πίνακα ή του ερωτήµατος πάνω στο οποίο στηρί-
ζεται η αναφορά, που επιτρέπει την προσθήκη νέων πεδίων. Τα δύο αυτά πλαίσια
διαλόγου, παρουσιάζονται στο επόµενο σχήµα:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 285

Σχήµα 172 : Βοηθητικά εργαλεία για την προσθήκη νέων πεδίων στην επιφάνεια της αναφοράς

Η χρήση της Εργαλειοθήκης στη διαδικασία σχεδίασης της τρέχουσας ανα-


φοράς, γίνεται µε τον ίδιο ακριβώς τρόπο µε εκείνο που περιγράψαµε στο κεφάλαιο
που αναφέρεται στη δηµιουργία και επεξεργασία των φορµών. Ο χρήστης µπορεί
να επιλέξει από την εργαλειοθήκη τον τύπο του πεδίου που επιθυµεί να προσθέσει,
και στη συνέχεια χρησιµοποιώντας το αριστερό πλήκτρο του ποντικιού, καθορίζει το
σηµείο της επιφάνειας της έκθεσης στο οποίο θα τοποθετηθεί το νέο πεδίο – αυτό το
σηµείο µπορεί προφανώς να ανήκει σε οποιαδήποτε ενότητα της αναφοράς. Με εντε-
λώς ανάλογο τρόπο λαµβάνει χώρα η προσθήκη νέων πεδίων από τη λίστα πεδίων
του πίνακα ή του ερωτήµατος από το οποίο η αναφορά διαβάζει δεδοµένα (η
µόνη διαφορά είναι πως η προσθήκη του πεδίου γίνεται µέσω µιας διαδικασίας drag
and drop). Ας υποθέσουµε για παράδειγµα πως ο χρήσης επιθυµεί να προσθέσει το
πεδίο SSN στην κεφαλίδα σελίδας. Για να το κάνει αυτό θα πρέπει να επιλέξει το εν
λόγω πεδίο από τον κατάλογο πεδίων του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ, και στη συ-
νέχεια να σύρει και να αποθέσει το εικονίδιο του πεδίου στο σηµείο της κεφαλίδας
σελίδας στο οποίο επιθυµεί να το εµφανίσει. Αυτή η διαδικασία είναι εντελώς ανά-
λογη µε τη διαδικασία του καθορισµού των πεδίων ενός ερωτήµατος (query) όταν
αυτό υφίσταται επεξεργασία σε προβολή σχεδίασης.

ΚΑΘΟΡΙΣΜΟΣ Ι∆ΙΟΤΗΤΩΝ ΤΗΣ ΤΡΕΧΟΥΣΑΣ ΑΝΑΦΟΡΑΣ

Μετά την αναλυτική περιγραφή του τρόπου δηµιουργίας και διαµόρφωσης


των αναφορών στη Microsoft Access, ας περάσουµε τώρα στην παρουσίαση του
συνόλου των ιδιοτήτων που µπορούµε να καθορίσουµε για τα διάφορα στοιχεία
που περιέχονται στην αναφορά. Αυτά τα στοιχεία µπορεί να είναι είτε πλαίσια
ελέγχου, είτε ενότητες της αναφοράς (κεφαλίδες, κύριο µέρος και υποσέλιδα), αν και
φυσικά έχουµε τη δυνατότητα να ορίσουµε ιδιότητες και για την ίδια την αναφορά,
στο σύνολό της. Σε πλήρη αναλογία µε τις ιδιότητες των φορµών που παρουσιάσαµε
σε προηγούµενο κεφάλαιο, οι ιδιότητες των αναφορών χωρίζονται σε πέντε διαφορε-
τικές κατηγορίες. Από τις κατηγορίες αυτές, η πρώτη που φέρει το όνοµα «Μορφή»
(Layout Properties) επιτρέπει τον καθορισµό των χαρακτηριστικών εµφάνισης του
στοιχείου στο οποίο αναφέρεται, ενώ η δεύτερη, που φέρει το όνοµα «∆εδοµένα»
(Data Properties), χρησιµοποιείται για να ορίσουµε τον πίνακα ή το ερώτηµα τα
δεδοµένα του οποίου θα εµφανίζονται στην επιφάνεια της τρέχουσας αναφοράς. Η
τρίτη κατηγορία ιδιοτήτων που φέρει το όνοµα «Συµβάν» (Event Properties) επι-
τρέπει τον καθορισµό της µακροεντολής ή του κώδικα που θα εκτελεστεί κάθε φορά
που θα λαµβάνει χώρα η πραγµατοποίηση κάποιου συµβάντος, ενώ η τέταρτη κατη-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 286

γορία που φέρει το όνοµα «Άλλα» (Other Properties) επιτρέπει τον καθορισµό ιδιο-
τήτων που δεν µπορούν να τοποθετηθούν σε κάποια από τις προηγούµενες κατηγο-
ρίες. Για κάθε µια από αυτές τις τέσσερις κατηγορίες ιδιοτήτων, υπάρχει µια αντί-
στοιχη σελίδα στο φύλλο ιδιοτήτων του στοιχείου που χρησιµοποιούµε, ενώ, µία πέ-
µπτη σελίδα που φέρει τον τίτλο «Όλα» (All Properties) εµφανίζει το σύνολο των
ιδιοτήτων που συσχετίζονται µε το τρέχον στοιχείο επεξεργασίας. Η αναλυτική περι-
γραφή του συνόλου των ιδιοτήτων που µπορούµε να καθορίσουµε για τις αναφορές
της Microsoft Access, αποτελεί το αντικείµενο των σελίδων που ακολουθούν.

ΚΑΘΟΡΙΣΜΟΣ Ι∆ΙΟΤΗΤΩΝ ΠΟΥ ΣΥΣΧΕΤΙΖΟΝΤΑΙ ΜΕ ΤΙΣ ΕΝΟΤΗΤΕΣ


ΤΗΣ ΤΡΕΧΟΥΣΑΣ ΑΝΑΦΟΡΑΣ

Η διαδικασία καθορισµού των ιδιοτήτων για κάθε µια από τις ενότητες που
περιλαµβάνονται στην τρέχουσα αναφορά, λαµβάνει χώρα δια της χρήσης του πλαι-
σίου διαλόγου που παρουσιάζεται στο επόµενο σχήµα. Προκειµένου να εµφανίσουµε
αυτό το πλαίσιο, θα πρέπει κατά τα γνωστά να χρησιµοποιήσουµε την επιλογή «Ιδιό-
τητες» από το αναδυόµενο menu επιλογών που εµφανίζεται εάν πατήσουµε το δεξί
πλήκτρο του ποντικιού σε οποιοδήποτε σηµείο της επιφάνειας της ενότητας. Όσον
αφορά το είδος των ιδιοτήτων που µπορούµε να καθορίσουµε στο στάδιο αυτό της
διαδικασίας, αυτές σε γενικές γραµµές είναι οι ακόλουθες:

Σχήµα 172 : Καθορισµός ιδιοτήτων για τις ενότητες της τρέχουσας αναφοράς

• Όνοµα (Name Property): επιτρέπει τον καθορισµό του ονόµατος που θα


αποδώσουµε στην τρέχουσα ενότητα της αναφοράς. Όπως έχει ήδη αναφερθεί
σε προηγούµενο κεφάλαιο, αυτό το όνοµα θα πρέπει να ακολουθεί τους κανό-
νες ονοµατολογίας της Microsoft Access, ενώ το µέγιστο µήκος του περιορί-
ζεται στους 64 χαρακτήρες για τα αντικείµενα της βάσης, και στους 255 χα-
ρακτήρες για τα διάφορα στοιχεία ελέγχου.

• Αρχή νέας σελίδας (ForceNewPage Property): χρησιµοποιούµε την ιδιό-


τητα αυτή για να καθορίσουµε εάν οι διάφορες ενότητες της αναφοράς θα
εκτυπώνονται σε ξεχωριστή σελίδα η κάθε µία, ή όλες µαζί στην ίδια σε-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 287

λίδα. Ας σηµειωθεί πως αυτή η ιδιότητα µπορεί να τεθεί µόνο για τις ενότη-
τες της αναφοράς στο σύνολό της, και όχι για την κεφαλίδα και το υποσέ-
λιδο της κάθε σελίδας ξεχωριστά. Όσον αφορά την τιµή που µπορεί να λάβει
αυτή η ιδιότητα – η οποία εναλλακτικά µπορεί να τεθεί δια της χρήσης µιας
µακροεντολής ή κώδικα σε γλώσσα Visual Basic – αυτή µπορεί να είναι κά-
ποια από τις ακόλουθες τιµές:

1. Πουθενά (None): η τιµή αυτή που είναι και η προεπιλεγµένη επιτρέπει


την εκτύπωση της τρέχουσας ενότητας στην ίδια σελίδα µε την υπόλοιπη
αναφορά.

2. Πριν από Ενότητα (Before Section): χρησιµοποιώντας αυτή την τιµή επι-
βάλλουµε την εκτύπωση της τρέχουσας ενότητας, στην αρχή µιας νέας
σελίδας.

3. Μετά από Ενότητα (After Section): χρησιµοποιώντας αυτή την τιµή επι-
βάλλουµε την εκτύπωση της ενότητας που βρίσκεται αµέσως µετά την
τρέχουσα ενότητα, στην αρχή µιας νέας σελίδας.

4. Πριν & Μετά (Before & After): η τιµή αυτή επιβάλλει την εκτύπωση της
τρέχουσας ενότητας καθώς και εκείνης που ακολουθεί αµέσως µετά, στην
αρχή των δύο επόµενων σελίδων.

• ∆ηµιουργία γραµµής ή στήλης (NewRowOrCol Property): στην περίπτωση


κατά την οποία η αναφορά που διαµορφώνουµε έχει περισσότερες από µία στήλες
(multiple-column report), η ιδιότητα αυτή µας επιτρέπει να καθορίσουµε εάν η
τρέχουσα ενότητα και τα δεδοµένα που περιλαµβάνονται σε αυτή θα εκτυπω-
θούν σε µία νέα γραµµή ή σε µία νέα στήλη. Η ιδιότητα αυτή µπορεί να λάβει
µία από τις ακόλουθες τιµές:

1. Πουθενά (None): η τιµή αυτή που είναι και η προεπιλεγµένη, επιτρέπει


τον αυτόµατο καθορισµό των ορίων της γραµµής ή της στήλης, από τις
ρυθµίσεις του πλαισίου διαλόγου «∆ιαµόρφωση Σελίδας» (Page Setup)
που βρίσκεται στο κεντρικό menu επιλογών της εφαρµογής, και από το
διαθέσιµο χώρο της σελίδας εκτύπωσης.

2. Πριν από Ενότητα (Before Section): η τιµή αυτή επιτρέπει την εκτύπωση
της τρέχουσας ενότητας σε µία νέα γραµµή ή σε µία νέα στήλη, ενώ η
επόµενη ενότητα εκτυπώνεται στην ίδια γραµµή ή στήλη µε την τρέχουσα
ενότητα.

3. Μετά από Ενότητα (After Section): η τιµή αυτή επιτρέπει την εκτύπωση
του περιεχοµένου της τρέχουσας ενότητας στην τρέχουσα γραµµή ή
στήλη, ενώ η επόµενη ενότητα εκτυπώνεται σε µια νέα γραµµή ή στήλη.

4. Πριν & Μετά (Before & After): η τιµή αυτή επιτρέπει την εκτύπωση της
τρέχουσας και της επόµενης ενότητας, σε ξεχωριστές γραµµές ή στήλες.
Αυτό µε άλλα λόγια σηµαίνει πως η τρέχουσα ενότητα θα εκτυπωθεί σε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 288

µια νέα γραµµή ή στήλη, ενώ το ίδιο θα συµβεί και µε την αµέσως επό-
µενη ενότητα, η οποία και αυτή µε τη σειρά της θα εκτυπωθεί σε µία νέα
γραµµή ή στήλη.

• ∆ιατήρηση µαζί (KeepTogether Property): η ιδιότητα αυτή χρησιµοποιείται για


να καθορίσουµε εάν το σύνολο των πληροφοριών που περιλαµβάνονται στην
ενότητα µιας αναφοράς, θα εκτυπωθεί ή όχι στην ίδια σελίδα. Η εν λόγω ιδιό-
τητα, µπορεί να πάρει µόνο δύο τιµές, την τιµή «Ναι (Yes)» και την τιµή «Όχι
(No)» Στην πρώτη περίπτωση η Access εκτυπώνει το σύνολο των πληροφοριών
της ενότητας στην επόµενη σελίδα (εάν διαπιστώσει ότι δεν χωράνε στην τρέ-
χουσα) ενώ στη δεύτερη περίπτωση, λαµβάνει χώρα εκτύπωση του περιεχοµένου
της ενότητας σε περισσότερες από µία σελίδες.

• Ορατό (Visible Property): η ιδιότητα αυτή παίρνει µόνο τις τιµές «Ναι (Yes)»
και «Όχι (No)» και καθορίζει εάν η τρέχουσα ενότητα θα είναι ορατή ή όχι κατά
την προεπισκόπηση της τρέχουσας αναφοράς.

• Ανάπτυξη και Συρρίκνωση (CanGrow & CanShrink Properties): οι ιδιότητες


αυτές παίρνουν µόνο τις τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζουν την
εµφάνιση της τρέχουσας ενότητας της αναφοράς κατά την προεπισκόπηση ή την
εκτύπωσή της. Πιο συγκεκριµένα η ανάπτυξη ή η συρρίκνωση της τρέχουσας
ενότητας της αναφοράς γίνεται µε βάση τους επόµενους κανόνες:

Εάν η ιδιότητα CanGrow λάβει την τιµή «Ναι (Yes)», λαµβάνει χώρα αύξηση
της κατακόρυφης διάστασης της τρέχουσας ενότητας έτσι ώστε να εµφανι-
στούν και να εκτυπωθούν όλα τα πεδία που περιλαµβάνονται σε αυτή. Στην αντί-
θετη περίπτωση, και εφ’ όσον η ενότητα περιέχει πεδία τα οποία δεν φαίνονται
στην οθόνη (επειδή δεν χωράνε στην επιφάνεια της ενότητας λόγω του µικρού
µεγέθους της) αυτά δεν εµφανίζονται αλλά ούτε και εκτυπώνονται κατά τη
διαδικασία προεπισκόπησης και εκτύπωσης της αναφοράς.

Με εντελώς ανάλογο τρόπο, η ιδιότητα CanShrink προκαλεί την ελάττωση του


µεγέθους της ενότητας της αναφοράς, όταν τα πεδία που περιλαµβάνονται σε
αυτή, µπορούν να χωρέσουν και σε µικρότερη επιφάνεια. Πιο συγκεκριµένα, εάν
η ιδιότητα αυτή λάβει την τιµή «Ναι (Yes)», το µέγεθος της ενότητας συρρικνώ-
νεται και αναπροσαρµόζεται µε τέτοιο τρόπο ώστε όλα τα πεδία της ενότητας
να διατάσσονται επ’ ακριβώς στην επιφάνειά της και χωρίς να χάνεται κενός
χώρος. Στην αντίθετη περίπτωση το µέγεθος της ενότητας παραµένει αµετά-
βλητο, µε αποτέλεσµα εάν τα πεδία της αναφοράς καταλαµβάνουν πολύ µικρό-
τερο χώρο σε σχέση µε το συνολικό µέγεθος της αναφοράς, ο υπόλοιπος κενός
χώρος να παραµένει αχρησιµοποίητος.

• Ύψος (Height Property): η ιδιότητα αυτή επιτρέπει τον καθορισµό του µεγέ-
θους της ενότητας της αναφοράς κατά την κατακόρυφη διάσταση. Ο καθορι-
σµός αυτός γίνεται δια της καταχώρησης στο εν λόγω πεδίο της επιθυµητής σε
κάθε περίπτωση αριθµητικής τιµής. Εάν η τιµή αυτή δεν συνοδεύεται από κά-
ποια µονάδα µέτρησης, χρησιµοποιείται εκείνη που έχει καθορισθεί κατά το στά-
διο εγκατάστασης των Microsoft Windows και χρησιµοποιώντας το εικονίδιο

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 289

«Regional Settings» του Πίνακα Ελέγχου. Ωστόσο εάν επιθυµούµε να χρησιµο-


ποιήσουµε κάποια άλλη µονάδα µέτρησης, µπορούµε να το κάνουµε αναγράφο-
ντας αυτή τη µονάδα αµέσως µετά την αριθµητική τιµή του ύψους της ενότητας.
Για παράδειγµα εάν επιθυµούµε να διαµορφώσουµε τη κεφαλίδα της αναφοράς
έτσι ώστε το ύψος της να είναι ίσο µε 0.5 inches, θα πρέπει στο εν λόγω πεδίο να
καταχωρήσουµε την τιµή 0.5 in.

• Χρώµα φόντου (BackColor Property): χρησιµοποιούµε την ιδιότητα αυτή για


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

• Ειδικό εφέ (SpecialEffect Property) : η ιδιότητα αυτή επιτρέπει τον καθορισµό


του τρόπου εµφάνισης της ενότητας της τρέχουσας αναφοράς. Οι τιµές που
µπορεί να λάβει αυτή η ιδιότητα παρουσιάζονται στον ακόλουθο πίνακα µαζί µε
την προεπισκόπηση του τρόπου εµφάνισης για κάθε µία από αυτές τις τιµές.

Επίπεδο (Flat)

Υπερυψωµένο (Raised)

Βυθισµένο (Sunken)

• Ετικέτα (Tag Property): η ιδιότητα αυτή χρησιµοποιείται όταν επιθυµούµε να


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

• Με τη µορφοποίηση (Format Event): η τιµή αυτής της ιδιότητας (που είναι


ιδιότητα συµβάντος (event property)) είναι το όνοµα µιας µακροεντολής ή
κώδικα σε γλώσσα Visual Basic που εκτελείται κάθε φορά που λαµβάνει χώρα
το συµβάν της µορφοποίησης (format event). Αυτό το συµβάν πραγµατοποιεί-
ται όταν η Microsoft Access ταυτοποιήσει το σύνολο των δεδοµένων που περι-
λαµβάνονται στην τρέχουσα ενότητα της φόρµας αλλά πριν η εφαρµογή µορφο-
ποιήσει αυτή την ενότητα έτσι ώστε να είναι δυνατή η προεπισκόπηση ή η εκτύ-
πωσή της.

• Με την εκτύπωση (Print Event): το συµβάν της εκτύπωσης (print event)


λαµβάνει χώρα αµέσως µετά την πραγµατοποίηση του συµβάντος της µορφοποί-
ησης (format event) που παρουσιάστηκε στην προηγούµενη παράγραφο, αλλά
πριν την εκτύπωση της ενότητας της τρέχουσας αναφοράς. Η τιµή αυτής της ιδιό-
τητας είναι το όνοµα µιας µακροεντολής ή ενός προγράµµατος σε γλώσσα Visual
Basic που θα εκτελεσθεί όταν λάβει χώρα η πραγµατοποίηση αυτού του συµβά-
ντος.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 290

• Με την οπισθοχώρηση (Retreat Event): σε ορισµένες περιπτώσεις και κατά τη


διάρκεια της επεξεργασίας µίας αναφοράς, η Microsoft Access θα πρέπει να επι-
στρέψει σε κάποια προηγούµενη ενότητα, προκειµένου να ελέγξει κάποιες από τις
παραµέτρους µορφοποίησης για αυτή την ενότητα. Στις πιο συνηθισµένες περι-
πτώσεις, ο έλεγχος αυτός αφορά την ύπαρξη κάποιων ενοτήτων ή πεδίων της
αναφοράς, καθώς και τον υπολογισµό του χώρου που καταλαµβάνουν αυτά τα
στοιχεία πάνω στην επιφάνεια της τρέχουσας αναφοράς. Τυπικές περιπτώσεις
που χαρακτηρίζονται από έλεγχο αυτού του είδους είναι η πραγµατοποίηση των
διαδικασιών που συσχετίζονται µε ιδιότητες όπως είναι η KeepTogether, η
CanGrow και η CanShrink που παρουσιάστηκαν σε προηγούµενες ενότητες. Το
συµβάν της οπισθοχώρησης (Retreat Event) λαµβάνει χώρα κάθε φορά που η
Microsoft Access επιστρέφει σε κάποια προηγούµενη ενότητα, και το είδος της
επεξεργασίας που θα πραγµατοποιηθεί κατά την εµφάνιση αυτού του συµβάντος
καθορίζεται δια της απόδοσης τιµής σε αυτή την ιδιότητα της τρέχουσας αναφο-
ράς. Όπως στην προηγούµενη ενότητα, έτσι και τώρα, αυτή η τιµή µπορεί να είναι
το όνοµα µιας µακροεντολής ή ενός προγράµµατος γραµµένο σε γλώσσα Visual
Basic.

ΚΑΘΟΡΙΣΜΟΣ Ι∆ΙΟΤΗΤΩΝ ΤΗΣ ΤΡΕΧΟΥΣΑΣ ΑΝΑΦΟΡΑΣ

Μετά την αναλυτική περιγραφή των ιδιοτήτων που µπορούµε να καθορίσουµε


για κάθε µια από τις ενότητες της αναφοράς, ας περάσουµε τώρα σε εκείνες τις ιδιό-
τητες οι οποίες συσχετίζονται µε την ίδια την αναφορά, στο σύνολό της. Προκειµέ-
νου να εµφανίσουµε το φύλλο ιδιοτήτων της τρέχουσας αναφοράς, θα πρέπει να πα-
τήσουµε το δεξί πλήκτρο του ποντικιού σε οποιοδήποτε σηµείο της οθόνης που βρί-
σκεται πέρα από τα όρια της αναφοράς σε προβολή σχεδίασης, και από το αναδυό-
µενο menu επιλογών που θα εµφανιστεί, να χρησιµοποιήσουµε την επιλογή «Ιδιότη-
τες». Εναλλακτικά µπορούµε να ενεργοποιήσουµε αυτή τη λειτουργία από το menu
«Προβολή» που βρίσκεται στο κεντρικό menu επιλογών της εφαρµογής. Στην περί-
πτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το πλαίσιο διαλόγου του
επόµενου σχήµατος, από το οποίο µπορούµε να διαµορφώσουµε τις ιδιότητες της
τρέχουσας αναφοράς ανάλογα µε τις απαιτήσεις µας. Ο ρόλος αυτών των ιδιοτήτων
στη γενικότερη διαδικασία σχεδίασης της αναφοράς και η φύση των τιµών που κατα-
χωρούµε σε αυτές, παρουσιάζονται στις επόµενες παραγράφους.

• Προέλευση εγγραφών (RecordSource Property): χρησιµοποιούµε αυτή την


ιδιότητα προκειµένου να καθορίσουµε την προέλευση των δεδοµένων της τρέ-
χουσας αναφοράς. Αυτή η προέλευση µπορεί να είναι ένας πίνακας, ένα ερώ-
τηµα ή εναλλακτικά µία εντολή της γλώσσας SQL η οποία καταχωρείται ως
τιµή στην εν λόγω ιδιότητα. Σε πλήρη αναλογία µε την προέλευση εγγραφών µιας
φόρµας, µπορούµε να ορίσουµε την πηγή των δεδοµένων για την αναφορά στο
σύνολό της, και στη συνέχεια, να συσχετίσουµε πεδία της πηγής προέλευσης,
µε αντίστοιχα πεδία πάνω στην επιφάνεια της τρέχουσας αναφοράς. Για πα-
ράδειγµα µπορούµε να ορίσουµε ως προέλευση δεδοµένων της τρέχουσας αναφο-
ράς το ερώτηµα ΑΠΑΣΧΟΛΗΣΗ, και στη συνέχεια να συσχετίσουµε κάποιο πε-
δίο κειµένου της αναφοράς µε το πεδίο LNAME του ερωτήµατος ΑΠΑΣΧΟ-
ΛΗΣΗ. Αυτό σηµαίνει πως κατά την προεπισκόπηση ή την εκτύπωση της ανα-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 291

φοράς στη θέση του συγκεκριµένου πεδίου, θα εµφανίζονται τα επώνυµα των


υπαλλήλων της εταιρείας.

Σχήµα 173 : Καθορισµός ιδιοτήτων της τρέχουσας αναφοράς

• Φίλτρο (Filter Property): σε περίπτωση κατά την οποία δεν επιθυµούµε να


εµφανίσουµε όλες τις εγγραφές αλλά µόνο εκείνες που ικανοποιούν κάποια συν-
θήκη, µπορούµε να χρησιµοποιήσουµε αυτή την ιδιότητα για να καθορίσουµε το
φίλτρο που θα εφαρµοσθεί στις εγγραφές του πίνακα ή του ερωτήµατος από
το οποίο η αναφορά παίρνει δεδοµένα. Πιο συγκεκριµένα, η τιµή που καταχω-
ρούµε στην εν λόγω ιδιότητα είναι µία συµβολοσειρά παρόµοια µε εκείνη που
χρησιµοποιείται στην πρόταση WHERE της εντολής SELECT της γλώσσας
SQL. Για παράδειγµα, για να εµφανίσουµε µόνο τις εγγραφές του ερωτήµατος
ΑΠΑΣΧΟΛΗΣΗ που αναφέρονται στο Research Department, το φίλτρο που θα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 292

κατασκευάσουµε θα έχει τη µορφή «DName = Research». Περισσότερες λεπτο-


µέρειες για την κατασκευή και χρήση φίλτρων στη Microsoft Access, µπορούν να
βρεθούν στο οµώνυµο κεφάλαιο.

• Φιλτράρισµα κατά (FilterOn Property): η ιδιότητα αυτή παίρνει µόνο τις τιµές
«Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν το φίλτρο που έχει ορισθεί στην
προηγούµενη ιδιότητα, θα εφαρµοσθεί ή όχι πάνω στις εγγραφές του αντικειµένου
προέλευσης της τρέχουσας αναφοράς.

• Κατάταξη κατά (OrderBy Property): στην περίπτωση κατά την οποία τα δεδο-
µένα της αναφοράς επιθυµούµε να εκτυπώνονται ταξινοµηµένα, θα πρέπει να κα-
ταχωρήσουµε ως τιµή σε αυτή την ιδιότητα, το όνοµα του πεδίου του αντικειµέ-
νου προέλευσης ως προς το οποίο θέλουµε να λάβει χώρα αυτή η ταξινόµηση.
Για παράδειγµα εάν επιθυµούµε να λάβει χώρα ταξινόµηση των εγγραφών της
αναφοράς ΑΠΑΣΧΟΛΗΣΗ ως προς το όνοµα του έργου, θα πρέπει ως τιµή για
αυτή την ιδιότητα, να καταχωρήσουµε τη συµβολοσειρά «Project Name». Θα
πρέπει να σηµειωθεί πως η προεπιλεγµένη συµπεριφορά της εφαρµογής είναι η
ταξινόµηση των εγγραφών κατά την αύξουσα διάταξη. Εάν επιθυµούµε η ταξι-
νόµηση να πραγµατοποιηθεί κατά τη φθίνουσα διάταξη, θα πρέπει δίπλα από το
όνοµα του πεδίου να βάλουµε τη λέξη DESC (από την αγγλική λέξη Descend-
ing). Έτσι, για να ταξινοµήσουµε τις εγγραφές της αναφοράς ως προς τις ώρες
απασχόλησης και κατά τη φθίνουσα διάταξη, θα καταχωρήσουµε στην ιδιότητα
αυτή την τιµή HOURS DESC. Τέλος είναι σηµαντικό να αναφερθεί, πως η ταξι-
νόµηση των εγγραφών της αναφοράς µπορεί να γίνει ως προς περισσότερα από
ένα πεδία. Για να το κάνουµε αυτό θα πρέπει να καταχωρήσουµε σε αυτή την
ιδιότητα, τα ονόµατα όλων αυτών των πεδίων χωρισµένα µε κόµµα. Έτσι η
καταχώρηση της τιµής HOURS DESC, Project Name σε αυτή την ιδιότητα, έχει
ως αποτέλεσµα την ταξινόµηση των εγγραφών της αναφοράς, πρώτα ως προς τις
ώρες εργασίας και έπειτα ως προς το όνοµα του έργου. Η ύπαρξη δε της συµ-
βολοσειράς DESC, έχει ως αποτέλεσµα την ταξινόµηση των εγγραφών ως προς
τις ώρες εργασίας ανά εβδοµάδα, κατά τη φθίνουσα διάταξη.

• Κατάταξη κατά Ενεργοποιηµένο (OrderByOn Property): η ιδιότητα αυτή


παίρνει µόνο τις τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν η ταξινό-
µηση που έχει ορισθεί δια της χρήσης της προηγούµενης ιδιότητας, θα εφαρµο-
σθεί ή όχι πάνω στις εγγραφές του αντικειµένου προέλευσης της τρέχουσας ανα-
φοράς.

• Λεζάντα (Caption Property): χρησιµοποιούµε την ιδιότητα αυτή για να ορί-


σουµε τον τίτλο της τρέχουσας φόρµας, που θα εµφανίζεται κατά την προεπισκό-
πησή της σε προβολή εκτύπωσης.

• Κλειδώµατα εγγραφών (RecordLocks Property): στη γενική περίπτωση η ιδιό-


τητα αυτή χρησιµοποιείται προκειµένου να καθορίσουµε τον τρόπο µε τον οποίο
θα λαµβάνει χώρα η προστασία των εγγραφών, κάθε φορά που δύο ή περισ-
σότεροι χρήστες θα προσπαθούν να τις προσπελάσουν ταυτόχρονα. Στην περί-
πτωση των αναφορών η χρήση αυτής της ιδιότητας επιτρέπει τον καθορισµό του
τρόπου προστασίας των εγγραφών κατά τη διάρκεια της προεπισκόπησης ή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 293

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

1. Χωρίς κλειδώµατα (No Locks): η τιµή αυτή που είναι και η προεπιλεγ-
µένη επιτρέπει την προεπισκόπηση ή την εκτύπωση της αναφοράς χωρίς
να λαµβάνεται µέριµνα για την προστασία των εγγραφών του αντικει-
µένου προέλευσης.

2. Όλες οι εγγραφές (All Records): η χρήση αυτής της τιµής στη συγκεκρι-
µένη ιδιότητα, προκαλεί το κλείδωµα όλων των εγγραφών του αντικει-
µένου προέλευσης, από το οποίο η αναφορά παίρνει δεδοµένα. Αυτό
σηµαίνει πως κατά τη διάρκεια της προεπισκόπησης ή της εκτύπωσης της
αναφοράς, δεν είναι δυνατή η προσθήκη, διαγραφή και τροποποίηση
εγγραφών των πινάκων που συσχετίζονται µε την τρέχουσα αναφορά.
Αντίθετα, αυτού του είδος οι διαδικασίες µπορούν να πραγµατοποιηθούν
µόνο όταν έχει ολοκληρωθεί η διαδικασία της προεπισκόπησης ή εκτύπω-
σης.

• Κεφαλίδα και υποσέλιδο σελίδας (PageHeader και PageFooter Properties):


χρησιµοποιούµε αυτές τις ιδιότητες για να καθορίσουµε εάν η κεφαλίδα (ή το
υποσέλιδο) σελίδας θα εκτυπωθούν στην ίδια σελίδα µαζί µε την κεφαλίδα (ή
το υποσέλιδο) της αναφοράς. Οι τιµές που µπορούν να λάβουν οι ιδιότητες αυ-
τές, είναι οι ακόλουθες:

1. Όλες οι σελίδες (All Pages): στην περίπτωση αυτή (που είναι και η
προεπιλεγµένη) η κεφαλίδα (ή το υποσέλιδο) σελίδας θα εκτυπωθεί σε
όλες τις σελίδες της τρέχουσας αναφοράς.

2. Χωρίς κεφαλίδα έκθεσης (Not With Rpt Hdr): στην περίπτωση αυτή η
κεφαλίδα (ή το υποσέλιδο) σελίδας δεν εκτυπώνεται στην ίδια σελίδα µε
την κεφαλίδα της αναφοράς.

3. Χωρίς υποσέλιδο έκθεσης (Not With Rpt Ftr): στην περίπτωση αυτή η
κεφαλίδα (ή το υποσέλιδο) σελίδας δεν εκτυπώνεται στην ίδια σελίδα µε
το υποσέλιδο της αναφοράς, το οποίο εκτυπώνεται σε µία ξεχωριστή σε-
λίδα.

4. Χωρίς κεφαλίδα και υποσέλιδο έκθεσης (Not With Rpt Hdr/Ftr): στην
περίπτωση αυτή η κεφαλίδα (ή το υποσέλιδο) σελίδας δεν θα εκτυπωθεί
σε µία σελίδα, εάν στη σελίδα αυτή πρόκειται να εκτυπωθεί η κεφαλίδα ή
το υποσέλιδο της αναφοράς. Όσον αφορά το υποσέλιδο της αναφοράς,
αυτό εκτυπώνεται σε µία νέα σελίδα.

• Οµαδοποίηση ηµεροµηνίας (DateGrouping Property): χρησιµοποιούµε αυτή


την ιδιότητα για να καθορίσουµε τον τρόπο µε τον οποίο θα λαµβάνει χώρα η
οµαδοποίηση των ηµεροµηνιών σε µία αναφορά. Η ιδιότητα αυτή µπορεί να
λάβει µία εκ των δύο επόµενων τιµών:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 294

1. Χρήση ρυθµίσεων συστήµατος (Use System Settings): αυτή η τιµή


υπαγορεύει στη Microsoft Access να χρησιµοποιήσει τις ρυθµίσεις που
έχουν καθορισθεί δια της χρήσης του εικονιδίου Regional Settings του
Πίνακα Ελέγχου.

2. Προεπιλεγµένες Ρυθµίσεις Η.Π.Α. (US Defaults): αυτή η τιµή επιτρέπει


την οµαδοποίηση των ηµεροµηνιών χρησιµοποιώντας τις ρυθµίσεις των
Η.Π.Α. για την πρώτη ηµέρα της εβδοµάδας και για την πρώτη εβδοµάδα
του έτους.

• ∆ιατήρηση µαζί στην οµάδα (GrpKeepTogether Property): η πιο χαρακτηρι-


στική εφαρµογή αυτής της ιδιότητας είναι ο καθορισµός του τρόπου εµφάνισης
των δεδοµένων µιας οµάδας. Πιο συγκεκριµένα, στην περίπτωση µιας αναφοράς
που περιέχει περισσότερες από µία στήλες (multi-column report) η ιδιότητα
αυτή χρησιµοποιείται για να καθορίσουµε εάν όλα τα δεδοµένα της οµάδας θα
πρέπει να εµφανιστούν στην ίδια στήλη. Η ιδιότητα αυτή µπορεί να πάρει µία εκ
τω επόµενων δύο τιµών:

1. Ανά σελίδα (Per Page): η χρήση αυτής της τιµής επιβάλλει την εκτύπωση
όλων των δεδοµένων µιας οµάδας στην ίδια σελίδα της αναφοράς

2. Ανά στήλη (Per Column): η χρήση αυτής της τιµής επιβάλλει την εκτύ-
πωση όλων των δεδοµένων µιας οµάδας στην ίδια στήλη της αναφοράς.

• Πλάτος (Height Property): η ιδιότητα αυτή επιτρέπει τον καθορισµό του πλά-
τους της αναφοράς και εφαρµόζεται µόνο στην αναφορά, στο σύνολό της, και
όχι στις µεµονωµένες ενότητες που περιέχονται σε αυτή. Η τιµή που καταχωρεί-
ται στην εν λόγω ιδιότητα είναι το πλάτος της αναφοράς σε εκατοστά, αν και
είναι δυνατή η χρήση οποιασδήποτε µονάδας µέτρησης (στην περίπτωση αυτή, το
όνοµα αυτής της µονάδας θα πρέπει να καταχωρηθεί αµέσως µετά την τιµή του
πλάτους της αναφοράς).

• Εικόνα (Picture Property): η τιµή αυτής της ιδιότητας είναι το όνοµα και η δια-
δροµή ενός αρχείου εικόνας η οποία θα χρησιµοποιηθεί ως εικόνα φόντου
(background picture) στην τρέχουσα αναφορά. Αυτό το αρχείο µπορεί να ανήκει
σε κάποιους από τους γνωστούς τύπους αρχείων γραφικών (BMP, GIF, JPG,
κλπ) και ο καθορισµός του γίνεται δια της χρήσης του κατάλληλου πλαισίου δια-
λόγου.

• Τύπος Εικόνας (PictureType Property): η ιδιότητα αυτή χρησιµοποιείται για


τον καθορισµό του τρόπου µε τον οποίο το αρχείο της εικόνας φόντου θα
χρησιµοποιηθεί στην τρέχουσα αναφορά, και µπορεί να λάβει µία από τις επό-
µενες δύο τιµές:

1. Ενσωµατωµένο (Embedded): στην περίπτωση αυτή το αρχείο εικόνας


ενσωµατώνεται στη βάση δεδοµένων και γίνεται αναπόσπαστο κοµµάτι
της εφαρµογής.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 295

2. Συνδεδεµένο (Linked): στην περίπτωση αυτή η εικόνα εµφανίζεται στην


επιφάνεια της αναφοράς χωρίς όµως το αρχείο που την περιέχει να ενσω-
µατώνεται στη βάση. Η προσπέλαση του αρχείου γίνεται δια της χρήσης
ενός δείκτη (pointer) προς το αρχείο, που διατηρείται και ενηµερώνεται
συνεχώς από την εφαρµογή.

Από την περιγραφή του τρόπου λειτουργίας του προγράµµατος για κάθε µία από
αυτές τις δύο τιµές, είναι προφανές πως ένα οποιοδήποτε αντικείµενο (και όχι
µόνο ένα αρχείο εικόνας) µπορεί να χρησιµοποιηθεί από τις εφαρµογές που εκτε-
λούνται µέσα από τα λειτουργικά συστήµατα της οικογένειας των Microsoft
Windows, µε δύο διαφορετικούς τρόπους. Ο πρώτος τρόπος περιλαµβάνει την
ενσωµάτωση του αντικειµένου στην εφαρµογή. Αυτό σηµαίνει πως το αντικεί-
µενο γίνεται αναπόσπαστο τµήµα του προγράµµατος, και εποµένως, το συνο-
λικό µέγεθος της εφαρµογής αυξάνεται κατά το µέγεθος του αρχείου που πε-
ριέχει αυτό το αντικείµενο. Το προφανές µειονέκτηµα αυτής της µεθόδου, είναι
πως εάν λάβει χώρα τροποποίηση του αντικειµένου (για παράδειγµα αλλαγή
των χρωµάτων µιας εικόνας) αυτό θα πρέπει να ενσωµατωθεί εκ νέου στην
εφαρµογή, αντικαθιστώντας το παλαιότερο στιγµιότυπό του.

Από την άλλη πλευρά, η διαδικασία της σύνδεσης του αντικειµένου, δεν ενσω-
µατώνει το αντικείµενο στην εφαρµογή αλλά δηµιουργείται και διατηρείται
ένας δείκτης (pointer) προς το αρχείο του συστήµατος που περιέχει το αντι-
κείµενο που θέλουµε να χρησιµοποιήσουµε. Αυτός ο τρόπος χρήσης του αντι-
κειµένου, δεν παρουσιάζει τα µειονεκτήµατα που χαρακτηρίζουν την ενσωµά-
τωσή του, καθώς ούτε το µέγεθος της εφαρµογής αυξάνεται, αλλά ούτε και
απαιτείται συνεχής ενηµέρωση του αντικειµένου (αφού ο δείκτης θα αναφέ-
ρεται κάθε φορά στο σωστό αρχείο). Το προφανές µειονέκτηµα αυτής της µεθό-
δου είναι πως µαζί µε το κύριο αρχείο της εφαρµογής θα πρέπει να διατη-
ρούµε κάθε φορά και όλα τα αρχεία των οποίων τα αντικείµενα χρησιµο-
ποιούνται από την εφαρµογή µας δια της χρήσης του µηχανισµού της σύνδε-
σης. Αυτές οι δύο εναλλακτικές προσεγγίσεις όσον αφορά τη χρήση ενός αντικει-
µένου συνιστούν την τεχνολογία OLE (Object Linking and Embedding) και
εκείνη που χρησιµοποιείται σε κάθε περίπτωση εξαρτάται από πολλούς παράγο-
ντες, όπως είναι για παράδειγµα οι ανάγκες που πρόκειται να καλύψει. Περισσό-
τερες λεπτοµέρειες για την τεχνολογία OLE µπορούν να βρεθούν στη βιβλιογρα-
φία.

• Τρόπος Αλλαγής Μεγέθους Εικόνας (PictureSizeMode Property): χρησιµο-


ποιούµε αυτή την ιδιότητα για να καθορίσουµε τον τρόπο µε τον οποίο η εικόνα
φόντου της αναφοράς θα προσαρµοσθεί έτσι ώστε να καλύψει πλήρως την
επιφάνειά της. Η εν λόγω ιδιότητα, µπορεί να λάβει µία από τις τρεις επόµενες
τιµές:

1. Απόσπασµα (Clip): η τιµή αυτή (που είναι και η προεπιλεγµένη) εµφανί-


ζει την εικόνα στο φυσικό της µέγεθος. Στην περίπτωση κατά την οποία
το µέγεθος της εικόνας είναι µεγαλύτερο από το µέγεθος της αναφοράς,
λαµβάνεται υπ’ όψιν µόνο το τµήµα της εικόνας που καλύπτει την

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 296

επιφάνεια της αναφοράς, ενώ το υπόλοιπο τµήµα της αποκόπτεται και


αγνοείται τελείως.
2. Αυξοµείωση (Stretch): η τιµή αυτή χρησιµοποιείται σε περιπτώσεις κατά
τις οποίες το µέγεθος της εικόνας φόντου είναι µικρότερο από το µέγε-
θος της αναφοράς. Στην περίπτωση αυτή οι διαστάσεις της εικόνας µε-
ταβάλλονται µε τέτοιο τρόπο ώστε η εικόνα να καλύπτει επακριβώς
όλη την επιφάνεια της αναφοράς. Αυτή η παραµόρφωση της εικόνας
εφαρµόζεται ακόµη και εάν η µεταβολή του µεγέθους της οδηγεί σε µετα-
βολή του λόγου του ύψους προς το πλάτος της εικόνας.

3. Ζουµ (Zoom): η τιµή αυτή όπως και η προηγούµενη χρησιµοποιείται σε


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

• Στοίχιση Εικόνας (PictureAlignment Property): χρησιµοποιούµε την ιδιότητα


αυτή για να καθορίσουµε την ακριβή θέση επί της επιφάνειας της αναφοράς
στην οποία θα εµφανιστεί η εικόνα φόντου που έχει καθορισθεί σε προηγούµενο
στάδιο. Η ιδιότητα αυτή µπορεί να λάβει µία από τις τιµές (α) Άνω Αριστερά
(Top-Left), (β) Άνω ∆εξιά (Top Right), Κέντρο (Center), Κάτω Αριστερά
(Bottom Left) και (ε) Κάτω ∆εξιά (Bottom Right) οι οποίες έχουν ως αποτέλε-
σµα την εµφάνιση της εικόνας φόντου της αναφοράς στην αντίστοιχη θέση.

• Παράθεση Εικόνας (PictureTiling Property): η ιδιότητα αυτή λαµβάνει µία από


τις τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν η εικόνα φόντου θα
επαναλαµβάνεται (ή όχι) στην επιφάνεια της τρέχουσας αναφοράς µέχρι να
την καλύψει πλήρως.

• Σελίδες Εικόνας (PicturePages Property): χρησιµοποιούµε την ιδιότητα αυτή


για να καθορίσουµε σε ποιες από τις σελίδες της αναφοράς θα εµφανισθεί η
εικόνα φόντου που έχει καθοριστεί στο προηγούµενο στάδιο. Η ιδιότητα αυτή
µπορεί να λάβει κάποια από τις επόµενες τρεις τιµές:

1. Όλες οι σελίδες (All Pages): η τιµή αυτή (που είναι και η προεπιλεγµένη)
έχει ως αποτέλεσµα την εµφάνιση της εικόνας φόντου σε όλες τις σελίδες της
αναφοράς.

2. Πρώτη Σελίδα (First Page): η τιµή αυτή έχει ως αποτέλεσµα την εµφάνιση
της εικόνας φόντου µόνο στην πρώτη σελίδα της αναφοράς.

3. Καµία Σελίδα (No Pages): η τιµή αυτή έχει ως αποτέλεσµα την προεπισκό-
πηση ή την εκτύπωση των σελίδων της αναφοράς χωρίς την εµφάνιση της ει-
κόνας φόντου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 297

• Γραµµή menu (MenuBar Property): χρησιµοποιούµε αυτή την ιδιότητα για να


καθορίσουµε κάποιο menu επιλογών που θα χρησιµοποιήσουµε για τη διαχείριση
της βάσης δεδοµένων. Αυτά τα menu επιλογών µπορούν να δηµιουργηθούν εάν
µεταφερθούµε στην κεντρική γραµµή εργαλείων της Microsoft Access και
από εκεί επιλέξουµε «Προβολή» και στη συνέχεια «Γραµµές Εργαλείων» και
«Προσαρµογή». Στην περίπτωση αυτή εµφανίζεται ένα ειδικό πλαίσιο διαλόγου
από το οποίο µπορούµε να δηµιουργήσουµε ένα νέο menu επιλογών και να καθο-
ρίσουµε το σύνολο των διαδικασιών που θα πραγµατοποιούνται από αυτό. Για
αυτό το νέο menu επιλογών θα πρέπει να καθορίσουµε κάποιο όνοµα το οποίο
περνάµε ως παράµετρο στην εν λόγω ιδιότητα. Περισσότερες λεπτοµέρειες για τη
δηµιουργία προσαρµοσµένων menus επιλογών µπορούν να βρεθούν στη βιβλιο-
γραφία.

• Γραµµή εργαλείων (ToolBar Property): σε πλήρη αναλογία µε την προηγού-


µενη ιδιότητα, µπορούµε να χρησιµοποιήσουµε αυτή την ιδιότητα της αναφοράς
για να καθορίσουµε κάποιο προσαρµοσµένη γραµµή εργαλείων που θα χρησι-
µοποιηθεί µαζί µε την τρέχουσα αναφορά. Στην περίπτωση αυτή η τιµή που κα-
ταχωρούµε σε αυτή την ιδιότητα, είναι το όνοµα της γραµµής εργαλείων που
επιθυµούµε να χρησιµοποιήσουµε. Η διαδικασία της δηµιουργίας προσαρµο-
σµένων γραµµών εργαλείων γίνεται µε παρόµοιο τρόπο µε εκείνη της δηµιουρ-
γίας προσαρµοσµένων menus επιλογών και ο αναγνώστης παραπέµπεται ξανά στη
σχετική βιβλιογραφία.

• Γραµµή menu συντόµευσης (ShortcutMenuBar Property): η ιδιότητα αυτή


επιτρέπει τον καθορισµό ενός menu συντόµευσης (shortcut menu) που θα εµ-
φανίζεται κάθε φορά που ο χρήστης χρησιµοποιεί το δεξί πλήκτρο του ποντικιού
πάνω στην επιφάνεια της τρέχουσας αναφοράς. Αυτά τα menu επιλογών δηµιουρ-
γούνται µε τον ίδιο ακριβώς τρόπο µε τον οποίο δηµιουργούνται οι γραµµές εργα-
λείων και επιλογών που παρουσιάσαµε στις προηγούµενες παραγράφους.

• Πλέγµα Χ και Πλέγµα Υ (GridX & GridY Properties): όπως έχει ήδη αναφερ-
θεί σε προηγούµενη ενότητα, ένα από τα βασικά εργαλεία του χρήστη για την
επεξεργασία της αναφοράς σε προβολή σχεδίασης, είναι το πλέγµα (grid), το
οποίο χρησιµοποιείται για τη στοίχιση των στοιχείων ελέγχου πάνω στην επι-
φάνεια της αναφοράς. Οι τιµές που καταχωρούµε σε αυτές τις δύο ιδιότητες
αντιστοιχούν στον αριθµό των υποδιαιρέσεων ανά µονάδα µέτρησης κατά την
οριζόντια (GridX) και κατακόρυφη (GridY) διεύθυνση αυτού του πλέγµατος
και θα πρέπει να ανήκουν στο διάστηµα [1,64]. Είναι προφανές πως η χρήση µε-
γάλων τιµών σε αυτές τις δύο ιδιότητες, προκαλεί την αύξηση της διακριτικής
ικανότητας όσον αφορά την στοίχιση των στοιχείων ελέγχου στην επιφάνεια της
τρέχουσας αναφοράς.

• ∆ιάταξη εκτύπωσης (LayoutForPrint Property): η ιδιότητα αυτή µπορεί να


λάβει µία από τις τιµές «Ναι (Yes)» και «Όχι (No)», και καθορίζει εάν η ανα-
φορά χρησιµοποιεί γραµµατοσειρές της οθόνης (screen fonts) ή γραµµατο-
σειρές του εκτυπωτή (printer fonts). Όπως έχει ήδη αναφερθεί στο κεφάλαιο
που διαπραγµατεύεται τις φόρµες της εφαρµογής, οι γραµµατοσειρές οθόνης συ-
νήθως βρίσκονται εγκατεστηµένες στο σύστηµά µας, σε αντίθεση από τις

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 298

γραµµατοσειρές του εκτυπωτή, οι οποίες εγκαθίστανται µαζί µε το λογισµικό


που συνοδεύει τον εκτυπωτή. Αυτό ενδέχεται να δηµιουργήσει πρόβληµα σε
περίπτωση κατά την οποία ο εκτυπωτής στον οποίο εκτυπώνεται η αναφορά είναι
διαφορετικός από εκείνον για τον οποίο έλαβε χώρα η σχεδίασή της, καθώς
ενδέχεται κάποιες από τις γραµµατοσειρές που χρησιµοποιούµε, να
αντικατασταθούν από κάποιες άλλες.

• Γρήγορη εκτύπωση σε εκτυπωτή Laser (FastLaserPrinting Property): σε ορι-


σµένες περιπτώσεις και ιδιαίτερα σε διαδικασίες εκτυπώσεων µεγάλου αριθµού
αναφορών µε µεγάλο πλήθος σελίδων, είναι επιθυµητή η επιτάχυνση της διαδι-
κασίας εκτύπωσης. Για να το κάνουµε αυτό, µπορούµε να ζητήσουµε από την
Access να αντικαταστήσει τις γραµµές και τα τετράγωνα που εµφανίζονται
στην αναφορά, µε ειδικούς ASCII χαρακτήρες (όπως είναι ο «_» και ο «|»), δια-
δικασία, η οποία οδηγεί σε γρηγορότερη εκτύπωση, κυρίως σε περιπτώσεις εκτυ-
πώσεων σε εκτυπωτή Laser. Προκειµένου να καθορίσουµε τη συµπεριφορά του
προγράµµατος µε τον τρόπο που προαναφέραµε, µπορούµε να χρησιµοποιήσουµε
αυτή την ιδιότητα. Πιο συγκεκριµένα, εάν θέλουµε να επιταχύνουµε τη διαδι-
κασία εκτύπωσης αντικαθιστώντας τις γραµµές και τα τετράγωνα µε ειδι-
κούς χαρακτήρες θα καταχωρήσουµε σε αυτή την ιδιότητα την τιµή «Ναι
(Yes)», ενώ στην αντίθεση περίπτωση θα καταχωρήσουµε την τιµή «Όχι
(No)».

• Αρχείο Βοηθείας και Αναγνωριστικό Θέµατος Βοηθείας (HelpFile &


HelpContextID Properties): οι ιδιότητες αυτές χρησιµοποιούνται για να ορί-
σουµε το είδος της βοήθειας που θα εµφανισθεί εάν χρησιµοποιήσουµε το
πλήκτρο F1. Όπως έχει ήδη αναφερθεί και στο κεφάλαιο που διαπραγµατεύεται
τις φόρµες της εφαρµογής, για κάθε αντικείµενο της αναφοράς θα πρέπει να ορί-
σουµε ένα αναγνωριστικό βοήθειας (HelpContextID) που θα ταυτοποιεί το
αντικείµενο αυτό µε µοναδικό τρόπο. Αυτό το αναγνωριστικό είναι ένας ακέ-
ραιος µεγάλου µήκους (long integer) µε τιµή στο διάστηµα [0, 2.147.483.647]
και επιτρέπει την εµφάνιση του τµήµατος του αρχείου βοηθείας που θα συσχετί-
ζεται µε το συγκεκριµένο αντικείµενο της αναφοράς. Από την άλλη πλευρά, το
ίδιο το αρχείο βοήθειας θα πρέπει να δηµιουργηθεί ξεχωριστά από την εφαρµογή
χρησιµοποιώντας τις γνωστές µεθόδους δηµιουργίας αρχείων αυτού του είδους.
Στη συνέχεια θα πρέπει να καθορίσουµε αυτό το αρχείο ως το αρχείο βοή-
θειας της αναφοράς, κάτι που το κάνουµε καταχωρώντας το όνοµα και τη δια-
δροµή στην οποία βρίσκεται, στην ιδιότητα HelpFile.

• Προέλευση Παλέτας (PaletteSource Property): σε πλήρη αναλογία µε την αντί-


στοιχη ιδιότητα που χρησιµοποιήσαµε για τις φόρµες της εφαρµογής, η παράµε-
τρος PaletteSource επιτρέπει τον καθορισµό της παλέτας χρωµάτων που χρη-
σιµοποιείται κατά τη σχεδίαση της τρέχουσας αναφοράς. Η προεπιλεγµένη
τιµή αυτής της ιδιότητας είναι η συµβολοσειρά «Default», η οποία επιτρέπει τη
σχεδίαση της αναφοράς δια της χρήσης της παλέτας χρωµάτων της Microsoft
Access. Σε κάθε περίπτωση βέβαια, µπορούµε να χρησιµοποιήσουµε τη δική µας
παλέτα χρωµάτων, ορίζοντας το όνοµα και τη διαδροµή του αρχείου που την πε-
ριέχει

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 299

• Ετικέτα (Tag Property): η ιδιότητα της ετικέτας χρησιµοποιείται όπως έχουµε


ήδη αναφέρει σε προηγούµενη ενότητα, για την καταχώρηση οποιασδήποτε
επιπλέον πληροφορίας η οποία θεωρούµε ότι είναι αναγκαία για την τρέ-
χουσα αναφορά. Αυτή η πληροφορία καταχωρείται δια της χρήσης µιας συµβο-
λοσειράς, το µέγιστο µήκος της οποίας είναι 2048 χαρακτήρες.

• Με το άνοιγµα και µε το κλείσιµο (Open and Close Events): οι δύο αυτές


ιδιότητες συµβάντος (event properties) λαµβάνουν χώρα κατά τις διαδικασίες
εκκίνησης και τερµατισµού της εµφάνισης µιας αναφοράς. Πιο συγκεκριµένα το
συµβάν Open (open event) υφίσταται αµέσως πριν την προεπισκόπηση ή την
εκτύπωση µιας αναφοράς, ενώ το συµβάν Close (close event) λαµβάνει χώρα
όταν ο χρήστης κλείσει την τρέχουσα αναφορά, κάτι που θα έχει ως αποτέλεσµα
την αποµάκρυνσή της από την οθόνη του υπολογιστή του. Οι τιµές που καταχω-
ρούµε σε αυτές τις δύο ιδιότητες είναι το όνοµα µιας µακροεντολής ή ενός προ-
γράµµατος γραµµένου σε γλώσσα Visual Basic που θα εκτελεστεί όταν λάβει
χώρα η εµφάνιση αυτών των δύο συµβάντων.

• Με την ενεργοποίηση και µε την απενεργοποίηση (Activate and Deactivate


events): το συµβάν της ενεργοποίησης (activate event) λαµβάνει χώρα όταν η
τρέχουσα αναφορά λάβει την εστίαση του συστήµατος (system focus) και γί-
νει το ενεργό πλαίσιο διαλόγου (active window). Αντίθετα το συµβάν της απε-
νεργοποίησης (deactivate event) πραγµατοποιείται όταν η τρέχουσα αναφορά
χάσει την εστίαση του συστήµατος, η οποία µεταφέρεται σε κάποιο άλλο αντι-
κείµενο. Σε πλήρη αναλογία µε την προηγούµενη περίπτωση, η τιµή που καταχω-
ρούµε σε αυτές τις δύο ιδιότητες είναι το όνοµα µιας µακροεντολής ή ενός προ-
γράµµατος γραµµένου σε γλώσσα Visual Basic, το οποίο θα εκτελεστεί κατά
την πραγµατοποίηση αυτών των συµβάντων.

• Όταν δεν υπάρχουν δεδοµένα (NoData Event): αυτό το συµβάν πραγµατοποιεί-


ται κατά την ειδική περίπτωση µιας αναφοράς η οποία δεν περιέχει δεδοµένα,
και λαµβάνει χώρα αµέσως πριν τη διαδικασία εκτύπωσής της. Συνήθως το συµ-
βάν αυτό χρησιµοποιείται για την ακύρωση ή τον τερµατισµό της εκτύπωσης
µιας κενής αναφοράς, δηλαδή µιας αναφοράς που δεν περιέχει καµία απολύτως
εγγραφή.

• Με τη σελίδα (Page Event): αυτό το συµβάν πραγµατοποιείται όταν η Microsoft


Access διαµορφώνει τη σελίδα µιας αναφοράς για εκτύπωση, αλλά πριν από την
εκκίνηση της διαδικασίας εκτύπωσης αυτής της σελίδας. Συνήθως το συµβάν
αυτό χρησιµοποιείται για την πραγµατοποίηση διαδικασιών που συσχετίζονται µε
την κάθε σελίδα ξεχωριστά, όπως είναι για παράδειγµα η εκτύπωση ενός στοι-
χείου εικόνας ή ενός πλαισίου (border) γύρω από το περίγραµµα της σελίδας.

• Με το σφάλµα (Error Event): αυτό το συµβάν πραγµατοποιείται όταν λάβει


χώρα πραγµατοποίηση κάποιου σφάλµατος εκτέλεσης (run time error) για
όσο χρονικό διάστηµα η τρέχουσα αναφορά έχει την εστίαση του συστήµατος.
Συνήθως το συµβάν αυτό χρησιµοποιείται για την εµφάνιση ενός ενηµερωτικού
µηνύµατος που θα περιγράφει µε αναλυτικό τρόπο το σφάλµα που έλαβε
χώρα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 12 : Αναφορές 300

• Έχει λειτουργική µονάδα (HasModule Property): η ιδιότητα αυτή παίρνει µία


από τις τιµές «Ναι (Yes)» και «Όχι (No)», και καθορίζει εάν η τρέχουσα ανα-
φορά συσχετίζεται µε κάποια λειτουργική µονάδα (class module). Η συνιστώ-
µενη τιµή για αυτή την ιδιότητα είναι η τιµή «Όχι» η οποία οδηγεί σε αύξηση
της απόδοσης του συστήµατος και σε µείωση του µεγέθους της βάσης δεδο-
µένων.

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


ΑΝΑΦΟΡΑΣ

Η τελευταία οµάδα ιδιοτήτων που µπορούµε να καθορίσουµε αφορά το κάθε


µεµονωµένο πεδίο της αναφοράς. Σε πλήρη αναλογία µε τις προηγούµενες περι-
πτώσεις, ο καθορισµός αυτών των ιδιοτήτων γίνεται από το φύλλο ιδιοτήτων του
πεδίου, που εµφανίζεται εάν επιλέξουµε το πεδίο µε το ποντίκι, και από το ανα-
δυόµενο menu επιλογών που θα εµφανιστεί χρησιµοποιώντας το δεξί πλήκτρο
του ποντικιού, χρησιµοποιήσουµε την επιλογή «Ιδιότητες». Ας σηµειωθεί πως µια
αναλυτική παρουσίαση αυτής της κατηγορίας ιδιοτήτων δεν είναι εύκολο να πραγµα-
τοποιηθεί στο σηµείο αυτό, καθώς το σύνολο των ιδιοτήτων που θα πρέπει να κα-
θοριστούν, είναι συνάρτηση του τύπου του πεδίου. Για παράδειγµα οι ιδιότητες
που θα πρέπει να καθορίσουµε για ένα text box, είναι διαφορετικές από εκείνες που
θα πρέπει να καθοριστούν για ένα radio button. Ωστόσο, µιλώντας γενικά, πολλές
από τις ιδιότητες αυτές είναι παρόµοιες µε εκείνες που έχουν περιγραφεί σε προη-
γούµενες σελίδες, ενώ όσον αφορά την οµαδοποίησή τους, αυτή είναι η ίδια µε την
οµαδοποίηση που εφαρµόζεται στις ιδιότητες της αναφοράς και των ενοτήτων που
περιλαµβάνονται σε αυτές. Περισσότερες λεπτοµέρειες για τις ιδιότητες που συσχετί-
ζονται µε τα πεδία της αναφοράς, µπορούν να βρεθούν στη βιβλιογραφία, και στο
Online Help της Microsoft Access. Το επόµενο σχήµα παρουσιάζει το φύλλο ιδιοτή-
των ενός πλαισίου κειµένου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 301

Σχήµα 174 : Καθορισµός ιδιοτήτων πλαισίου κειµένου της αναφοράς

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13
Μακροεντολές
Το κεφάλαιο αυτό διαπραγµατεύεται τη δηµιουργία και
διαχείριση των µακροεντολών, δια της χρήσης των οποίων εί-
ναι δυνατή η αυτοµατοποίηση των διαδικασιών που χρησιµο-
ποιούνται για την αλληλεπίδραση του χρήστη µε την εφαρµο-
γή.

Όπως έχει ήδη αναφερθεί σε προηγούµενα κεφάλαια, η σχεδίαση και υλοποί-


ηση µιας εφαρµογής µέσα από το περιβάλλον της Microsoft Access, περιλαµβάνει
την πραγµατοποίηση ενός συνόλου διαδικασιών οι οποίες συσχετίζονται τόσο µε τα
δεδοµένα που είναι αποθηκευµένα στους πίνακες της βάσης, όσο και µε τα αντικεί-
µενα που περιλαµβάνονται στην εφαρµογή (όπως είναι οι φόρµες, οι αναφορές και οι
λειτουργικές µονάδες). Χαρακτηριστικά παραδείγµατα τέτοιων διαδικασιών, είναι
το άνοιγµα µιας φόρµας καταχώρησης δεδοµένων, η εκτύπωση µιας αναφοράς ή
η εκτέλεση κάποιου ερωτήµατος. Αυτές οι διαδικασίες πραγµατοποιούνται όταν
λάβει χώρα κάποια ενέργεια του χρήστη η οποία στις πιο συνηθισµένες περιπτώσεις
είναι το πάτηµα ενός κουµπιού σε µία φόρµα, ή σε µία γραµµή εργαλείων.

Η κάθε µια από τις ενέργειες που µπορούµε να χρησιµοποιήσουµε για την αλ-
ληλεπίδρασή µας µε την εφαρµογή, καλείται µε το δικό της ιδιαίτερο τρόπο, και
µε τον κατάλληλο σε κάθε περίπτωση αριθµό ορισµάτων. Για παράδειγµα, µπο-
ρούµε να σχεδιάσουµε την εφαρµογή µε τέτοιο τρόπο, ώστε κάθε φορά που ο χρή-
στης προσπαθεί να εκτελέσει µία διαδικασία η οποία δεν είναι επιτρεπτή, να δη-
µιουργείται ένα ηχητικό µήνυµα (beep message). Όπως θα δούµε σε επόµενη ενότη-
τα, αυτή η ενέργεια καλείται απλά µε το όνοµά της, και χωρίς να χρειάζεται να καθο-
ρίσουµε κάποιο όρισµα, αφού το µόνο που κάνει είναι να παράγει κάποιο ήχο. Αντί-
θετα, η ενέργεια που θα καλέσουµε για να ανοίξουµε ή να κλείσουµε µία φόρµα, θα
πρέπει να συνοδεύεται από ένα τουλάχιστον όρισµα, που είναι το όνοµα της φόρµας
που θέλουµε να ανοίξουµε ή να κλείσουµε. Σε άλλες πάλι περιπτώσεις, θα πρέπει να
χρησιµοποιήσουµε µεγαλύτερο αριθµό ορισµάτων. Έτσι εάν ζητήσουµε από το πρό-
γραµµα να µας µεταφέρει σε κάποια εγγραφή, θα πρέπει να καθορίσουµε τουλάχι-
στον τρεις παραµέτρους: (α) τον τύπο του αντικειµένου του οποίου την εγγραφή
θέλουµε να προσπελάσουµε (αυτό το αντικείµενο µπορεί να είναι πίνακας ή ερώ-
τηµα), το όνοµα του πίνακα ή του ερωτήµατος που θα χρησιµοποιήσουµε (π.χ.
τον πίνακα EMPLOYEE) και τη θέση της εγγραφής στην οποία θέλουµε να µε-
ταφερθούµε (π.χ. η πρώτη ή η τελευταία εγγραφή). Εποµένως ανάλογα µε τη φύση
της διαδικασίας που επιθυµούµε να χρησιµοποιήσουµε, θα πρέπει να καθορίσουµε
και τον κατάλληλο σε κάθε περίπτωση αριθµό ορισµάτων.
Κεφάλαιο 13 : Μακροεντολές 304

Μια µακροεντολή δεν είναι τίποτε άλλο από ένα σύνολο διαδικασιών οι ο-
ποίες εκτελούνται όλες µαζί σε ένα και µόνο βήµα, ως µια απλή εντολή. Στηριζό-
µενοι σε αυτόν τον ορισµό, µπορούµε να διατυπώσουµε τον ισχυρισµό πως οι µα-
κροεντολές της Microsoft Access είναι παρόµοιες µε τα αρχεία δέσµης (batch
files) του λειτουργικού συστήµατος MS-DOS. Η βασική δοµή αυτών των αρχείων,
περιλαµβάνει ένα σύνολο εντολών του λειτουργικού συστήµατος, τις οποίες το
λειτουργικό εκτελεί σε ένα και µοναδικό βήµα, και χωρίς να απαιτείται παρέµ-
βαση του χρήστη. Με τον ίδιο ακριβώς τρόπο, µια µακροεντολή αποτελείται από ένα
σύνολο εντελώς συγκεκριµένων διαδικασιών, οι οποίες εκτελούνται σε ένα και µόνο
βήµα, και ως µία απλή εντολή. Το βασικό πλεονέκτηµα αυτών των δοµών είναι πως
κατασκευάζονται πολύ εύκολα, και υπό αυτή την έννοια διευκολύνουν σηµαντικά
τόσο τον προγραµµατιστή (όσον αφορά την ανάπτυξη της εφαρµογής) όσο και τον
τελικό χρήστη (όσον αφορά την αλληλεπίδρασή του µε το πρόγραµµα). Οι βασικές
αρχές δηµιουργίας και διαχείρισης των µακροεντολών µέσα από το περιβάλλον της
Microsoft Access, αποτελούν το αντικείµενο των σελίδων που ακολουθούν.

∆ΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΜΑΚΡΟΕΝΤΟΛΗΣ

Προκειµένου να δηµιουργήσουµε µια νέα µακροεντολή, θα πρέπει να µετα-


φερθούµε στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, και από τη σε-
λίδα «Μακροεντολές» να πατήσουµε το κουµπί που φέρει τον τίτλο «∆ηµιουργία».
Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο
πλαίσιο διαλόγου:

Σχήµα 175 : Το κεντρικό παράθυρο δηµιουργίας µακροεντολών

Παρατηρώντας προσεκτικά αυτό το πλαίσιο, δεν είναι δύσκολο να διαπιστώ-


σουµε πως έχει παρόµοια µορφή µε εκείνο που χρησιµοποιείται για τη δηµιουρ-
γία των πινάκων της βάσης. Η βασική δοµή αυτού του πλαισίου περιλαµβάνει τρεις

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 305

διαφορετικές περιοχές: η πρώτη περιοχή που φέρει το όνοµα «Ενέργεια» περιέχει


ένα πλαίσιο λίστας (list box) µε τον κατάλογο των διαθέσιµων ενεργειών που µπο-
ρούµε να χρησιµοποιήσουµε στη νέα µακροεντολή. Για κάθε µια από αυτές τις ενέρ-
γειες θα πρέπει να καθορίσουµε και τον επιθυµητό σε κάθε περίπτωση αριθµό
ορισµάτων που θα περιγράφουν πλήρως την νέα ενέργεια, στο σύνολό της. Αυτά
τα ορίσµατα θα καθορισθούνε στην περιοχή του πλαισίου διαλόγου που φέρει το ό-
νοµα «Ορίσµατα Ενέργειας». Τέλος στην τρίτη περιοχή που φέρει το όνοµα «Σχό-
λιο» µπορούµε για κάθε ενέργεια να γράψουµε προαιρετικά κάποιο σχόλιο ή διευκρί-
νιση, όσον αφορά τον τρόπο λειτουργίας της και το σκοπό για τον οποίο χρησιµο-
ποιείται µέσα στην εφαρµογή. Στο κάτω δεξιό τµήµα του παραθύρου, υπάρχει ακόµη
µια δεσµευµένη περιοχή, στην οποία, για κάθε ενέργεια της µακροεντολής, εµφανί-
ζεται ένα µήνυµα βοηθείας σχετικά µε το είδος της λειτουργίας που επιτελεί.

Σχήµα 176: Οι τρεις βασικές περιοχές του κεντρικού παραθύρου δηµιουργίας µακροεντολών

Προκειµένου να κατανοήσουµε καλύτερα τον τρόπο καθορισµού των χαρα-


κτηριστικών µιας ενέργειας, ας παρατηρήσουµε το προηγούµενο σχήµα. Στο συγκε-
κριµένο παράδειγµα, επιθυµούµε να κατασκευάσουµε µια µακροεντολή, η οποία
(εκτός των άλλων) να προκαλεί την εκτέλεση του ερωτήµατος STAF-
FORD_PROJECT, το οποίο, για κάθε PROJECT που γίνεται στο STAFFORD,
εµφανίζει τα ονοµατεπώνυµα των υπαλλήλων που εργάζονται σε αυτό και το όνοµα
του τµήµατος στο οποίο ανήκουν. Για να το κάνουµε αυτό, θα πρέπει να ανοίξουµε
τη λίστα µε τις διαθέσιµες ενέργειες που µπορούµε να χρησιµοποιήσουµε, και
από εκεί, να επιλέξουµε την ενέργεια που φέρει το όνοµα «Άνοιγµα Ερωτήµα-
τος». Στην περίπτωση αυτή, η δεύτερη περιοχή του πλαισίου διαλόγου διαµορφώνε-
ται ανάλογα, έτσι ώστε να καθορίσουµε τα ορίσµατα που συσχετίζονται µε αυτή
τη διαδικασία. Στην περίπτωση της ενέργειας «Άνοιγµα Ερωτήµατος», αυτά τα ο-
ρίσµατα είναι (α) το όνοµα του ερωτήµατος που θέλουµε να χρησιµοποιήσουµε,
(β) η προβολή στην οποία θα ανοίξουµε αυτό το ερώτηµα (δηλαδή προβολή σχε-
δίασης, προβολή φύλλου δεδοµένων ή προεπισκόπηση εκτύπωσης) και (γ) το εί-
δος της επεξεργασίας που µπορούµε να εφαρµόσουµε στα δεδοµένα που επιστρέ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 306

φονται από το ερώτηµα. Στο παράδειγµα του παραπάνω σχήµατος, το ερώτηµα


STAFFORD_PROJECT ανοίγει σε προβολή φύλλου δεδοµένων, και σε συνθήκη
µόνο ανάγνωσης, κάτι που σηµαίνει πως τα δεδοµένα που επιστρέφονται από το ε-
ρώτηµα δεν είναι δυνατό να τροποποιηθούν από το χρήστη.

Το παραπάνω παράδειγµα αποτελεί την πιο απλή περίπτωση µακροεντολής,


καθώς αυτή αποτελείται από µία και µοναδική ενέργεια. Στη γενική περίπτωση έ-
χουµε τη δυνατότητα να καθορίσουµε περισσότερες από µία ενέργειες, και να
κατασκευάσουµε µια µακροεντολή µε µεγάλο πλήθος ενεργειών και µεγάλο βαθ-
µό πολυπλοκότητας. Ένα παράδειγµα µιας τέτοιας µακροεντολής παρουσιάζεται στο
επόµενο σχήµα. Αυτή η µακροεντολή περιλαµβάνεται στην υποδειγµατική βάση δε-
δοµένων Northwind που συνοδεύει τη Microsoft Access, και συσχετίζεται µε το υ-
ποσύστηµα διαχείρισης προµηθευτών.

Σχήµα 177 : Παράδειγµα δηµιουργίας σύνθετης µακροεντολής

Από το παραπάνω σχήµα διαπιστώνουµε πως για κάθε µια από τις ενέργειες
που περιλαµβάνονται σε κάθε µακροεντολή, έχουµε τη δυνατότητα να καταχω-
ρήσουµε κάποιο όνοµα, και να ορίσουµε και κάποια συνθήκη, η οποία θα καθο-
ρίσει και τις προϋποθέσεις κάτω από τις οποίες θα εκτελεστεί η συγκεκριµένη
ενέργεια. Εναλλακτικά µπορούµε να ορίσουµε αυτό το όνοµα όχι µόνο για µία ενέρ-
γεια, αλλά για µία οµάδα ενεργειών οι οποίες χαρακτηρίζονται από κάποιο είδος λο-
γικής συσχέτισης. Στο παράδειγµα του παραπάνω σχήµατος, χρησιµοποιείται το όνο-
µα Add Products για να περιγράψει την οµάδα ενεργειών «Αντήχηση», «Κλείσι-
µο», «Άνοιγµα Φόρµας», «Ορισµός Τιµής» και «Μετάβαση σε στοιχείο ελέγχου».
Από την άλλη πλευρά, η συνθήκη που καταχωρούµε στο παραπάνω πλαίσιο, επιτρέ-
πει την εκτέλεση κάποιας ενέργειας, µόνο όταν ικανοποιούνται κάποιες προϋπο-
θέσεις. Στο παράδειγµα του σχήµατος, η ενέργεια «Πλαίσιο Μηνύµατος» θα εκτε-
λεστεί, µόνο όταν ικανοποιείται η συνθήκη IsNull([SupplierID]). Αλλά η ισχύς αυ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 307

τής της συνθήκης υφίσταται µόνο όταν η φόρµα προµηθευτών δεν περιέχει κανένα
προµηθευτή. Εποµένως σύµφωνα µε τις προδιαγραφές της µακροεντολής, οι ενέρ-
γειες που περιλαµβάνονται στην οµάδα «Review Products» θα εκτελεστούνε µόνο
όταν υπάρχουν προµηθευτές, ενώ στην αντίθετη περίπτωση, η µακροεντολή θα εκτυ-
πώσει ένα ενηµερωτικό µήνυµα και θα τερµατίσει τη λειτουργία της.

Προκειµένου να εµφανίσουµε τις στήλες «Όνοµα» και «Συνθήκη» θα πρέπει


να µεταφερθούµε στο κεντρικό menu επιλογών της Access (το οποίο έχει διαµορ-
φωθεί ανάλογα) και από τη λίστα επιλογών «Προβολή» να ενεργοποιήσουµε τις επι-
λογές. «Ονόµατα Μακροεντολών» και «Συνθήκες». Τέλος, όταν ολοκληρώσουµε
την κατασκευή της µακροεντολής, µπορούµε να την αποθηκεύσουµε µε κάποιο όνο-
µα, χρησιµοποιώντας το επόµενο πλαίσιο διαλόγου.

Σχήµα 178 : Καθορισµός του ονόµατος της νέας µακροεντολής

Στο σηµείο αυτό έχουµε ολοκληρώσει τη διαδικασία δηµιουργίας µιας νέας


µακροεντολής. Στο επόµενο στάδιο θα λάβει χώρα αναλυτική περιγραφή των ενερ-
γειών που µπορούµε να χρησιµοποιήσουµε για τη δηµιουργία µακροεντολών και
των ορισµάτων που θα πρέπει να καθοριστούνε σε κάθε περίπτωση.

ΟΙ ΕΝΕΡΓΕΙΕΣ ΤΩΝ ΜΑΚΡΟΕΝΤΟΛΩΝ ΤΗΣ MICROSOFT ACCESS

• Ακύρωση συµβάντος (Cancel Event Action): χρησιµοποιούµε αυτή την ενέρ-


γεια για να ακυρώσουµε το συµβάν που προκάλεσε την εκτέλεση της τρέχου-
σας µακροεντολής. Επειδή το εν λόγω συµβάν συσχετίζεται µόνο µε την τρέχου-
σα µακροεντολή, δεν είναι αναγκαίος ο καθορισµός κάποιας επιπρόσθετης πλη-
ροφορίας, και για το λόγο αυτό αυτή η ενέργεια καλείται χωρίς ορίσµατα.

• Άνοιγµα αποθηκευµένης διαδικασίας (OpenStoredProcedure Action): χρησι-


µοποιούµε αυτή την ενέργεια για να εµφανίσουµε µία αποθηκευµένη διαδικα-
σία (stored procedure) σε προβολή σχεδίασης (design view), σε προβολή φύλ-
λου δεδοµένων (datasheet view) ή σε προεπισκόπηση εκτύπωσης (print pre-
view). Αυτού του είδους οι διαδικασίες δεν είναι τίποτε άλλο από οµάδες εντο-
λών της γλώσσας SQL οι οποίες έχουν µεταγλωττιστεί εκ των προτέρων και
βρίσκονται αποθηκευµένες στη βάση δεδοµένων της εφαρµογής. Προκειµένου να
χρησιµοποιήσουµε την εν λόγω ενέργεια, θα πρέπει να καθορίσουµε τις επόµενες
τρεις παραµέτρους:

1. Όνοµα διαδικασίας (Procedure Name): η παράµετρος αυτή περιέχει το ό-


νοµα της αποθηκευµένης διαδικασίας που επιθυµούµε να χρησιµοποιήσου-
µε.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 308

2. Προβολή (View): η παράµετρος αυτή περιέχει το είδος της προβολής στην


οποία θα ανοίξει η αποθηκευµένη διαδικασία. Αυτή η προβολή µπορεί να
είναι (α) προβολή σχεδίασης (design view), (β) προβολή φύλλου δεδοµένων
(datasheet view) και (γ) προεπισκόπηση εκτύπωσης (print preview).

3. Κατάσταση δεδοµένων (Data Mode): στην περίπτωση κατά την οποία η α-


ποθηκευµένη διαδικασία ανοίξει σε προβολή φύλλου δεδοµένων, µπορούµε
να χρησιµοποιήσουµε αυτή την παράµετρο για να καθορίσουµε το είδος της
προσπέλασης πάνω στα δεδοµένα που επιστρέφονται από αυτή τη διαδι-
κασία. Υπάρχουν τρεις διαφορετικοί τρόποι προσπέλασης: (α) προσθήκη
(add): ο χρήστης µπορεί να προσθέσει νέα δεδοµένα αλλά δεν µπορεί να εµ-
φανίσει ή να τροποποιήσει τις υπάρχουσες εγγραφές (β) επεξεργασία (edit):
ο χρήστης µπορεί να προσθέσει νέα δεδοµένα και ταυτόχρονα να εµφανίσει ή
να τροποποιήσει υπάρχουσες εγγραφές (αυτή είναι και η προεπιλεγµένη τιµή
της παραµέτρου) και (γ) µόνο για ανάγνωση (read only): ο χρήστης µπορεί
µόνο να εµφανίσει τα δεδοµένα που επιστρέφονται από τη διαδικασία, αλλά
δεν έχει τη δυνατότητα να προσθέσει νέα δεδοµένα ή να τροποποιήσει τις υ-
πάρχουσες εγγραφές.

• Άνοιγµα διαγράµµατος (OpenDiagram Action): χρησιµοποιούµε την ενέργεια


αυτή για να εµφανίσουµε ένα διάγραµµα της βάσης δεδοµένων (database dia-
gram) σε προεπισκόπηση εκτύπωσης (design view). Στην περίπτωση αυτή η
µοναδική παράµετρος που θα πρέπει να καθορίσουµε είναι το όνοµα του δια-
γράµµατος που επιθυµούµε να χρησιµοποιήσουµε.

• Άνοιγµα έκθεσης (OpenReport Action): η ενέργεια αυτή επιτρέπει την προεπι-


σκόπηση και εκτύπωση των αναφορών της βάσης δεδοµένων, και η χρήση της
απαιτεί τον καθορισµό των επόµενων παραµέτρων:

1. Όνοµα έκθεσης (Report Name): η παράµετρος αυτή χρησιµοποιείται για τον


καθορισµό του ονόµατος της έκθεσης που επιθυµούµε να χρησιµοποιήσουµε

2. Προβολή (View): η παράµετρος αυτή επιτρέπει τον καθορισµό της προβο-


λής στην οποία θα ανοίξει η προκαθορισµένη αναφορά. Υπάρχουν τρεις
διαφορετικές προβολές που µπορούµε να χρησιµοποιήσουµε: (α) Προβολή
Σχεδίασης (Design View) που επιτρέπει την επεξεργασία της δοµής της ανα-
φοράς, (β) Προεπισκόπηση εκτύπωσης (Print Preview) που επιτρέπει την
προεπισκόπηση της αναφοράς πριν την εκτύπωσή της, και (γ) Εκτύπωση
(Print) που έχει ως αποτέλεσµα την άµεση εκτύπωση της αναφοράς.

3. Όνοµα φίλτρου (Filter Name): στην περίπτωση κατά την οποία δεν επιθυ-
µούµε να εµφανίσουµε όλες τις εγγραφές της αναφοράς, αλλά µόνο εκείνες
που ικανοποιούν κάποιες συνθήκες, µπορούµε να καταχωρήσουµε ως τιµή
σε αυτή την παράµετρο, το όνοµα ενός ερωτήµατος (query) ή ενός φίλτρου
(filter) που έχει αποθηκευθεί ως ερώτηµα. Θα πρέπει να σηµειωθεί ωστόσο
πως αυτό το ερώτηµα θα πρέπει να είναι έτσι σχεδιασµένο, ώστε να επιστρέ-
φει όλα τα πεδία τα οποία περιλαµβάνονται στην τρέχουσα αναφορά.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 309

4. Συνθήκη «Όπου» (Where Condition): στην περίπτωση κατά την οποία επι-
θυµούµε να χρησιµοποιήσουµε ένα φίλτρο για να περιορίσουµε τα δεδοµένα
που θα εµφανιστούν στην τρέχουσα αναφορά, µπορούµε να χρησιµοποιήσου-
µε αυτή την παράµετρο για να περιορίσουµε τις εγγραφές του πίνακα ή του
ερωτήµατος από το οποίο η αναφορά παίρνει δεδοµένα. Η τιµή που κατα-
χωρούµε σε αυτή την παράµετρο είναι µια συµβολοσειρά παρόµοια µε εκείνη
που χαρακτηρίζει την πρόταση WHERE της εντολής SELECT της γλώσσας
SQL. Ωστόσο, στην προκειµένη περίπτωση, η λέξη WHERE δεν καταχω-
ρείται, αφού υπονοείται. Έτσι εάν επιθυµούµε να εµφανίσουµε την αναφορά
ΑΠΑΣΧΟΛΗΣΗ αλλά µόνο για εκείνες τις εγγραφές που αφορούν το Re-
search Department, θα πρέπει ως τιµή σε αυτή την παράµετρο να χρησιµο-
ποιήσουµε τη συµβολοσειρά DName=”Research”.

• Άνοιγµα ερωτήµατος (OpenQuery Action): χρησιµοποιούµε αυτή την ενέργεια


για να ανοίξουµε ένα ερώτηµα σε προβολή σχεδίασης ή φύλλου δεδοµένων, ή
σε προεπισκόπηση εκτύπωσης. Η χρήση αυτής της ενέργειας απαιτεί τον καθο-
ρισµό των επόµενων παραµέτρων:

1. Όνοµα Ερωτήµατος (Query Name): χρησιµοποιούµε την παράµετρο αυτή


για να καθορίσουµε το όνοµα του ερωτήµατος που θέλουµε να χρησιµο-
ποιήσουµε.

2. Προβολή (View): η παράµετρος αυτή χρησιµοποιείται για τον καθορισµό


της προβολής στην οποία θα ανοίξει το εν λόγω ερώτηµα. Υπάρχουν τρεις
διαφορετικές προβολές που µπορούµε να χρησιµοποιήσουµε, και οι οποίες
είναι η προβολή σχεδίασης (Design View), η προβολή φύλλου δεδοµένων
(Datasheet View) και η προεπισκόπηση εκτύπωσης (Print Preview).

3. Κατάσταση ∆εδοµένων (Data Mode): σε περίπτωση κατά την οποία λαµβά-


νει χώρα προεπισκόπηση ενός ερωτήµατος σε προβολή φύλλου δεδοµένων,
µπορούµε να χρησιµοποιήσουµε αυτή την παράµετρο, για να καθορίσουµε το
είδος της προσπέλασης επί των δεδοµένων του ερωτήµατος. Η παράµετρος
αυτή µπορεί να λάβει µία από τις τρεις επόµενες τιµές: (α) Προσθήκη (Add):
ο χρήστης µπορεί να προσθέσει νέες εγγραφές αλλά δεν µπορεί να τροπο-
ποιήσει τις υπάρχουσες εγγραφές (β) Επεξεργασία (Edit): ο χρήστης µπορεί
να προσθέσει νέες εγγραφές και ταυτόχρονα έχει τη δυνατότητα να τροπο-
ποιήσει τις υπάρχουσες εγγραφές (η τιµή αυτή είναι η προεπιλεγµένη) και (γ)
Μόνο για ανάγνωση (Read Only): ο χρήστης µπορεί να διαβάσει το περιε-
χόµενο των εγγραφών του ερωτήµατος αλλά δεν µπορεί να προσθέσει νέες εγ-
γραφές ούτε να τροποποιήσει τις υπάρχουσες εγγραφές.

• Άνοιγµα λειτουργικής µονάδας (OpenModule Action): χρησιµοποιούµε την


ενέργεια αυτή για να προσπελάσουµε τις διαδικασίες µίας λειτουργικής µονά-
δας µέσα από την τρέχουσα µακροεντολή. Η χρήση αυτής της ενέργειας, απαι-
τεί τον καθορισµό των επόµενων παραµέτρων:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 310

1. Όνοµα λειτουργικής µονάδας (Module Name): η παράµετρος αυτή επιτρέ-


πει τον καθορισµό της λειτουργικής µονάδας που επιθυµούµε να χρησιµο-
ποιήσουµε.

2. Όνοµα διαδικασίας (Procedure Name): η παράµετρος αυτή περιέχει το ό-


νοµα της διαδικασίας της λειτουργικής µονάδας την οποία θέλουµε να
καλέσουµε.

Περισσότερες λεπτοµέρειες για τις λειτουργικές µονάδες και τον τρόπο µε τον
οποίο αυτές χρησιµοποιούνται παρουσιάζονται στο οµώνυµο κεφάλαιο.

• Άνοιγµα πίνακα (OpenTable Action): χρησιµοποιούµε αυτή την ενέργεια για να


ανοίξουµε ένα πίνακα σε προβολή σχεδίασης, σε προβολή φύλλου δεδοµένων,
ή σε προεπισκόπηση εκτύπωσης. Η χρήση αυτής της ενέργειας, απαιτεί τον κα-
θορισµό των επόµενων παραµέτρων:

1. Όνοµα πίνακα (Table Name): η παράµετρος αυτή περιέχει το όνοµα του πί-
νακα τον οποίο θέλουµε να ανοίξουµε.

2. Προβολή (View): η παράµετρος αυτή επιτρέπει τον καθορισµό της προβο-


λής στην οποία θα ανοίξουµε τον παραπάνω πίνακα και η οποία µπορεί να
είναι προβολή σχεδίασης (design view), προβολή φύλλου δεδοµένων (data-
sheet view) ή προεπισκόπηση εκτύπωσης (print preview).

3. Κατάσταση δεδοµένων (data mode): η παράµετρος αυτή χρησιµοποιείται


µόνο για πίνακες που ανοίγουν σε προβολή φύλλου δεδοµένων, και καθορί-
ζει το είδος της προσπέλασης επί των δεδοµένων του πίνακα που χρησιµο-
ποιούµε. Υπάρχουν τρεις τιµές που µπορούµε να καταχωρήσουµε σε αυτή την
παράµετρο: (α) Προσθήκη (Add): ο χρήστης έχει τη δυνατότητα να προσθέ-
σει νέες εγγραφές στον πίνακα αλλά δεν µπορεί να τροποποιήσει τις υπάρχου-
σες εγγραφές. (β) Επεξεργασία (Edit): ο χρήστης έχει τη δυνατότητα να προ-
σθέσει νέες εγγραφές στον πίνακα, και ταυτόχρονα να τροποποιήσει τις υπάρ-
χουσες εγγραφές. Η τιµή αυτή είναι και η προεπιλεγµένη (γ) Μόνο για ανά-
γνωση (Read Only): ο χρήστης µπορεί µόνο να εµφανίσει και να διαβάσει τα
δεδοµένα του πίνακα, αλλά δεν µπορεί ούτε να προσθέσει νέες εγγραφές, αλ-
λά ούτε και να τροποποιήσει τις υπάρχουσες εγγραφές.

• Άνοιγµα προβολής (OpenView Action): η παράµετρος αυτή χρησιµοποιείται


προκειµένου να ανοίξουµε µία προβολή (view) σε προβολή σχεδίασης, προβολή
φύλλου δεδοµένων, ή σε προεπισκόπηση εκτύπωσης. Τα ορίσµατα αυτής της
ενέργειας και οι τιµές που καταχωρούνται σε αυτά είναι τα ίδια µε εκείνα που κα-
θορίζουµε στην προηγούµενη ενέργεια (Άνοιγµα πίνακα, OpenTable Action)
και δεν κρίνεται σκόπιµο να περιγραφούν εκ νέου.

• Άνοιγµα σελίδας πρόσβασης δεδοµένων (OpenDataAccessPage Action): χρη-


σιµοποιούµε την ενέργεια αυτή για να προσπελάσουµε µία σελίδα πρόσβασης
δεδοµένων (Data Access Page). Αυτή η σελίδα µπορεί να είναι είτε µία ιστοσε-
λίδα η οποία επιτρέπει την προσπέλαση των εγγραφών µίας βάσης δεδοµένων εί-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 311

τε µία σελίδα γενικής χρήσεως, η οποία µας δίνει τη δυνατότητα να προσπελά-


σουµε δεδοµένα άλλης προέλευσης, όπως για παράδειγµα φύλλα δεδοµένων του
Microsoft Excel. Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό των επό-
µενων δύο παραµέτρων:

1. Όνοµα σελίδας πρόσβασης δεδοµένων (Data Access Page Name): η τιµή


αυτής της παραµέτρου είναι το όνοµα της σελίδας πρόσβασης δεδοµένων
που επιθυµούµε να προσπελάσουµε.

2. Προβολή (View): η παράµετρος αυτή επιτρέπει τον καθορισµό της προβο-


λής στην οποία θα ανοίξει η τρέχουσα σελίδα πρόσβασης δεδοµένων, και η
οποία µπορεί να είναι είτε προβολή σχεδίασης (Design View), είτε προβολή
περιήγησης (Browse View).

• Άνοιγµα φόρµας (OpenForm Action): η ενέργεια αυτή επιτρέπει την προσπέλα-


ση κάποιας από τις φόρµες της εφαρµογής, και η χρήση της επιτρέπει τον καθορι-
σµό των επόµενων παραµέτρων:

• Όνοµα φόρµας (Form Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβολο-
σειρά που περιέχει το όνοµα της φόρµας που επιθυµούµε να χρησιµοποιήσου-
µε.

1. Προβολή (View): η παράµετρος αυτή επιτρέπει τον καθορισµό της προβο-


λής στην οποία θα ανοίξει η τρέχουσα φόρµα, και η οποία µπορεί να είναι
προβολή φόρµας (form view), προβολή σχεδίασης (design view), προβολή
φύλλου δεδοµένων (datasheet view) και προεπισκόπηση εκτύπωσης (print
preview). Η προεπιλεγµένη τιµή για αυτή την ιδιότητα, είναι η προβολή φόρ-
µας.

2. Όνοµα φίλτρου (Filter Name): στην περίπτωση κατά την οποία επιθυµούµε
να περιορίσουµε ή να ταξινοµήσουµε τις εγγραφές της φόρµας, µπορούµε
να καταχωρήσουµε σε αυτή την παράµετρο µία συµβολοσειρά, η οποία περιέ-
χει το όνοµα κάποιου ερωτήµατος (query) ή κάποιου φίλτρου (filter) που
έχει αποθηκευτεί ως ερώτηµα. Ωστόσο το φίλτρο ή το ερώτηµα θα πρέπει
να είναι έτσι σχεδιασµένο ώστε να επιστρέφει όλα τα πεδία που περιλαµβάνο-
νται στην τρέχουσα φόρµα.

3. Συνθήκη «Όπου» (Where Condition): η παράµετρος αυτή δέχεται ως τιµή


µία συµβολοσειρά που περιέχει µία έγκυρη πρόταση WHERE (χωρίς ωστόσο
την ίδια τη λέξη WHERE) παρόµοια µε εκείνη που χρησιµοποιούµε στην ε-
ντολή SELECT της γλώσσας SQL. Στη συνέχεια η Microsoft Access εφαρ-
µόζει τη συνθήκη που καθορίζεται από αυτή την παράµετρο στις εγγραφές της
τρέχουσας φόρµας, και εµφανίζει µόνο εκείνες οι οποίες ικανοποιούν αυτή τη
συνθήκη. Στην περίπτωση κατά την οποία έχουµε χρησιµοποιήσει την προη-
γούµενη παράµετρο για να εφαρµόσουµε ένα φίλτρο επί των εγγραφών της
φόρµας, η Access εφαρµόζει τη συνθήκη της πρότασης WHERE πάνω στο
αποτέλεσµα της εφαρµογής αυτού του φίλτρου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 312

4. Κατάσταση δεδοµένων (Data Mode): σε πλήρη αναλογία µε τις προηγούµε-


νες περιπτώσεις ενεργειών που ανοίγουν τα αντικείµενα της βάσης, αυτή η
παράµετρος καθορίζει το είδος της προσπέλασης επί των δεδοµένων της
τρέχουσας φόρµας, και εφαρµόζεται µόνο σε φόρµες που ανοίγουν σε προ-
βολή φόρµας (form view) ή σε προβολή φύλλου δεδοµένων (datasheet
view). Η παράµετρος αυτή µπορεί να λάβει µία από τις επόµενες τιµές: (α)
Προσθήκη (Add): ο χρήστης έχει τη δυνατότητα να προσθέσει νέες εγγραφές
αλλά δεν µπορεί να τροποποιήσει τις υπάρχουσες εγγραφές (β) Επεξεργασία
(Edit): ο χρήστης έχει τη δυνατότητα να προσθέσει νέες εγγραφές και ταυτό-
χρονα να τροποποιήσει τις υπάρχουσες εγγραφές και (γ) Μόνο για ανάγνωση
(Read Only): ο χρήστης έχει µόνο τη δυνατότητα της προεπισκόπησης των
εγγραφών, αλλά δεν µπορεί να προσθέσει νέες εγγραφές ή να τροποποιήσει
τις υπάρχουσες εγγραφές.

5. Κατάσταση Παραθύρου (Window Mode): η παράµετρος αυτή χρησιµο-


ποιείται για τον καθορισµό της κατάστασης παραθύρου στην οποία θα α-
νοίξει η τρέχουσα φόρµα, και µπορεί να λάβει µόνο µία από τις επόµενες τι-
µές: (α) κανονικό (normal): η φόρµα ανοίγει σύµφωνα µε τις προδιαγραφές
που έχουν τεθεί στο φύλλο ιδιοτήτων της, (β) κρυφό (hidden): η φόρµα είναι
κρυµµένη και δεν εµφανίζεται στην οθόνη του υπολογιστή (αυτό σηµαίνει
πως η ιδιότητα Visible τίθεται στην τιµή «Όχι (No)»), (γ) εικονίδιο (icon): η
φόρµα εµφανίζεται ως ένα µικρό εικονίδιο στο κάτω µέρος της οθόνης, (δ)
παράθυρο διαλόγου (dialog): η τιµή αυτή χρησιµοποιείται µαζί µε τις ιδιότη-
τες Modal και Popup της φόρµας (οι οποίες θα πρέπει να τεθούν στην τιµή
«Ναι (Yes)») και επιτρέπει τη χρήση της φόρµας ως αποκλειστική φόρµα.
Αυτό σηµαίνει πως για όσο χρονικό διάστηµα αυτή η φόρµα είναι ανοικτή, ο
χρήστης δεν µπορεί να χρησιµοποιήσει άλλες φόρµες, ή γενικότερα, άλλα α-
ντικείµενα της εφαρµογής. Είναι σηµαντικό να αναφερθεί, πως όταν µία φόρ-
µα χρησιµοποιείται σε αυτή την κατάσταση, η µακροεντολή αναστέλλει τη
λειτουργία της (suspend) µέχρι τη στιγµή που ο χρήστης θα τερµατίσει την
αλληλεπίδρασή του µε την τρέχουσα φόρµα.

• Αντήχηση (Echo Action): χρησιµοποιούµε αυτή την ενέργεια για να καθορίσου-


µε εάν η αλληλεπίδραση του χρήστη µε την εφαρµογή δια της χρήσης της τρέ-
χουσας µακροεντολής, θα χαρακτηρίζεται από την ιδιότητα της αντήχησης
(echo). Η αντήχηση ορίζεται ως η διαδικασία ενηµέρωσης ή ανανέωσης της
οθόνης από τη Microsoft Access, κατά τη διάρκεια εκτέλεσης µιας µακροε-
ντολής. Η πιο συνηθισµένη χρήση αυτής της ενέργειας είναι η εµφάνιση ή η α-
πόκρυψη των αποτελεσµάτων µιας µακροεντολής κατά τη διάρκεια της ε-
κτέλεσής της. Προκειµένου να χρησιµοποιήσουµε την ενέργεια της αντήχησης
θα πρέπει να ορίσουµε τιµές για τις επόµενες δύο παραµέτρους:

1. Ενεργοποίηση αντήχησης (Echo On): η παράµετρος αυτή παίρνει µία από


τις τιµές «Ναι (Yes)» και «Όχι (No)» και επιτρέπει την ενεργοποίηση ή την
απενεργοποίηση της αντήχησης ανάλογα µε τις απαιτήσεις που υφίστανται
σε κάθε περίπτωση.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 313

2. Κείµενο γραµµής κατάστασης (Status bar text): η παράµετρος αυτή δέχεται


ως τιµή µια συµβολοσειρά που περιέχει το κείµενο που θα εµφανιστεί στη
γραµµή κατάστασης όταν λάβει χώρα απενεργοποίηση της αντήχησης.
Εάν για παράδειγµα επιλέξουµε να απενεργοποιήσουµε την αντήχηση, µπο-
ρούµε να εµφανίσουµε στη γραµµή κατάσταση της εφαρµογής το µήνυµα «Η
εκτέλεση της µακροεντολής βρίσκεται σε εξέλιξη». Η εµφάνιση αυτού του
µηνύµατος – που θα πρέπει να καταχωρηθεί ως τιµή σε αυτή την ιδιότητα – θα
διαρκέσει για όλο το χρονικό διάστηµα εκτέλεσης της µακροεντολής.

• Αντιγραφή αντικειµένου (CopyObject Action): χρησιµοποιούµε την ιδιότητα


αυτή για να αντιγράψουµε ένα αντικείµενο από µία βάση δεδοµένων της Mi-
crosoft Access, σε µία άλλη. Εναλλακτικά το αντικείµενο µπορεί να αντιγραφεί
στην ίδια βάση δεδοµένων, αλλά µε διαφορετικό όνοµα. Τυπικό παράδειγµα χρή-
σης αυτής της ενέργειας είναι η γρήγορη δηµιουργία αντιγράφων των πινάκων
της βάσης για λόγους ασφαλείας (backups). Η χρήση αυτής της ενέργειας, α-
παιτεί τον καθορισµό των επόµενων παραµέτρων:

1. Βάση δεδοµένων προορισµού (destination database): στην περίπτωση κατά


την οποία επιθυµούµε να αντιγράψουµε το επιλεγµένο αντικείµενο σε µία άλ-
λη βάση δεδοµένων, θα πρέπει να καταχωρήσουµε ως τιµή σε αυτή την παρά-
µετρο, το όνοµα και τη διαδροµή του αρχείου της βάσης δεδοµένων της
Microsoft Access, στο οποίο επιθυµούµε να αντιγράψουµε αυτό το αντι-
κείµενο. Εάν δεν καταχωρήσουµε καµία τιµή σε αυτή την παράµετρο, λαµβά-
νει χώρα δηµιουργία αντιγράφου του επιλεγµένου αντικειµένου, στην τρέχου-
σα βάση δεδοµένων.

2. Νέο όνοµα (New Name): η παράµετρος αυτή επιτρέπει τον καθορισµό του
ονόµατος για το αντίγραφο του αντικειµένου που πρόκειται να δηµιουρ-
γήσουµε. Εάν αυτό το αντίγραφο δηµιουργηθεί σε βάση δεδοµένων διαφορε-
τική από την τρέχουσα, µπορούµε να µην καταχωρήσουµε τίποτε σε αυτή την
παράµετρο, έτσι ώστε να προκαλέσουµε την αντιγραφή του αντικειµένου
χρησιµοποιώντας το ίδιο όνοµα. Είναι προφανές πως εάν το αντίγραφο του
αντικειµένου δηµιουργηθεί στην ίδια βάση δεδοµένων µε αυτή που περιέ-
χει το αρχικό αντικείµενο, θα πρέπει να καθορίσουµε ένα διαφορετικό ό-
νοµα. Στην αντίθετη περίπτωση η Microsoft Access θα εµφανίσει ένα µήνυµα
λάθους και θα διακόψει την εκτέλεση της µακροεντολής.

3. Τύπος αντικειµένου προέλευσης (Source Object Type): χρησιµοποιούµε


την παράµετρο αυτή για να καθορίσουµε τον τύπο του αντικειµένου προέ-
λευσης του αντιγράφου που θέλουµε να δηµιουργήσουµε. Στην τρέχουσα
έκδοση της Microsoft Access, οι τύποι αντικειµένων που µπορούµε να χρησι-
µοποιήσουµε είναι πίνακας (table), ερώτηµα (query), φόρµα (form), έκθε-
ση (report), µακροεντολή (macro), λειτουργική µονάδα (module), σελίδα
πρόσβασης δεδοµένων (data access page), προβολή διακοµιστή (server
view), διάγραµµα (diagram) και αποθηκευµένη διαδικασία (stored proce-
dure).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 314

4. Όνοµα αντικειµένου προέλευσης (Source Object Name): χρησιµοποιούµε


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

• Αποθήκευση (Save Action): χρησιµοποιούµε αυτή την ενέργεια για να αποθη-


κεύσουµε κάποιο από τα αντικείµενα της βάσης δεδοµένων. Εάν δεν καθορί-
σουµε κανένα αντικείµενο, λαµβάνει χώρα αποθήκευση του ενεργού αντικειµέ-
νου, δηλαδή του αντικειµένου που κατά τη διάρκεια εκτέλεσης της µακροεντολής,
είναι επιλεγµένο στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων. Στη
γενική περίπτωση η χρήση αυτής της ενέργειας, προϋποθέτει τον καθορισµό των
επόµενων δύο παραµέτρων:

1. Τύπος αντικειµένου (Object Type): η παράµετρος αυτή δέχεται ως τιµή τον


τύπο του αντικειµένου που επιθυµούµε να αποθηκεύσουµε. Σε πλήρη ανα-
λογία µε την προηγούµενη ενέργεια, οι τύποι αντικειµένων που µπορούµε να
χρησιµοποιήσουµε είναι πίνακας (table), ερώτηµα (query), φόρµα (form),
έκθεση (report), µακροεντολή (macro), λειτουργική µονάδα (module), σε-
λίδα πρόσβασης δεδοµένων (data access page), προβολή διακοµιστή
(server view), διάγραµµα (diagram) και αποθηκευµένη διαδικασία (stored
procedure).

2. Όνοµα αντικειµένου (Object Name): η παράµετρος αυτή δέχεται ως τιµή το


όνοµα του αντικειµένου που επιθυµούµε να αποθηκεύσουµε. Εάν δεν κα-
ταχωρήσουµε κάποια τιµή σε αυτή την παράµετρο (ενώ το ίδιο έχουµε κάνει
και µε τον τύπο του αντικειµένου), η Microsoft Access αποθηκεύει το ενεργό
αντικείµενο (active object). Εναλλακτικά µπορούµε να µην καθορίσουµε τον
τύπο του αντικειµένου, και να καταχωρήσουµε στην παράµετρο αυτή ένα άλ-
λο όνοµα. Στην περίπτωση αυτή η Microsoft Access αποθηκεύει το τρέχον
αντικείµενο της βάσης µε διαφορετικό όνοµα.

• Αποκατάσταση (Restore Action): η ενέργεια αυτή καλείται χωρίς ορίσµατα και


προκαλεί την επαναφορά ενός παραθύρου που έχει µεγιστοποιηθεί (maxi-
mized) ή ελαχιστοποιηθεί (minimized) στο φυσικό του µέγεθος.

• Αποστολή Αντικειµένου (SendObject Action): χρησιµοποιούµε την ενέργεια


αυτή για να αποστείλουµε αντικείµενα της βάσης δεδοµένων (π.χ. φύλλα δε-
δοµένων, φόρµες, λειτουργικές µονάδες και σελίδες πρόσβασης δεδοµένων)
σε κάποιο άλλο χρήστη, δια της χρήσης της υπηρεσίας του ηλεκτρονικού τα-
χυδροµείου. Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό των επόµενων
παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου που επιθυµούµε να χρησιµο-
ποιήσουµε. Σε πλήρη αναλογία µε την προηγούµενη ενέργεια, οι διαθέσιµοι
τύποι αντικειµένων είναι πίνακας (table), ερώτηµα (query), φόρµα (form),

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 315

έκθεση (report), µακροεντολή (macro), λειτουργική µονάδα (module), σε-


λίδα πρόσβασης δεδοµένων (data access page), προβολή διακοµιστεί
(server view), διάγραµµα (diagram) και αποθηκευµένη διαδικασία (stored
procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου που θέλουµε να απο-
στείλουµε δια της χρήσης της υπηρεσίας του ηλεκτρονικού ταχυδροµείου.
Εάν δεν καθορίσουµε κάποια τιµή στις παραµέτρους «Τύπος Αντικειµένου»
και «Όνοµα Αντικειµένου», λαµβάνει χώρα αποστολή του ενεργού αντικει-
µένου (active object) της βάσης δεδοµένων.

3. Μορφή Εξόδου (Output Format): η παράµετρος αυτή επιτρέπει τον καθο-


ρισµό της µορφοποίησης µε την οποία θα αποσταλεί το αντικείµενο της
βάσης. Πιο συγκεκριµένα, αυτό το αντικείµενο µπορεί να αποσταλεί ως ιστο-
σελίδα (HTML format), φύλλο δεδοµένων του Microsoft Excel (XLS for-
mat), αρχείο κειµένου (TXT format), εµπλουτισµένο αρχείο κειµένου
(RTF format) ή σελίδα πρόσβασης δεδοµένων της Microsoft Access
(HTML format). Ας σηµειωθεί πως εάν δεν καταχωρήσουµε κάποια τιµή σε
αυτή την παράµετρο, η Microsoft Access θα µας ζητήσει να ορίσουµε τη δια-
µόρφωση του αντικειµένου, αµέσως πριν τη διαδικασία αποστολής του.

4. Προς (To): η παράµετρος αυτή επιτρέπει τον καθορισµό της ηλεκτρονικής


διεύθυνσης των παραληπτών στους οποίους θα αποσταλεί το επιλεγµένο
αντικείµενο. Στην περίπτωση κατά την οποία επιθυµούµε να στείλουµε το
αντικείµενο σε περισσότερους από έναν παραλήπτες, µπορούµε να αναγρά-
ψουµε τις ηλεκτρονικές τους διευθύνσεις τη µία δίπλα στην άλλη και χω-
ρισµένες µε ελληνικό ερωτηµατικό. Εναλλακτικά, µπορούµε αντί για το ελ-
ληνικό ερωτηµατικό να χρησιµοποιήσουµε το χαρακτήρα που επιτρέπει το
διαχωρισµό στοιχείων λίστας (lists separator) που έχουµε ορίσει από το ει-
κονίδιο Regional Settings του Πίνακα Ελέγχου. Εάν η µακροεντολή εκτελε-
στεί µε επιτυχία, το µήνυµα που περιέχει το αντικείµενο προς αποστολή θα
µεταφερθεί στον κατάλογο «Εξερχόµενα Μηνύµατα» του προεπιλεγµένου
προγράµµατος διαχείρισης ηλεκτρονικής αλληλογραφίας (όπως είναι για πα-
ράδειγµα το Microsoft Outlook) από όπου µπορεί να προωθηθεί στον τελικό
χρήστη.

5. Κοινοποίηση (Cc) και Ιδιαίτερη Κοινοποίηση (Bcc): στην περίπτωση κατά


την οποία επιθυµούµε να αποστείλουµε το επιλεγµένο αντικείµενο σε περισ-
σότερους από έναν παραλήπτες, µπορούµε εναλλακτικά να καταχωρήσουµε
τις ηλεκτρονικές τους διευθύνσεις στα πεδία Cc (Carbon Copies) και Bcc
(Blind Carbon Copies). Στα πεδία αυτά µπορούµε να καταχωρήσουµε περισ-
σότερες από µία διευθύνσεις χρησιµοποιώντας τους χαρακτήρες διαχωρισµού
που αναφέραµε στην προηγούµενη παράγραφο.

6. Θέµα (Subject): χρησιµοποιούµε την παράµετρο αυτή για να καθορίσουµε το


θέµα (subject) του µηνύµατος του ηλεκτρονικού ταχυδροµείου που περιέχει
το αντικείµενο προς αποστολή. Στην περίπτωση κατά την οποία δεν λάβει χώ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 316

ρα καταχώρηση κάποιας τιµής σε αυτή την παράµετρο, το µήνυµα θα απο-


σταλεί χωρίς να έχει καθορισθεί κάποιο θέµα.

7. Κείµενο µηνύµατος (Message Text): στην περίπτωση κατά την οποία επιθυ-
µούµε εκτός από το επιλεγµένο αντικείµενο να αποστείλουµε και κάποιο κεί-
µενο (για παράδειγµα ορισµένα διευκρινιστικά σχόλια όσον αφορά το ρόλο
και τα περιεχόµενα του αντικειµένου), µπορούµε να καταχωρήσουµε αυτό το
κείµενο ως τιµή σε αυτή την παράµετρο. Στην αντίθετη περίπτωση το αντι-
κείµενο θα αποσταλεί χωρίς να συνοδεύεται από κάποιο κείµενο.

8. Επεξεργασία µηνύµατος (Edit Message): η παράµετρος αυτή παίρνει µόνο


τις τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν είναι δυνατή η πε-
ραιτέρω επεξεργασία του µηνύµατος αµέσως πριν τη διαδικασία αποστο-
λής του. Στην περίπτωση κατά την οποία ενεργοποιήσουµε τη δυνατότητα της
περαιτέρω επεξεργασίας, η εκτέλεση της µακροεντολής προκαλεί την εκκί-
νηση του προεπιλεγµένου προγράµµατος διαχείρισης ηλεκτρονικού ταχυ-
δροµείου δια της χρήσης του οποίου µπορούµε να προχωρήσουµε στην επε-
ξεργασία του µηνύµατος πριν τη διαδικασία αποστολής του.

9. Αρχείο προτύπου (Template File): στην περίπτωση κατά την οποία επιθυ-
µούµε να στείλουµε κάποιο αντικείµενο διαµορφωµένο ως ιστοσελίδα
(HTML format), µπορούµε να χρησιµοποιήσουµε αυτή την παράµετρο για
να καθορίσουµε το όνοµα και τη διαδροµή ενός αρχείου προτύπου (tem-
plate file) µε τη βοήθεια του οποίου θα λάβει χώρα η διαµόρφωση του περιε-
χοµένου της ιστοσελίδας.

• Αποστολή χαρακτήρων (SendKeys Action): χρησιµοποιώντας αυτή την ενέρ-


γεια έχουµε τη δυνατότητα να αποστείλουµε συνδυασµούς χαρακτήρων στη
Microsoft Access χωρίς να χρησιµοποιήσουµε το πληκτρολόγιο. Στην περί-
πτωση αυτή η Access διαπραγµατεύεται τους χαρακτήρες που δέχεται, µε τον ίδιο
ακριβώς τρόπο που θα το έκανε, εάν πληκτρολογούσαµε τους χαρακτήρες στο
πληκτρολόγιο. Αυτή η ενέργεια είναι ιδιαίτερα χρήσιµη σε περιπτώσεις κατά τις
οποίες επιθυµούµε να αλληλεπιδράσουµε µε κάποιο πλαίσιο διαλόγου χωρίς να
διακόψουµε την εκτέλεση κάποιας µακροεντολής που εκτελείται ενδεχοµένως ε-
κείνη τη στιγµή. Η χρήση αυτής της ενέργειας προϋποθέτει την καταχώρηση τι-
µών στις ακόλουθες παραµέτρους:

1. Ακολουθία χαρακτήρων (keystrokes): χρησιµοποιούµε αυτή την παράµετρο


για να καταχωρήσουµε την ακολουθία χαρακτήρων που θέλουµε να απο-
στείλουµε στην εφαρµογή. Η τιµή που δέχεται αυτή η παράµετρος είναι µια
συµβολοσειρά που έχει µέγιστο µήκος 255 χαρακτήρες.

2. Αναµονή (Wait): η παράµετρος αυτή δέχεται µόνο τις τιµές «Ναι (Yes)» και
«Όχι (No)» και καθορίζει εάν η θα λάβει χώρα αναστολή (suspension) της
εκτέλεσης της µακροεντολής µέχρι την ολοκλήρωση της επεξεργασίας των
χαρακτήρων που έχουν αποσταλεί. Η προεπιλεγµένη τιµή αυτής της παραµέ-
τρου είναι η τιµή «Όχι».

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 317

• ∆ιαγραφή Αντικειµένου (DeleteObject Action): χρησιµοποιούµε την ενέργεια


αυτή για να διαγράψουµε ένα αντικείµενο από τη βάση δεδοµένων της εφαρ-
µογής. Ας σηµειωθεί πως στη γενική περίπτωση η διαδικασία διαγραφής αντικει-
µένων στην Microsoft Access δεν µπορεί να αναιρεθεί, και για το λόγο αυτό θα
πρέπει να γίνεται µε πολύ µεγάλη προσοχή. Η χρήση αυτής της ενέργειας απαιτεί
τον καθορισµό των επόµενων παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή δέχεται ως τιµή τον


τύπο του αντικειµένου που επιθυµούµε να διαγράψουµε. Σε πλήρη αναλο-
γία µε προηγούµενες ενέργειες, οι διαθέσιµοι τύποι αντικειµένων που µπο-
ρούµε να χρησιµοποιήσουµε, είναι πίνακας (table), ερώτηµα (query), φόρ-
µα (form), έκθεση (report), µακροεντολή (macro), λειτουργική µονάδα
(module), σελίδα πρόσβασης δεδοµένων (data access page), προβολή δια-
κοµιστεί (server view), διάγραµµα (diagram) και αποθηκευµένη διαδικα-
σία (stored procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή δέχεται ως τιµή το


όνοµα του αντικειµένου που επιθυµούµε να διαγράψουµε, και το οποίο α-
νήκει στον τύπο αντικειµένων που έχει καθοριστεί δια της χρήσης της προη-
γούµενης παραµέτρου. Στην περίπτωση κατά την οποία δεν καθορίσουµε ούτε
τον τύπο αλλά ούτε και το όνοµα του αντικειµένου, η Microsoft Access δια-
γράφει το αντικείµενο που είναι επιλεγµένο στο κεντρικό παράθυρο δια-
χείρισης της βάσης δεδοµένων της εφαρµογής.

• ∆ιακοπή όλων των µακροεντολών (StopAllMacros Action): η ενέργεια αυτή


καλείται χωρίς ορίσµατα και προκαλεί τη διακοπή της εκτέλεσης όλων των µα-
κροεντολών που εκτελούνται στην εφαρµογή µας την τρέχουσα χρονική στιγ-
µή. Αυτή η ενέργεια είναι ιδιαίτερα χρήσιµη σε περιπτώσεις εµφάνισης σφαλ-
µάτων η αντιµετώπιση των οποίων απαιτεί την άµεση διακοπή της λειτουργίας
όλων των µακροεντολών που εκτελούνται στο σύστηµα τη χρονική στιγµή εµφά-
νισης αυτών των σφαλµάτων.

• ∆ιακοπή της µακροεντολής (StopMacro Action): η ενέργεια αυτή καλείται χω-


ρίς ορίσµατα και προκαλεί τη διακοπή της εκτέλεσης της τρέχουσας µακροε-
ντολής. Χρησιµοποιείται σε περιπτώσεις κατά τις οποίες η ισχύς κάποιας συνθή-
κης επιβάλει τον τερµατισµό της µακροεντολής που εκτελείται. Σε πλήρη αναλό-
γία µε την προηγούµενη ενέργεια, χρησιµοποιείται για την αντιµετώπιση σφαλµά-
των που λαµβάνουν χώρα κατά τη διάρκεια της εκτέλεσης της µακροεντολής.

• Εκτέλεση εντολής (RunCommand Action): χρησιµοποιούµε αυτή την ενέργεια


στην περίπτωση κατά την οποία επιθυµούµε να εκτελέσουµε κάποια από τις εσω-
τερικές εντολές της Access (built-in Access commands). Η χρήση αυτής της ε-
ντολής απαιτεί τον καθορισµό του ονόµατος της εντολής που επιθυµούµε να
εκτελέσουµε, το οποίο δύναται να επιλεγεί από κατάλληλα διαµορφωµένο πλαί-
σιο λίστας (list box).
• Εκτέλεση εντολής SQL (RunSQL Action): χρησιµοποιούµε αυτή την ενέργεια
σε περιπτώσεις κατά τις οποίες επιθυµούµε να εκτελέσουµε ένα ερώτηµα ενέρ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 318

γειας (action query) µέσα από την τρέχουσα µακροεντολή. Η χρήση αυτής της
ενέργειας απαιτεί τον καθορισµό των επόµενων δύο παραµέτρων:

1. Πρόταση SQL (SQL Statement): η πρόταση SQL που επιθυµούµε να εκτε-


λέσουµε µέσα από την τρέχουσα µακροεντολή. Το µέγιστο µήκος της συµβο-
λοσειράς που θα καταχωρήσουµε ως τιµή σε αυτή την παράµετρο είναι 256
χαρακτήρες.

2. Χρήση συναλλαγής (Use Transaction): η παράµετρος αυτή παίρνει µία από


τις τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν η πρόταση SQL που
χρησιµοποιείται µέσα από αυτή την ενέργεια θα συµµετέχει σε κάποια διαδι-
κασία συναλλαγής (transaction). Αυτή η διαδικασία συσχετίζεται µε ένα σύ-
νολο αλλαγών που µπορούν να εφαρµοσθούν τόσο πάνω στο σχήµα της βά-
σης, όσο και πάνω στα δεδοµένα που περιλαµβάνονται σε αυτή.

Είναι σηµαντικό να αναφέρουµε πως η χρήση αυτής της ενέργειας για την εκτέ-
λεση κάποιας πρότασης SQL λαµβάνει χώρα µόνο όταν η πρόταση SQL αναφέ-
ρεται σε ένα ερώτηµα ενέργειας (action query) ή σε κάποιο ερώτηµα ορισµού
δεδοµένων (data definition query). Από αυτές τις δύο κατηγορίες ερωτηµάτων,
τα ερωτήµατα ενέργειας επιτρέπουν την καταχώρηση, διαγραφή και τροπο-
ποίηση των δεδοµένων των πινάκων της βάσης, ενώ τα ερωτήµατα ορισµού
δεδοµένων επιτρέπουν τη δηµιουργία και διαγραφή στοιχείων της βάσης,
όπως είναι οι πίνακες και οι δείκτες. Αντίθετα, εάν η πρόταση SQL που θέλου-
µε να χρησιµοποιήσουµε αναφέρεται σε ερώτηµα επιλογής (select query) ή ε-
ρώτηµα διασταύρωσης (crosstab query), δεν θα χρησιµοποιήσουµε την ενέρ-
γεια αυτή, αλλά την ενέργεια «Άνοιγµα Ερωτήµατος (OpenQuery Action)» που
έχει περιγραφεί σε προηγούµενη ενότητα.

• Εκτέλεση εφαρµογής (RunApp Action): χρησιµοποιούµε την ενέργεια αυτή για


να εκτελέσουµε µία εφαρµογή µέσα από την τρέχουσα µακροεντολή. Η ενέρ-
γεια αυτή απαιτεί τον καθορισµό µιας και µοναδικής παραµέτρου που είναι το
όνοµα και η διαδροµή του εκτελέσιµου αρχείου που θέλουµε να χρησιµο-
ποιήσουµε. Εάν για παράδειγµα επιθυµούµε να εκτελέσουµε µέσα από την τρέ-
χουσα εντολή το πρόγραµµα διαχείρισης ηλεκτρονικής αλληλογραφίας, θα
πρέπει ως τιµή σε αυτή την παράµετρο, να καταχωρίσουµε τη συµβολοσειρά
«outlook.exe».

• Εκτέλεση κώδικα (RunCode Action): χρησιµοποιούµε αυτή την ενέργεια για


να καλέσουµε και να χρησιµοποιήσουµε κάποια διαδικασία συνάρτησης
(function procedure) της γλώσσας προγραµµατισµού Visual Basic. Η χρήση
αυτής της ενέργειας, απαιτεί τον καθορισµό µιας και µοναδικής παραµέτρου, που
είναι το όνοµα της διαδικασίας που θέλουµε να καλέσουµε µέσα από την τρέ-
χουσα µακροεντολή. Στην περίπτωση κατά την οποία η διαδικασία αυτή περιέχει
ορίσµατα, αυτά θα αναγραφούν αµέσως µετά το όνοµά της και κεκλεισµένα
εντός παρενθέσεων, όπως συµβαίνει στις παραδοσιακές γλώσσες προγραµµα-
τισµού. Στην αντίθετη περίπτωση, θα καταχωρήσουµε στην παράµετρο αυτή το
όνοµα της διαδικασίας συνοδευόµενο από δύο κενές παρενθέσεις, π.χ. TestFunc-
tion (). Αν και έχουµε τη δυνατότητα να καταχωρήσουµε µε το χέρι το όνοµα της

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 319

διαδικασίας που θέλουµε να χρησιµοποιήσουµε, εν τούτοις µπορούµε να σχηµα-


τίσουµε το πρωτότυπο κλήσης αυτής της διαδικασίας, χρησιµοποιώντας κατάλλη-
λα σχεδιασµένο πλαίσιο διαλόγου.

• Εκτέλεση µακροεντολής (RunMacro Action): χρησιµοποιούµε την ενέργεια


αυτή, για να εκτελέσουµε µία µακροεντολή της Microsoft Access, µέσα από
την τρέχουσα µακροεντολή. Η χρήση αυτής της ενέργειας, απαιτεί τον καθορισµό
των επόµενων τριών παραµέτρων:

1. Όνοµα Μακροεντολής (Macro Name): Η παράµετρος αυτή δέχεται ως τιµή


το όνοµα της µακροεντολής που επιθυµούµε να εκτελέσουµε. Ο καθορι-
σµός αυτού του ονόµατος γίνεται πάρα πολύ εύκολα, επιλέγοντάς το από το
πλαίσιο λίστας που περιέχει όλα τα ονόµατα των µακροεντολών της τρέχου-
σας βάσης δεδοµένων.

2. Μέτρηση ελέγχου επαναλήψεων (Repeat Count): στην περίπτωση κατά την


οποία επιθυµούµε να εκτελέσουµε την µακροεντολή που έχουµε επιλέξει, πε-
ρισσότερες από µία φορές, καταχωρούµε στην παράµετρο αυτή, το µέγιστο
αριθµό επαναλήψεων της επιλεγµένης µακροεντολής. Εάν δεν αποδώσουµε
τιµή στην παράµετρο αυτή, η εν λόγω µακροεντολή θα εκτελεστεί µόνο µία
φορά.

3. Έκφραση ελέγχου επαναλήψεων (Repeat Count): στην παράµετρο αυτή


µπορούµε να περάσουµε ως τιµή µία έκφραση, η τιµή της οποίας (true ή false)
θα υπολογίζεται σε κάθε κύκλο εκτέλεσης της µακροεντολής (σε περίπτω-
ση που αυτή θα εκτελεστεί περισσότερες από µία φορές). Η εκτέλεση της µα-
κροεντολής θα συνεχιστεί για όσο χρονικό διάστηµα η τιµή αυτής της έκφρα-
σης είναι αληθής (true), ενώ στην περίπτωση κατά την οποία αυτή η έκφραση
λάβει την τιµή false, θα λάβει χώρα τερµατισµός της εκτέλεσης της µακροε-
ντολής.

• Εκτύπωση (PrintOut Action): χρησιµοποιούµε την ενέργεια αυτή για να εκτυ-


πώσουµε τα περιεχόµενα του ενεργού αντικειµένου της τρέχουσας βάσης δε-
δοµένων. Αυτό το αντικείµενο µπορεί να είναι ένας πίνακας, µία φόρµα, µία σε-
λίδα πρόσβασης δεδοµένων ή µια λειτουργική µονάδα. Προκειµένου να χρησι-
µοποιήσουµε την ενέργεια αυτή, θα πρέπει να ορίσουµε τις επόµενες παραµέ-
τρους:

1. Περιοχή σελίδων για εκτύπωση (Print Range): η τιµή που καταχωρούµε σε


αυτή την παράµετρο, είναι η περιοχή σελίδων που επιθυµούµε να εκτυπώ-
σουµε σε κάθε περίπτωση. Η παράµετρος αυτή µπορεί να λάβει µία από τις
τρεις επόµενες τιµές:

• Όλο (All): η χρήση αυτής της τιµής επιτρέπει την εκτύπωση του συ-
νόλου των σελίδων του ενεργού αντικειµένου.
• Επιλογή (Selection): χρησιµοποιώντας αυτή την τιµή µπορούµε να
εκτυπώσουµε µόνο το τµήµα του αντικειµένου που έχει επιλεγεί (µε
το πληκτρολόγιο ή µε το ποντίκι).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 320

• Σελίδες (Pages): η χρήση αυτής της τιµής επιτρέπει την εκτύπωση


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

2. Από σελίδα (Page From) και Έως σελίδα (Page To): στην περίπτωση κατά
την οποία καταχωρήσαµε στην παράµετρο Print Range την τιµή Pages, θα
πρέπει να χρησιµοποιήσουµε αυτές τις δύο τιµές για να καθορίσουµε την
αρχική και την τελική σελίδα εκτύπωσης. Στην περίπτωση αυτή η εκτύπω-
ση θα ξεκινήσει από την αρχή της αρχικής σελίδας, και θα ολοκληρωθεί στο
τέλος της τελικής σελίδας.

3. Ποιότητα εκτύπωσης (Print Quality): χρησιµοποιώντας την παράµετρο αυ-


τή, µπορούµε να καθορίσουµε την ποιότητα της εκτύπωσης, η οποία θα επι-
λεγεί έτσι ώστε να καλύπτονται οι ανάγκες που υφίστανται σε κάθε περίπτω-
ση. Υπάρχουν τέσσερις διαφορετικές ποιότητες εκτύπωσης που µπορούµε
να χρησιµοποιήσουµε, και οι οποίες είναι η υψηλή (high), µέτρια (medium),
χαµηλή (low) και πρόχειρη (draft). Είναι προφανές, πως όσο πιο χαµηλή εί-
ναι η ποιότητα της εκτύπωσης, τόσο πιο µεγάλη θα είναι και η ταχύτητά
της. Η προεπιλεγµένη τιµή για αυτή την παράµετρο, είναι η υψηλή ποιότητα
εκτύπωσης (high quality).

4. Αντίτυπα (Copies): χρησιµοποιούµε την παράµετρο αυτή για να καθορίσου-


µε τον αριθµό των αντιτύπων που θέλουµε να εκτυπώσουµε. Εάν δεν κα-
ταχωρήσουµε κάποια τιµή σε αυτή την ιδιότητα, χρησιµοποιείται η προεπι-
λεγµένη τιµή, που είναι η τιµή 1 (δηλαδή ένα µόνο αντίτυπο).

5. Συρραφή αντιτύπων (Collate Copies): στην περίπτωση κατά την οποία επι-
θυµούµε να εκτυπώσουµε περισσότερα από ένα αντίτυπα του ενεργού αντι-
κειµένου και η εκτύπωση του κάθε ενός από αυτά επεκτείνεται σε περισσότε-
ρες από µία σελίδες, µπορούµε να καθορίσουµε εάν για κάθε αντίτυπο θα
εκτυπώνεται το σύνολο των σελίδων του πριν την έναρξη της διαδικασίας
εκτύπωσης του άλλου αντιτύπου, ή εάν θα λαµβάνει χώρα εκτύπωση ό-
λων των αντιτύπων της κάθε σελίδας. Ο καθορισµός αυτής της παραµέτρου,
γίνεται δια της χρήσης του ορίσµατος Collate Copies, το οποίο παίρνει µία
από τις τιµές «Ναι (Yes)» και «Όχι (No)». Για να κατανοήσουµε καλύτερα
αυτή τη διαδικασία, ας υποθέσουµε πως θέλουµε να εκτυπώσουµε τρία αντί-
γραφα µιας αναφοράς, η οποία εκτείνεται σε τέσσερις σελίδες. Εάν αποδώ-
σουµε στην παράµετρο Collate Copies την τιµή «Ναι», οι σελίδες θα εκτυ-
πωθούν µε τη σειρά 1,2,3,4 (για το πρώτο αντίγραφο), 1,2,3,4 (για το δεύ-
τερο αντίγραφο) και 1,2,3,4 (για το τρίτο αντίγραφο). Αντίθετα, εάν στην
παράµετρο αυτό αποδώσουµε την τιµή «Όχι», η σειρά εκτύπωσης των σελί-
δων θα είναι 1,1,1,2,2,2,3,3,3,4,4,4. Είναι προφανές πως από τις δύο αυτές
σειρές εκτύπωσης θα επιλέξουµε την πρώτη, καθώς στη δεύτερη περίπτωση
θα πρέπει να οµαδοποιήσουµε τις σελίδες έτσι ώστε να σχηµατίσουµε τα τρία
αντίτυπα του εγγράφου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 321

• Ελαχιστοποίηση (Minimize Action): χρησιµοποιούµε αυτή την ενέργεια για να


ελαχιστοποιήσουµε το ενεργό πλαίσιο διαλόγου. Στην περίπτωση αυτή, το εν
λόγω πλαίσιο εµφανίζεται ως µία µικρή γραµµή τίτλου (title bar), η οποία βρί-
σκεται στο κάτω µέρος της οθόνης. Αυτή η ενέργεια είναι ιδιαίτερα χρήσιµη σε
περιπτώσεις κατά τις οποίες επιθυµούµε να αποµακρύνουµε από την οθόνη το
πλαίσιο διαλόγου που συσχετίζεται µε κάποιο αντικείµενο, χωρίς να χρειαστεί
να κλείσουµε το ίδιο το αντικείµενο.

• Εµφάνιση γραµµής εργαλείων (ShowToolbar Action): χρησιµοποιούµε την ε-


νέργεια αυτή για να εµφανίσουµε ή να αποκρύψουµε µία γραµµή εργαλείων
από την οθόνη του υπολογιστή µας. Αυτή η γραµµή εργαλείων µπορεί να είναι
είτε µία από τις τυπικές γραµµές εργαλείων της Microsoft Access (built-in
toolbar) ή κάποια προσαρµοσµένη γραµµή εργαλείων (custom toolbar) η ο-
ποία έχει δηµιουργηθεί για να καλύψει κάποιες από τις ανάγκες µας. Προκει-
µένου να χρησιµοποιήσουµε αυτή την ενέργεια, θα πρέπει να καθορίσουµε τις ε-
πόµενες δύο παραµέτρους:

1. Όνοµα γραµµής εργαλείων (Toolbar Name): η παράµετρος αυτή περιέχει το


όνοµα της γραµµής εργαλείων που θέλουµε να εµφανίσουµε ή να αποκρύ-
ψουµε. Η επιλογή αυτού του ονόµατος γίνεται πάρα πολύ εύκολα από ένα ει-
δικό πλαίσιο λίστας (list box) το οποίο περιέχει τα ονόµατα όλων των γραµ-
µών εργαλείων της εφαρµογής.

2. Εµφάνιση (Show): στην περίπτωση κατά την οποία επιθυµούµε να εµφανί-


σουµε την επιλεγµένη γραµµή εργαλείων θα πρέπει να καταχωρήσουµε στην
παράµετρο αυτή την τιµή «Ναι (Yes)», ενώ εάν θέλουµε να αποµακρύνουµε
από την οθόνη µας την εν λόγω γραµµή, θα πρέπει στην παράµετρο αυτή να
καταχωρήσουµε την τιµή «Όχι (No)». Εναλλακτικά µπορούµε να χρησιµο-
ποιήσουµε την τιµή «Όπου Χρειάζεται (When Appropriate)» για να προκα-
λέσουµε την εµφάνιση της γραµµής εργαλείων, µόνο όπου αυτό είναι ανα-
γκαίο.

• Ενηµέρωση αντικειµένου (RepaintObject Action): χρησιµοποιούµε την ενέρ-


γεια αυτή για να επανασχεδιάσουµε το τµήµα της οθόνης που καταλαµβάνεται
από ένα αντικείµενο, όταν λάβει χώρα µεγιστοποίηση, ελαχιστοποίηση ή µετακί-
νηση κάποιου από τα αντικείµενα της βάσης δεδοµένων. Ας σηµειωθεί πως αυτές
οι διαδικασίες ενηµέρωσης της οθόνης γίνονται µετά την ολοκλήρωση όλων ε-
κείνων των διαδικασιών που προηγούνται χρονικά. Ωστόσο η χρήση αυτής της
ενέργειας, µας επιτρέπει να επανασχεδιάσουµε άµεσα την οθόνη χωρίς να ανα-
µένουµε την ολοκλήρωση όλων των αυτών των διαδικασιών. Η χρήση αυτής της
ενέργειας, απαιτεί τον καθορισµό των επόµενων δύο παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου που επιθυµούµε να επανασχε-
διάσουµε. Σε πλήρη αναλογία µε προηγούµενες ενέργειες που εφαρµόζονται
πάνω σε αντικείµενα της βάσης, οι τύποι αντικειµένων που µπορούµε να χρη-
σιµοποιήσουµε, είναι πίνακας (table), ερώτηµα (query), φόρµα (form), έκ-
θεση (report), µακροεντολή (macro), λειτουργική µονάδα (module), σελί-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 322

δα πρόσβασης δεδοµένων (data access page), προβολή διακοµιστή (server


view), διάγραµµα (diagram) και αποθηκευµένη διαδικασία (stored proce-
dure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου που θέλουµε να επανα-
σχεδιάσουµε χρησιµοποιώντας την τρέχουσα ενέργεια. Εάν δεν καθορίσουµε
κάποια τιµή στις παραµέτρους «Τύπος Αντικειµένου» και «Όνοµα Αντικει-
µένου», λαµβάνει χώρα επανασχεδίαση του ενεργού αντικειµένου (active
object) δηλαδή του αντικειµένου που την τρέχουσα χρονική στιγµή είναι επι-
λεγµένο στο κεντρικό παράθυρο διαχείριση της βάσης δεδοµένων της εφαρ-
µογής.

• Έξοδος (Quit Action) : χρησιµοποιούµε αυτή την ενέργεια για να τερµατίσουµε


τη λειτουργία της Microsoft Access. Αυτή η ενέργεια δέχεται ως όρισµα την
παράµετρο «Επιλογές (Options)» η οποία καθορίζει µε ποιο τρόπο θα τερµατι-
στεί η εφαρµογή όσον αφορά τη διαδικασία αποθήκευσης των δεδοµένων της
βάσης. Η παράµετρος αυτή µπορεί να λάβει µία από τις τρεις επόµενες τιµές:

1. Ερώτηση (Prompt): στην περίπτωση αυτή η Microsoft Access εµφανίζει για


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

2. Αποθήκευση Όλων (Save All): στην περίπτωση αυτή η Microsoft Access


αποθηκεύει αυτόµατα όλα τα αντικείµενα της βάσης, χωρίς να ρωτήσει το
χρήστη εάν επιθυµεί ή όχι την αποθήκευσή τους. Η τιµή αυτή είναι και η προ-
επιλεγµένη (default value) για αυτή την παράµετρο.

3. Έξοδος (Exit): η τιµή αυτή της παραµέτρου επιβάλλει στη Microsoft Access
να τερµατίσει τη λειτουργία της χωρίς να αποθηκεύσει κανένα αντικείµε-
νο της βάσης, και χωρίς να ρωτήσει το χρήστη εάν επιθυµεί ή όχι την αποθή-
κευση αυτών των αντικειµένων.

• Έξοδος σε (OutputTo Action): χρησιµοποιούµε την ενέργεια αυτή για να απο-


θηκεύσουµε τα δεδοµένα των αντικειµένων της βάσης δεδοµένων (π.χ. πίνα-
κες, φόρµες, αναφορές, λειτουργικές µονάδες και σελίδες πρόσβασης δεδοµένων)
σε αρχεία συγκεκριµένου τύπου, όπως είναι τα λογιστικά φύλλα του Microsoft
Excel (XLS format), τα αρχεία κειµένου του MS-DOS (TXT format) ή τα αρ-
χεία εµπλουτισµένου κειµένου (Rich Text Format, RTF). Προκειµένου να
χρησιµοποιήσουµε αυτή την ενέργεια, θα πρέπει να καθορίσουµε τις τιµές των
επόµενων παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): σε πλήρη αναλογία µε τις προηγούµενες


ενέργειες, η παράµετρος αυτή χρησιµοποιείται για τον καθορισµό του τύπου
του αντικειµένου τα δεδοµένα του οποίου επιθυµούµε να αποθηκεύσουµε.
Στην τρέχουσα έκδοση της Microsoft Access, οι τύποι αντικειµένων που µπο-
ρούµε να χρησιµοποιήσουµε, είναι πίνακας (table), ερώτηµα (query), φόρ-
µα (form), έκθεση (report), µακροεντολή (macro), λειτουργική µονάδα

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 323

(module), σελίδα πρόσβασης δεδοµένων (data access page), προβολή δια-


κοµιστή (server view), διάγραµµα (diagram) και αποθηκευµένη διαδικα-
σία (stored procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου του οποίου τα περιεχόµενα
θέλουµε να αποθηκεύσουµε σε αρχείο.

3. Μορφή εξόδου (Output Format): η παράµετρος αυτή δέχεται ως όρισµα τον


τύπου του αρχείου στο οποίο θα αποθηκεύσουµε τα περιεχόµενα του επι-
λεγµένου αντικειµένου. Η επιλογή του τύπου για το αρχείο εξόδου γίνεται
από κατάλληλα διαµορφωµένο πλαίσιο λίστας (list box), το οποίο εµφανίζει
συγκεκριµένους τύπους αρχείων. Οι τύποι αυτοί είναι Rich Text Format
(RFT), MS-DOS Text (TXT), Microsoft Internet Information Server File
Format (HTX, IDC), Microsoft Excel File Format (XLS), Microsoft Ac-
tive Server Pages Format (ASP) και HTML format (HTML).

4. Αρχείο Εξόδου (Output File): η παράµετρος αυτή περιέχει το όνοµα του


αρχείου εξόδου στο οποίο θα αποθηκευθούνε τα περιεχόµενα του επιλεγ-
µένου αντικειµένου της βάσης δεδοµένων. Εναλλακτικά µπορούµε εκτός
από το όνοµα και τη διαδροµή του αρχείου να καταχωρήσουµε και την επέ-
κτασή του, κάτι που ασφαλώς δεν είναι αναγκαίο, εφ΄ όσον έχουµε καθορίσει
τον τύπο του χρησιµοποιώντας την προηγούµενη παράµετρο. Σε περίπτωση
κατά την οποία δεν καταχωρήσουµε ούτε τον τύπο του αρχείου αλλά ούτε και
την επέκτασή του, η Microsoft Access θα µας ζητήσει αυτή την πληροφορία,
εµφανίζοντας το κατάλληλο πλαίσιο διαλόγου.

5. Αυτόµατη εκκίνηση (Auto Start): η παράµετρος αυτή παίρνει µία από τις
τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν µετά την αποθήκευση
του αρχείου θα λάβει χώρα εκκίνηση της εφαρµογής η οποία διαχειρίζε-
ται τον τύπο αρχείων που έχει καθορισθεί για το αρχείο εξόδου της συ-
γκεκριµένης ενέργειας. Εάν για παράδειγµα αποθηκεύσουµε τα περιεχόµενα
του επιλεγµένου αντικειµένου σε µορφή φύλλου δεδοµένων του Microsoft
Excel, και στο αρχείο sample.xls, η καταχώρηση της τιµής «Ναι» σε αυτή την
παράµετρο, θα έχει ως αποτέλεσµα την εκκίνηση της εφαρµογής Microsoft
Excel και το άνοιγµα του αρχείου sample.xls µέσα από αυτή. Η προεπιλεγ-
µένη τιµή για αυτή την παράµετρο, είναι η τιµή «Όχι (No)».

6. Αρχείο προτύπου (Template File): στην περίπτωση κατά την οποία ο τύπος
του αρχείου εξόδου αυτής της ενέργειας είναι HTML, HTX ή ASP µπορούµε
να χρησιµοποιήσουµε αυτή την παράµετρο για να καθορίσουµε το όνοµα
και τη διαδροµή ενός αρχείου προτύπου (template file), το οποίο θα χρη-
σιµοποιηθεί για τη δηµιουργία του αρχείου εξόδου αυτών των συγκεκρι-
µένων τύπων αρχείων.

• Επανεκτέλεση ερωτήµατος (Requery Action): χρησιµοποιούµε την ενέργεια


αυτή για να ανανεώσουµε τα περιεχόµενα ενός στοιχείου ελέγχου, στην περί-
πτωση που τα περιεχόµενα του αντικειµένου από το οποίο το στοιχείο παίρνει

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 324

δεδοµένα (data source object) έχουν µεταβληθεί. Χαρακτηριστικό παράδειγµα


µιας τέτοιας περίπτωσης είναι ένα πλαίσιο λίστας (list box) το οποίο εµφανίζει
τα επώνυµα των εργαζοµένων µιας εταιρείας. Εάν λάβει χώρα προσθήκη νέων
εργαζοµένων, θα πρέπει να ανανεώσουµε τα περιεχόµενα του πλαισίου, εκτελώ-
ντας εκ νέου το ερώτηµα που εµφανίζει τα επώνυµα των υπαλλήλων, και ε-
νηµερώνοντας στη συνέχεια αυτό το στοιχείο ελέγχου. Για να είναι βέβαια δυ-
νατή η χρήση αυτής της ενέργειας, θα πρέπει για το στοιχείο ελέγχου που επιθυ-
µούµε να χρησιµοποιήσουµε, να έχουµε ορίσει ένα αντικείµενο για τα δεδοµένα
προέλευσης.

Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό του στοιχείου ελέγχου
(control name) του οποίου τα περιεχόµενα θέλουµε να ανανεώσουµε. Για να το
κάνουµε αυτό καταχωρούµε το όνοµα αυτού του στοιχείου στην οµώνυµη παρά-
µετρο (όνοµα στοιχείου ελέγχου, control name) που είναι και το µοναδικό όρι-
σµα που θα πρέπει να καθορίσουµε για αυτή την ενέργεια.

• Επιλογή αντικειµένου (SelectObject Action): χρησιµοποιούµε αυτή την ενέρ-


γεια για να επιλέξουµε κάποιο από τα αντικείµενα της βάσης δεδοµένων της
Microsoft Access. Η χρήση αυτής της ενέργειας, απαιτεί τον καθορισµό των επό-
µενων τριών παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου αντικειµένου που επιθυµούµε να επιλέξουµε.
Στην τρέχουσα έκδοση της Microsoft Access, οι τύποι αντικειµένων που
µπορούµε να χρησιµοποιήσουµε, είναι πίνακας (table), ερώτηµα (query),
φόρµα (form), έκθεση (report), µακροεντολή (macro), λειτουργική µονά-
δα (module), σελίδα πρόσβασης δεδοµένων (data access page), προβολή
διακοµιστή (server view), διάγραµµα (diagram) και αποθηκευµένη διαδι-
κασία (stored procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου που θέλουµε να επιλέ-
ξουµε. Έχοντας καθορίσει τον τύπο αυτού του αντικειµένου δια της χρήσης
της προηγούµενης παραµέτρου, ο καθορισµός του ονόµατος του αντικειµένου
προς επιλογή, γίνεται από κατάλληλα διαµορφωµένο πλαίσιο λίστας (list
box) που περιέχει τα ονόµατα των αντικειµένων του συγκεκριµένου τύπου.

3. Στο παράθυρο βάσης δεδοµένων (In Database Window): η παράµετρος αυ-


τή καθορίζει εάν η επιλογή του καθορισµένου αντικειµένου θα πραγµατο-
ποιηθεί ή όχι στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων.
Ας υποθέσουµε για παράδειγµα πως επιθυµούµε να επιλέξουµε τον πίνακα
EMPLOYEE της βάσης δεδοµένων της εταιρείας. Εφ’ όσον ο πίνακα EM-
PLOYEE δεν είναι ανοικτός, η απόδοση της τιµής «Ναι (Yes)» σε αυτή την
ιδιότητα, εµφανίζει στην οθόνη του υπολογιστή µας το κεντρικό παράθυρο
διαχείρισης της βάσης δεδοµένων, µε τον πίνακα EMPLOYEE ως το τρέχον
επιλεγµένο αντικείµενο. Αντίθετα, εάν ο πίνακας EMPLOYEE είναι ανοι-
κτός µπορούµε να καταχωρήσουµε σε αυτή την ιδιότητα την τιµή «Όχι (No)».
Στην περίπτωση αυτή, η συγκεκριµένη ενέργεια, θα εµφανίσει τον εν λόγω πί-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 325

νακα στην οθόνη του υπολογιστή µας, και σε προβολή φύλλου δεδοµένων
(datasheet view). Ας σηµειωθεί, πως εφ’ όσον το αντικείµενο που θέλουµε να
εµφανίσουµε, δεν είναι ανοικτό, δεν µπορούµε να καταχωρήσουµε στην πα-
ράµετρο αυτή την τιµή «Όχι (No)» - εάν το κάνουµε, η Microsoft Access θα
εµφανίσει ένα µήνυµα λάθους, και θα τερµατίσει τη λειτουργία της µακροε-
ντολής.

• Επισηµάνσεις (SetWarnings Action): χρησιµοποιούµε αυτή την ενέργεια για να


ενεργοποιήσουµε ή να απενεργοποιήσουµε την εµφάνιση προειδοποιητικών
µηνυµάτων κατά τη διάρκεια της εκτέλεσης της µακροεντολής. Η χρήση της
ενέργειας αυτής απαιτεί τον καθορισµό τιµής για την παράµετρο «Ενεργοποίηση
προειδοποιήσεων (Warnings On)». Η παράµετρος αυτή θα λάβει την τιµή «Ναι
(Yes)» εφ’ όσον επιθυµούµε να επιτρέψουµε την εµφάνιση αυτών των µηνυµά-
των, και την τιµή «Όχι (No)» στην αντίθετη περίπτωση.

• Εύρεση εγγραφής (FindRecord Action): σε περιπτώσεις κατά τις οποίες επιθυ-


µούµε να αναζητήσουµε την πρώτη εγγραφή του ενεργού αντικειµένου της
βάσης δεδοµένων η οποία να πληροί κάποια συγκεκριµένα κριτήρια, χρησι-
µοποιούµε την ενέργεια FindRecord. Η αναζήτηση αυτή µπορεί να εφαρµοσθεί
πάνω σε αντικείµενα συγκεκριµένου τύπου (όπως είναι οι πίνακες, τα ερωτή-
µατα και οι φόρµες), και η πραγµατοποίησή της απαιτεί τον καθορισµό των επό-
µενων παραµέτρων:

1. Εύρεση του (Find What): η παράµετρος αυτή δέχεται ως όρισµα την τιµή του
δεδοµένου που επιθυµούµε να αναζητήσουµε στα αντικείµενα της βάσης.
Τυπικές τιµές που καταχωρούνται σε αυτή την παράµετρο είναι αριθµοί,
συµβολοσειρές και ηµεροµηνίες.

2. Ταίριασµα (Match): η παράµετρος αυτή επιτρέπει τον καθορισµό του τρό-


που αναζήτησης του δεδοµένου που έχει καθορισθεί. Οι εναλλακτικές επι-
λογές που έχουµε στη διάθεσή µας, είναι να αναζητήσουµε τις εγγραφές στα
πεδία των οποίων το δεδοµένο προς αναζήτηση αποτελεί (α) ολόκληρη την
τιµή κάποιου πεδίου (whole field), (β) τµήµα κάποιου πεδίου (Any part of
field) ή (γ) πρόθεµα στην αρχή του πεδίου (start of field). Η προεπιλεγµένη
συµπεριφορά αυτής της ενέργειας, είναι να αναζητά εγγραφές στις οποίες το
δεδοµένο προς αναζήτηση να αποτελεί το σύνολο της τιµής του πεδίου
(whole field).

3. Ταίριασµα πεζών – κεφαλαίων (Match Case): η παράµετρος αυτή παίρνει


µία από τις τιµές «Ναι (Yes)» και «Όχι (No)», και καθορίζει εάν κατά τη
διαδικασία της αναζήτησης θα ληφθεί υπ’ όψιν η διαφορά που υφίσταται
ανάµεσα στα µικρά και στα κεφαλαία γράµµατα. Πιο συγκεκριµένα, αυτή
η διαφορά λαµβάνεται υπ’ όψιν όταν η παράµετρος αυτή λάβει την τιµή
«Ναι», ενώ δεν λαµβάνεται υπ’ όψιν στην αντίθετη περίπτωση.

4. Αναζήτηση (Search): η παράµετρος αυτή καθορίζει την περιοχή των εγ-


γραφών του ενεργού αντικειµένου στις οποίες θα λάβει χώρα η διαδικασία
της αναζήτησης, και µπορεί να λάβει µία από τις επόµενες τρεις τιµές: (α)

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 326

Επάνω (Up): στην περίπτωση αυτή η αναζήτηση περιορίζεται µόνο σε εκεί-


νες τις εγγραφές που βρίσκονται πάνω από την τρέχουσα εγγραφή (β) Κά-
τω (Down): στην περίπτωση αυτή η διαδικασία αναζήτησης περιορίζεται µό-
νο στις εγγραφές του ενεργού αντικειµένου που βρίσκονται κάτω από την
τρέχουσα εγγραφή και (γ) Όλες (All): η τιµή αυτή (που είναι και η προεπι-
λεγµένη) επεκτείνει τη διαδικασία αναζήτησης σε όλες τις εγγραφές του
ενεργού αντικειµένου.

5. Αναζήτηση µε την ίδια µορφή (Search as formatted): χρησιµοποιούµε την


παράµετρο αυτή προκειµένου να περιορίσουµε τη διαδικασία της αναζή-
τησης σε εγγραφές των οποίων τα δεδοµένα χαρακτηρίζονται από κάποιο
συγκεκριµένο τύπο διαµόρφωσης. Ας υποθέσουµε για παράδειγµα πως επι-
θυµούµε να αναζητήσουµε µία ηµεροµηνία η οποία έχει καταχωρηθεί µε τη
µορφή «dd-Month-yyyy» (π.χ. 09-April-1995). Εάν σε αυτή την παράµετρο
καταχωρήσουµε την τιµή «Ναι (Yes)» τότε η διαδικασία αναζήτησης θα επι-
στρέψει µόνο εκείνες τις εγγραφές των οποίων οι ηµεροµηνίες είναι δια-
µορφωµένες µε αυτό το συγκεκριµένο τύπο αναπαράστασης. Στην αντίθε-
τη περίπτωση θα επιστραφούν όλες οι εγγραφές που περιλαµβάνουν σε κά-
ποιο από τα πεδία τους την ηµεροµηνία 09-April-1995 ανεξάρτητα από τον
τρόπο µε τον οποίο αυτή έχει καταχωρηθεί (π.χ. 9/4/95 ή April 4, 1995).

6. Μόνο στο τρέχον πεδίο (Only Current Field): η παράµετρος αυτή παίρνει
µία από τις τιµές «Ναι (Yes)» και «Όχι (No)», και καθορίζει εάν η διαδικα-
σία της αναζήτησης θα περιοριστεί µόνο στο πεδίο των εγγραφών του ε-
νεργού αντικειµένου το οποίο συµµετέχει στο κριτήριο αναζήτησης, η θα
επεκταθεί σε όλα τα πεδία Ας υποθέσουµε για παράδειγµα πως επιθυµούµε
να ανακτήσουµε όλες τις εγγραφές του πίνακα EMPLOYEE που ικανο-
ποιούν τη συνθήκη LNAME = «John». Εάν καταχωρήσουµε σε αυτή την πα-
ράµετρο την τιµή «Ναι», θα λάβει χώρα αναζήτηση της συµβολοσειράς
«John» µόνο στο πεδίο LNAME των εγγραφών του πίνακα EMPLOYEE.
Στην αντίθετη περίπτωση, αυτή η αναζήτηση θα επεκταθεί σε όλα τα πεδία
όλων των εγγραφών του πίνακα.

7. Εύρεση πρώτου (Find First): χρησιµοποιούµε την παράµετρο αυτή για να


καθορίσουµε εάν η διαδικασία αναζήτησης θα ξεκινήσει από την πρώτη
εγγραφή του ενεργού αντικειµένου ή από την τρέχουσα εγγραφή. Η προε-
πιλεγµένη τιµή αυτής της παραµέτρου είναι η τιµή «Ναι (Yes)» που εκκινεί τη
διαδικασία αναζήτησης από την πρώτη εγγραφή του ενεργού αντικειµένου.

• Εύρεση επόµενου (FindNext Action): χρησιµοποιούµε αυτή την ενέργεια για να


αναζητήσουµε την αµέσως επόµενη εγγραφή του ενεργού αντικειµένου που
πληροί τα κριτήρια αναζήτησης που έχουν καθορισθεί δια της χρήσης της ε-
νέργειας FindFirst. Η ενέργεια αυτή καλείται χωρίς ορίσµατα, και η επανειληµ-
µένη κλήση της µας επιτρέπει να µετακινηθούµε µέσα σε ένα σύνολο εγγραφών
οι οποίες περιγράφονται από συγκεκριµένες ιδιότητες (αναφέρονται για παρά-
δειγµα στον ίδιο EMPLOYEE).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 327

• Εφαρµογή φίλτρου (ApplyFilter Action): χρησιµοποιούµε αυτή την ενέργεια


για να εφαρµόσουµε ένα φίλτρο, ένα ερώτηµα ή µία πρόταση WHERE της
γλώσσας SQL, πάνω στα δεδοµένα ενός πίνακα, µιας φόρµας ή ενός ερωτή-
µατος. Η χρήση αυτής της ενέργειας, απαιτεί τον καθορισµό των επόµενων πα-
ραµέτρων:

1. Όνοµα φίλτρου (Filter Name): η παράµετρος αυτή δέχεται ως τιµή µια συµ-
βολοσειρά που περιέχει το όνοµα του φίλτρου ή του ερωτήµατος που θα
εφαρµόσουµε πάνω στα δεδοµένα του αντικειµένου της βάσης.

2. Συνθήκη Όπου (Where Condition): η παράµετρος αυτή περιέχει µία έγκυρη


πρόταση WHERE δια της οποίας καθορίζουµε τη συνθήκη που θα πρέπει
να ικανοποιούν τα δεδοµένα προς εµφάνιση. Αυτή η πρόταση ωστόσο δεν
θα πρέπει να περιέχει την ίδια τη λέξη WHERE αλλά µόνο την καθοριζόµενη
συνθήκη. Για παράδειγµα προκειµένου να εµφανίσουµε µόνο τις εγγραφές του
πίνακα DEPARTMENT που αναφέρονται στο Research Department θα
πρέπει να καταχωρήσουµε στην παράµετρο αυτή τη συµβολοσειρά «[DE-
PARTMENT]! [DName] = 'Research'».

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό πως πριν εφαρµόσουµε την ε-
νέργεια ApplyFilter πάνω στις εγγραφές ενός αντικειµένου, θα πρέπει πρώτα
να επιλέξουµε αυτό το αντικείµενο. Αυτή η διαδικασία µπορεί να γίνει χρησιµο-
ποιώντας την ενέργεια «Επιλογή Αντικειµένου (SelectObject Action)» που πα-
ρουσιάσαµε σε προηγούµενες ενότητες.

• Ηχητικό σήµα (Beep Action): χρησιµοποιούµε την ενέργεια αυτή για να ανα-
παράγουµε ένα ηχητικό σήµα δια της χρήσης του µεγαφώνου (speaker) του
υπολογιστή. Η ενέργεια αυτή χρησιµοποιείται για να υποδηλώσει την ολοκλή-
ρωση κάποιας διαδικασίας ή την πραγµατοποίηση κάποιου σφάλµατος, και καλεί-
ται χωρίς ορίσµατα.

• Κατάσταση στοιχείου menu (SetMenuItem Action): χρησιµοποιούµε την ενέρ-


γεια αυτή για να καθορίσουµε την κατάσταση των στοιχείων που περιλαµβά-
νονται σε ένα menu επιλογών, όπως είναι η ενεργοποίηση (enable) ή η απενερ-
γοποίηση (disable) αυτών των στοιχείων. Η χρήση αυτής της ενέργειας, απαιτεί
τον καθορισµό των επόµενων παραµέτρων:

1. Θέση menu (Menu Index): η παράµετρος αυτή επιτρέπει τον καθορισµό της
θέσης του menu που περιέχει την επιλογή την οποία θέλουµε να διαµορ-
φώσουµε. Ο καθορισµός αυτής της θέσης γίνεται δια της χρήσης ενός ακέ-
ραιου αριθµού (που ξεκινά από το µηδέν) ο οποίος εκφράζει την απόσταση
του menu από την αρχή του κεντρικού menu της γραµµής εργαλείων που
συσχετίζεται µε το ενεργό παράθυρο της εφαρµογής.
2. Θέση εντολής (Command Index): µετά τον καθορισµό του menu επιλογών
που περιέχει την επιλογή που θέλουµε να διαµορφώσουµε, θα πρέπει να κα-
θορίσουµε και τη θέση της επιλογής µέσα σε αυτό το menu. Για να το κά-
νουµε αυτό θα πρέπει να καταχωρήσουµε στην παράµετρο αυτή µια ακέραια

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 328

τιµή που εκφράζει την απόσταση της συγκεκριµένης επιλογής από την αρ-
χή του menu επιλογών στο οποίο ανήκει.

3. Θέση ∆ευτερεύουσας εντολής (SubCommand Index): στην περίπτωση κα-


τά την οποία η εντολή που θέλουµε να διαµορφώσουµε βρίσκεται µέσα σε
κάποιο submenu θα πρέπει να καθορίσουµε ακόµη ένα δείκτη που να καθορί-
ζει τη θέση της εντολής µέσα σε αυτό το submenu. Ο καθορισµός αυτού
του δείκτη γίνεται δια της καταχώρησης σε αυτή την παράµετρο µιας ακέραι-
ας τιµής που καθορίζει την απόσταση της εντολής από την αρχή του sub-
menu στο οποίο ανήκει.

4. Σηµαία (Flag): η παράµετρος αυτή επιτρέπει τον καθορισµό της κατάστασης


για την εντολή που έχει επιλεγεί. Υπάρχουν τέσσερις δυνατές καταστάσεις
που µπορούµε να χρησιµοποιήσουµε για τις εντολές των menu επιλογών της
Access, και οι τιµές που επιτρέπουν τον καθορισµό αυτών των καταστάσεων,
είναι οι ακόλουθες:

• Όχι γκρίζο (Ungray): στην περίπτωση που η εντολή του menu είναι απε-
νεργοποιηµένη (disabled) µπορούµε να χρησιµοποιήσουµε αυτή την τιµή
που προκειµένου να την ενεργοποιήσουµε.

• Γκρίζο (Gray): στην περίπτωση κατά την οποία η εντολή του menu είναι
ενεργοποιηµένη (enabled), µπορούµε να επιλέξουµε αυτή την τιµή προ-
κειµένου να την απενεργοποιήσουµε.

• Χωρίς σηµάδι (Uncheck): η τιµή αυτή χρησιµοποιείται για επιλογές οι


οποίες µπορούν να λάβουν µόνο δύο τιµές (Ναι και Όχι). Εάν τεθεί, απο-
δίδει στις επιλογές αυτού του είδους την τιµή «Όχι».

• Με σηµάδι (Check): σε πλήρη αναλογία µε την προηγούµενη τιµή, η τιµή


Check χρησιµοποιείται για επιλογές που µπορούν να λάβουν µόνο τις τι-
µές «Ναι» και «Όχι». Εάν τεθεί, αποδίδει στις επιλογές αυτού του είδους
την τιµή «Ναι».

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως η ενέργεια Set-


MenuItem δεν µπορεί να εφαρµοσθεί στα προεπιλεγµένα menus (default
menus) της Microsoft Access, αλλά µόνο στα προσαρµοσµένα menus (cus-
tom menus) τα οποία δηµιουργούνται για να καλύψουν τις ανάγκες του χρή-
στη όταν αυτό είναι αναγκαίο.

• Κλείσιµο (Close Action): χρησιµοποιούµε την ενέργεια αυτή για να κλείσουµε


κάποιο παράθυρο της Microsoft Access, ή το ενεργό παράθυρο (active win-
dow) εάν δεν καθορισθεί κάποιο άλλο. Η χρήση αυτής της ενέργειας, απαιτεί τον
καθορισµό των επόµενων παραµέτρων:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου του οποίου το παράθυρο επι-
θυµούµε να κλείσουµε. Στην τρέχουσα έκδοση της Microsoft Access, οι τύ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 329

ποι αντικειµένων που µπορούµε να χρησιµοποιήσουµε, είναι πίνακας (table),


ερώτηµα (query), φόρµα (form), έκθεση (report), µακροεντολή (macro),
λειτουργική µονάδα (module), σελίδα πρόσβασης δεδοµένων (data access
page), προβολή διακοµιστή (server view), διάγραµµα (diagram) και απο-
θηκευµένη διαδικασία (stored procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου του οποίου το παράθυ-
ρο επιθυµούµε να κλείσουµε. Έχοντας καθορίσει τον τύπο αυτού του αντι-
κειµένου δια της χρήσης της προηγούµενης παραµέτρου, ο καθορισµός του
ονόµατος του αντικειµένου προς επιλογή, γίνεται από κατάλληλα διαµορφω-
µένο πλαίσιο λίστας (list box) που περιέχει τα ονόµατα των αντικειµένων του
συγκεκριµένου τύπου. Ας σηµειωθεί πως εάν δεν καθορίσουµε κάποιο τύπο
και κάποιο όνοµα αντικειµένου, η ενέργεια αυτή θα κλείσει το παράθυρο
που συσχετίζεται µε το ενεργό αντικείµενο της βάσης.

3. Αποθήκευση (Save): η παράµετρος µας επιτρέπει να καθορίσουµε εάν τα


περιεχόµενα του αντικειµένου του οποίου το παράθυρο θέλουµε να κλεί-
σουµε, θα αποθηκευθούν ή όχι στη βάση δεδοµένων της εφαρµογής. Η
παράµετρος αυτή µπορεί να λάβει µία από τις τρεις επόµενες τιµές:

• Ναι (Yes): η χρήση αυτής της τιµής επιβάλει την αποθήκευση των δεδο-
µένων του αντικειµένου της βάσης κατά τον τερµατισµό της λειτουργίας
του παραθύρου που συσχετίζεται µε αυτό.

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

• Ερώτηση (Prompt): η χρήση αυτής της τιµής προκαλεί την εµφάνιση


ενός πλαισίου διαλόγου που ρωτά το χρήστη εάν επιθυµεί την αποθή-
κευση ή όχι των δεδοµένων του επιλεγµένου αντικειµένου κατά τον
τερµατισµό της λειτουργίας του παραθύρου που συσχετίζεται µε αυτό.
Η τιµή αυτή αποτελεί και την προεπιλεγµένη τιµή (default value) για αυ-
τή την παράµετρο.

• Κλεψύδρα (Hourglass Action): χρησιµοποιούµε αυτή την ενέργεια για να αντι-


καταστήσουµε το δείκτη του ποντικιού µε µία κλεψύδρα για το χρονικό διά-
στηµα εκτέλεσης της τρέχουσας µακροεντολής, κάτι που είναι ιδιαίτερα χρήσι-
µο σε περιπτώσεις µακροεντολών η εκτέλεση των οποίων είναι αρκετά χρο-
νοβόρα. Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό µιας και µοναδικής
παραµέτρου που φέρει το όνοµα «Ενεργοποίηση Κλεψύδρας (Hourglass On)»
και δέχεται µια από τις τιµές «Ναι (Yes)» και «Όχι (No)» οι οποίες καθορίζουν
εάν θα χρησιµοποιηθεί ή όχι το σύµβολο της κλεψύδρας κατά τη διάρκεια της ε-
κτέλεσης της τρέχουσας µακροεντολής.
• Μεγιστοποίηση (Maximize Action): η ενέργεια αυτή καλείται χωρίς ορίσµατα
και επιτρέπει τη µεγιστοποίηση του ενεργού παραθύρου έτσι ώστε να καλύψει
όλη την επιφάνεια εργασίας της Microsoft Access. Εάν το παράθυρο που θέ-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 330

λουµε να χρησιµοποιήσουµε δεν είναι το ενεργό παράθυρο, µπορούµε να καθορί-


σουµε το αντικείµενο του οποίου το παράθυρο θέλουµε να µεγιστοποιήσουµε
χρησιµοποιώντας την ενέργεια «Επιλογή Αντικειµένου (SelectObject Action)»
που έχει µελετηθεί στις προηγούµενες ενότητες.

• Μετάβαση σε εγγραφή (GoToRecord Action): χρησιµοποιούµε την ενέργεια


αυτή για να ορίσουµε κάποια εγγραφή ενός ανοικτού αντικειµένου (πίνακα,
φόρµας ή ερωτήµατος), ως την τρέχουσα εγγραφή. Προκειµένου να χρησιµο-
ποιήσουµε αυτή την ενέργεια, θα πρέπει να καθορίσουµε τις επόµενες παραµέ-
τρους:

1. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου του οποίου την εγγραφή επι-
θυµούµε να προσπελάσουµε. Οι τύποι αντικειµένων που µπορούµε να χρησι-
µοποιήσουµε στην τρέχουσα έκδοση της Microsoft Access, είναι πίνακας
(table), ερώτηµα (query), φόρµα (form), προβολή διακοµιστή (server
view), και αποθηκευµένη διαδικασία (stored procedure).

2. Όνοµα Αντικειµένου (Object Name): η παράµετρος αυτή χρησιµοποιείται


για τον καθορισµό του ονόµατος του αντικειµένου του οποίου την εγγρα-
φή επιθυµούµε να προσπελάσουµε. Έχοντας καθορίσει τον τύπο αυτού του
αντικειµένου δια της χρήσης της προηγούµενης παραµέτρου, ο καθορισµός
του ονόµατος του αντικειµένου προς επιλογή, γίνεται από κατάλληλα διαµορ-
φωµένο πλαίσιο λίστας (list box) που περιέχει τα ονόµατα των αντικειµένων
του συγκεκριµένου τύπου. Ας σηµειωθεί πως εάν δεν καθορίσουµε κάποιο
τύπο και κάποιο όνοµα αντικειµένου, η ενέργεια αυτή θα κλείσει το παρά-
θυρο που συσχετίζεται µε το ενεργό αντικείµενο της βάσης.

3. Εγγραφή (Record): η παράµετρος αυτή επιτρέπει τον καθορισµό της εγ-


γραφής του επιλεγµένου αντικειµένου, στην οποία επιθυµούµε να µετα-
βούµε, και µπορεί να λάβει µία από τις επόµενες τιµές:

• Προηγούµενη (Previous): η παράµετρος αυτή επιτρέπει τη µετάβαση του


χρήστη στην προηγούµενη εγγραφή του αντικειµένου στη σχέση µε την
τρέχουσα εγγραφή.

• Επόµενη (Next): η παράµετρος αυτή επιτρέπει τη µετάβαση του χρήστη


στην επόµενη εγγραφή του αντικειµένου σε σχέση µε την τρέχουσα
εγγραφή.
• Πρώτη (First): η παράµετρος αυτή επιτρέπει τη µετάβαση του χρήστη
στην πρώτη εγγραφή του επιλεγµένου αντικειµένου
• Τελευταία (Last): η παράµετρος αυτή επιτρέπει τη µετάβαση του χρήστη
στην τελευταία εγγραφή του επιλεγµένου αντικειµένου.

• Μετάβαση στην (Go To): η παράµετρος αυτή επιτρέπει τη µετάβαση του


χρήστη σε κάποια συγκεκριµένη εγγραφή του επιλεγµένου αντικειµένου.
Ο καθορισµός αυτής της εγγραφής απαιτεί και τη χρήση της επόµενης πα-
ραµέτρου.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 331

• Νέα (New): χρησιµοποιώντας την παράµετρο αυτή λαµβάνει χώρα δη-


µιουργία νέας εγγραφής αµέσως µετά την τελευταία εγγραφή του ε-
νεργού αντικειµένου, και µετάβαση του χρήστη σε αυτή τη νέα εγ-
γραφή.

4. Απόσταση (Offset): η παράµετρος αυτή δέχεται ως όρισµα µία ακέραια τιµή


η οποία χρησιµοποιείται για τη µετάβαση του χρήστη σε κάποια από τις
εγγραφές του επιλεγµένου αντικειµένου, και πιο συγκεκριµένα:

Εάν ο χρήστης έχει επιλέξει να µεταβεί στην προηγούµενη ή στην επόµενη


εγγραφή, η µετάβαση γίνεται προς τα πάνω ή προς τα κάτω αντίστοιχα
κατά τόσες εγγραφές όσες υπαγορεύονται από την τιµή που έχει καταχω-
ρηθεί σε αυτή την παράµετρο. Εάν για παράδειγµα ο χρήστης καταχωρήσει
στην παράµετρο αυτή την τιµή 3, η τρέχουσα εγγραφή είναι η 37η και ο χρή-
στης έχει επιλέξει να µεταβεί στην επόµενη εγγραφή, η επανειληµµένη χρή-
ση αυτής της ενέργειας θα µεταφέρει το χρήστη στις εγγραφές υπ’ αριθµόν
40, 43, 46, κ.ο.κ.

Εάν ο χρήστης έχει καταχωρήσει στην προηγούµενη παράµετρο την τιµή Go


To, η τιµή αυτής της παραµέτρου υπαγορεύει τη θέση της επόµενης εγγρα-
φής. Εάν για παράδειγµα ο χρήστης καταχωρήσει στην παράµετρο αυτή την
τιµή 15, θα λάβει χώρα µετάβασή του στη 15η εγγραφή του επιλεγµένου
αντικειµένου, ανεξάρτητα από τη θέση της τρέχουσας εγγραφής.

• Μετάβαση σε σελίδα (GoToPage Action): στην περίπτωση κατά την οποία ερ-
γαζόµαστε µε κάποια φόρµα η οποία χαρακτηρίζεται από την παρουσία περισσό-
τερων από µία σελίδων, µπορούµε να χρησιµοποιήσουµε την ενέργεια αυτή για
να µεταφέρουµε την εστίαση του συστήµατος στο πρώτο στοιχείο ελέγχου
που ανήκει σε κάποια συγκεκριµένη σελίδα. Ας υποθέσουµε για παράδειγµα
πως η φόρµα καταχώρησης στοιχείων για τους πελάτες µιας εταιρείας έχει
περισσότερες από µία σελίδες, κάθε µία εκ των οποίων περιέχει και κάποιο
είδος πληροφορίας, όπως είναι για παράδειγµα τα προσωπικά και οικονοµικά
στοιχεία του πελάτη, τα στοιχεία αγορών και πωλήσεων κ.ο.κ. Στην περίπτω-
ση αυτή µπορούµε να χρησιµοποιήσουµε αυτή την ενέργεια για να µεταφερθού-
µε σε κάποια συγκεκριµένη σελίδα. Η χρήση αυτής της ενέργειας, απαιτεί τον
καθορισµό των ακόλουθων πληροφοριών:

1. Αριθµός σελίδας (Page Number): η παράµετρος αυτή δέχεται ως τιµή τον


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

2. ∆εξιά (Right) και Κάτω (Down): σε περίπτωση κατά την οποία δεν θέλουµε
να εµφανίσουµε ολόκληρη τη σελίδα αλλά µόνο ένα µέρος αυτής, θα πρέπει
να καθορίσουµε τις συντεταγµένες της πάνω αριστερής γωνίας του τµήµα-
τος της φόρµας που θέλουµε να εµφανίσουµε. Για να το κάνουµε αυτό θα
καταχωρήσουµε στην παράµετρο «∆εξιά» τη συντεταγµένη της οριζό-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 332

ντιας θέσης της πάνω αριστερής γωνίας µετρηµένη από την αριστερή ά-
κρη του παραθύρου που την περιέχει, και στην παράµετρο «Κάτω» τη συ-
ντεταγµένη της κατακόρυφης θέσης της άνω αριστερής γωνίας µετρηµέ-
νη από την επάνω άκρη του παραθύρου που την περιέχει. Οι µονάδες µέ-
τρησης αυτών των συντεταγµένων, θα είναι ίντσες ή εκατοστά, ανάλογα µε
τις ρυθµίσεις που έχουµε ορίσει για το σύστηµά µας από το εικονίδιο Re-
gional Settings του πίνακα ελέγχου.

• Μετάβαση σε στοιχείο ελέγχου (GoToControl Action): χρησιµοποιούµε την


ενέργεια αυτή για να µεταφέρουµε την εστίαση του συστήµατος σε κάποιο
πεδίο ή στοιχείο ελέγχου της τρέχουσας εγγραφής, σε ένα ανοικτό αντικείµενο
της βάσης δεδοµένων (π.χ. πίνακα, φόρµα ή ερώτηµα). Αυτή η ενέργεια είναι
ιδιαίτερα χρήσιµη σε περιπτώσεις κατά τις οποίες θέλουµε να µετακινηθούµε στα
διάφορα πεδία της φόρµας ανάλογα µε τις συνθήκες που υφίστανται σε κάθε πε-
ρίπτωση. Ας υποθέσουµε για παράδειγµα πως καταχωρούµε τα προσωπικά δε-
δοµένα των υπαλλήλων µιας εταιρείας και πως για κάθε άνδρα υπάλληλο κατα-
γράφουµε στοιχεία που αφορούν τη στρατολογική του κατάσταση. Εάν ο υπάλ-
ληλος που καταχωρούµε είναι γυναίκα, µπορούµε χρησιµοποιώντας αυτή την ε-
νέργεια, να µεταφέρουµε την εστίαση του συστήµατος σε ένα άλλο στοιχείο της
φόρµας και να συνεχίσουµε την καταχώρηση των στοιχείων από εκεί και πέρα,
παρακάµπτοντας τα πεδία τα οποία συσχετίζονται µε την καταχώρηση των
στρατολογικών δεδοµένων, και τα οποία στην περίπτωση των γυναικών υ-
παλλήλων δεν χρησιµοποιούνται καθόλου.

Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό της τιµής µιας και µοναδικής
παραµέτρου, που είναι το όνοµα του στοιχείου στο οποίο θέλουµε να µεταβού-
µε. Εάν για παράδειγµα θέλουµε να µεταφερθούµε στο πεδίο LNAME της φόρ-
µας EMPLOYEE που εµφανίζει τα προσωπικά στοιχεία των υπαλλήλων της ε-
ταιρείας, θα πρέπει να καταχωρήσουµε στην παράµετρο «Όνοµα στοιχείου ελέγ-
χου (Control Name)» την τιµή «LNAME».

• Μετακίνηση – Προσαρµογή Μεγέθους (MoveSize Action): χρησιµοποιούµε


την ενέργεια αυτή για να µετακινήσουµε ή να αλλάξουµε το µέγεθος του ενερ-
γού παραθύρου της βάσης δεδοµένων. Η χρήση αυτής της ενέργειας απαιτεί τον
καθορισµό των επόµενων παραµέτρων:

1. ∆εξιά (Right): η παράµετρος αυτή επιτρέπει τον καθορισµό της τιµής της
οριζόντιας συντεταγµένης της άνω αριστερής γωνίας της νέας θέσης του
παραθύρου. Η τιµή αυτή εκφράζει την απόσταση της νέας θέσης της άνω α-
ριστερής γωνίας, από την αριστερή πλευρά του παραθύρου µέσα στο οποίο
περιέχεται το ενεργό παράθυρο της βάσης.

2. Κάτω (Down): η παράµετρος αυτή επιτρέπει τον καθορισµό της τιµής της
κατακόρυφης συντεταγµένης της άνω αριστερής γωνίας της νέας θέσης
του παραθύρου. Η τιµή που καταχωρούµε στην παράµετρο αυτή, εκφράζει
την απόσταση της νέας θέσης της αριστερής γωνίας από την πάνω πλευρά του
παραθύρου µέσα στο οποίο περιέχεται το ενεργό παράθυρο της βάσης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 333

3. Πλάτος (Width): η παράµετρος αυτή δέχεται ως όρισµα το νέο πλάτος του


παραθύρου

4. Ύψος (Height): η τιµή αυτή δέχεται ως όρισµα το νέο ύψος του παραθύρου.

Σε πλήρη αναλογία µε παρόµοια ιδιότητα που παρουσιάστηκε σε προηγούµενη


παράγραφο, οι µονάδες µέτρησης των αριθµητικών τιµών που διαβιβάζονται
ως τιµές στις παραπάνω ιδιότητες, είναι ίντσες ή εκατοστά ανάλογα µε τις
ρυθµίσεις του συστήµατός µας έτσι όπως αυτές έχουν καθορισθεί από το ει-
κονίδιο Regional Settings του Πίνακα Ελέγχου.

• Μεταφορά βάσης δεδοµένων (TransferDatabase Action): χρησιµοποιούµε την


ενέργεια αυτή για να κάνουµε εισαγωγή (import) και εξαγωγή (export) δεδο-
µένων ανάµεσα στην τρέχουσα βάση δεδοµένων και σε µία άλλη βάση δεδο-
µένων, η οποία µπορεί να έχει δηµιουργηθεί είτε µε τη Microsoft Access είτε δια
της χρήσης άλλων συστηµάτων διαχείρισης βάσεων δεδοµένων όπως είναι η
Paradox ή η dBase IV. Στην ειδική περίπτωση κατά την οποία και οι δύο βάσεις
έχουν δηµιουργηθεί µε τη Microsoft Access, έχουµε τη δυνατότητα να χρησιµο-
ποιήσουµε τα περιεχόµενα των πινάκων της άλλης βάσης δεδοµένων χωρίς να
χρειαστεί να τους αντιγράψουµε στην τρέχουσα βάση (table linking).

Η χρήση της ενέργειας TransferDatabase απαιτεί τον καθορισµό των επόµενων


παραµέτρων:

1. Τύπος Μεταφοράς (Transfer Type): η παράµετρος αυτή επιτρέπει τον κα-


θορισµό του τύπου µεταφοράς των δεδοµένων ανάµεσα στις δύο βάσεις,
και µπορεί να λάβει µία από τις επόµενες τρεις τιµές:

• Εισαγωγή (Import): η χρήση αυτής της τιµής στην παράµετρο Transfer


Type έχει ως αποτέλεσµα την εισαγωγή δεδοµένων από πίνακα κάποιας
άλλης βάσης δεδοµένων στην τρέχουσα βάση. Αυτή η τιµή αποτελεί και
την προεπιλεγµένη τιµή της ιδιότητας.

• Εξαγωγή (Export): χρησιµοποιούµε αυτή την τιµή στην παράµετρο


Transfer Type στην περίπτωση κατά την οποία θέλουµε να πραγµατο-
ποιήσουµε εξαγωγή των δεδοµένων κάποιου από τους πίνακες της βά-
σης, σε κάποια άλλη βάση δεδοµένων.

• Σύνδεση (Link): στην περίπτωση κατά την οποία και οι δύο βάσεις δεδο-
µένων έχουν δηµιουργηθεί µε τη Microsoft Access, µπορούµε αντί για την
εισαγωγή των δεδοµένων κάποιου από τους πίνακες της δεύτερης βάσης,
να δηµιουργήσουµε ένα σύνδεσµο προς αυτόν τον πίνακα, έτσι ώστε να
προσπελάσουµε τα δεδοµένα του, χωρίς να χρειαστεί να τον αντιγράψουµε
στην τρέχουσα βάση.

2. Τύπος βάσης δεδοµένων (Database Type): χρησιµοποιούµε αυτή την παρά-


µετρο για να καθορίσουµε τον τύπο της βάσης δεδοµένων τα δεδοµένα της
οποίας θέλουµε να προσπελάσουµε. Η τρέχουσα έκδοση της Microsoft Ac-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 334

cess, επιτρέπει την προσπέλαση πολλών διαφορετικών τύπων βάσεων δε-


δοµένων που έχουν δηµιουργηθεί από εφαρµογές όπως είναι η Paradox και η
dBase IV. Η προεπιλεγµένη τιµή για αυτή την ιδιότητα αναφέρεται σε τύπο
βάσης δεδοµένων που έχει δηµιουργηθεί από τη Microsoft Access.

3. Όνοµα βάσης δεδοµένων (Database Name): η παράµετρος αυτή δέχεται ως


όρισµα το όνοµα του αρχείου της βάσης δεδοµένων του οποίου τα δεδοµέ-
να επιθυµούµε να προσπελάσουµε. Σε περίπτωση κατά την οποία η βάση δε-
δοµένων που θέλουµε να χρησιµοποιήσουµε αποθηκεύει τους πίνακες της
βάσης σε διαφορετικό αρχεία, µπορούµε να καταχωρήσουµε ως τιµή σε αυ-
τή την παράµετρο, το όνοµα του καταλόγου (directory) που περιέχει όλα
αυτά τα αρχεία.

4. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου της βάσης δεδοµένων που επι-
θυµούµε να προσπελάσουµε. Στην τρέχουσα έκδοση της Microsoft Access,
οι τύποι αντικειµένων που µπορούµε να χρησιµοποιήσουµε, είναι πίνακας
(table), ερώτηµα (query), φόρµα (form), έκθεση (report), µακροεντολή
(macro), λειτουργική µονάδα (module), σελίδα πρόσβασης δεδοµένων
(data access page), προβολή διακοµιστή (server view), διάγραµµα (dia-
gram) και αποθηκευµένη διαδικασία (stored procedure).

5. Προέλευση (Source): η παράµετρος αυτή δέχεται ως τιµή το όνοµα του πί-


νακα, του ερωτήµατος ή γενικότερα του αντικειµένου της Microsoft Ac-
cess, τα δεδοµένα του οποίου επιθυµούµε να χρησιµοποιήσουµε. Στην πε-
ρίπτωση κατά την οποία η βάση έχει δηµιουργηθεί από ένα άλλο πρόγραµµα
διαχείρισης βάσεων δεδοµένων, που αποθηκεύει τον κάθε πίνακα της βάσης
σε ξεχωριστό αρχείο, θα πρέπει να καταχωρήσουµε σε αυτή την παράµετρο το
όνοµα αυτού του αρχείου.

6. Προορισµός (Destination): η παράµετρος αυτή δέχεται ως όρισµα το όνοµα


του αντικειµένου που θα δηµιουργηθεί στη βάση προορισµού, ως αποτέ-
λεσµα της ανταλλαγής πληροφορίας (εισαγωγή, εξαγωγή ή σύνδεση) ανά-
µεσα στις δύο βάσεις. Σε πλήρη αναλογία µε την προηγούµενη περίπτωση,
εάν τα δεδοµένα των αντικειµένων της βάσης είναι αποθηκευµένα σε διαφο-
ρετικά αρχεία, µπορούµε να καταχωρήσουµε σε αυτή την παράµετρο, το όνο-
µα του κατάλληλου σε κάθε περίπτωση αρχείου.

7. Μόνο η δοµή (Structure Only): σε ορισµένες περιπτώσεις η πληροφορία που


θέλουµε να ανταλλάξουµε ανάµεσα σε δύο βάσεις δεδοµένων, αφορά µόνο
τη δοµή των πινάκων της βάσης, και όχι τα δεδοµένα που βρίσκονται α-
ποθηκευµένα στους πίνακες αυτούς. Στην περίπτωση αυτή, θα πρέπει να
χρησιµοποιήσουµε αυτή την παράµετρο, καταχωρώντας σε αυτή, την τιµή
«Ναι (Yes)». Ωστόσο η προεπιλεγµένη τιµή αυτής της παραµέτρου είναι η τι-
µή «Όχι (No)» η οποία έχει ως αποτέλεσµα την ανταλλαγή όχι µόνο της δο-
µής των πινάκων, αλλά και των δεδοµένων που περιλαµβάνονται σε αυ-
τούς.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 335

• Μεταφορά κειµένου (TransferText Action) : χρησιµοποιούµε την ενέργεια αυ-


τή για να κάνουµε ανταλλαγή κειµένου (εισαγωγή, εξαγωγή ή σύνδεση) ανά-
µεσα σε ένα αρχείο κειµένου και σε µία βάση δεδοµένων της Microsoft
Access. Η χρήση αυτής της ενέργειας, απαιτεί τον καθορισµό των επόµενων πα-
ραµέτρων:

1. Τύπος Μεταφοράς (Transfer Type ): η παράµετρος αυτή επιτρέπει τον κα-


θορισµό του τύπου µεταφοράς του κειµένου ανάµεσα στο αρχείο κειµένου
και στη βάση δεδοµένων. Η χρήση αυτής της παραµέτρου είναι ιδιαίτερα
σηµαντική, καθώς επιτρέπει τη µεταφορά διαµορφωµένου κειµένου που πε-
ριέχει διαχωριστικούς χαρακτήρες δια της χρήσης των οποίων είναι δυ-
νατή η οργάνωση της πληροφορίας σε γραµµές και στήλες. Η τρέχουσα
έκδοση της Microsoft Access επιτρέπει ένα αρκετά µεγάλο αριθµό τύπων µε-
ταφοράς δεδοµένων, και ο καθορισµός του επιθυµητού σε κάθε περίπτωση
τύπου µεταφοράς, γίνεται δια της χρήσης κατάλληλα διαµορφωµένου πλαισί-
ου λίστας (list box).

2. Όνοµα προδιαγραφής (Specification Name): η παράµετρος αυτή δέχεται ως


τιµή ένα όνοµα προδιαγραφής που ταυτοποιεί µε µοναδικό τρόπο το σύνολο
των πληροφοριών διαµόρφωσης που χαρακτηρίζουν τη διαδικασία ανταλ-
λαγής δεδοµένων ανάµεσα στο αρχείο κειµένου και στην τρέχουσα βάση.

3. Όνοµα πίνακα (Table Name): χρησιµοποιούµε την παράµετρο αυτή για να


καθορίσουµε το όνοµα του πίνακα της βάσης δεδοµένων που συµµετέχει
στη διαδικασία µεταφοράς κειµένου. Αυτός ο πίνακας µπορεί να είναι η
πηγή των δεδοµένων που µεταφέρονται από τη βάση προς το αρχείο κει-
µένου (export procedure), η το αντικείµενο της βάσης στο οποίο θα αποθη-
κευθούνε τα δεδοµένα που µεταφέρονται από το αρχείο κειµένου προς τη
βάση (import procedure).

4. Όνοµα αρχείου (File Name): η παράµετρος αυτή επιτρέπει τον καθορισµό


του αρχείου κειµένου που θα χρησιµοποιηθεί στη διαδικασία µεταφοράς
κειµένου από ή προς τη βάση δεδοµένων. Η τιµή που θα καταχωρηθεί στην
εν λόγω παράµετρο δεν θα περιλαµβάνει µόνο το όνοµα του αρχείου, αλλά το
πλήρες όνοµα της διαδροµής στο δέντρο καταλόγων του συστήµατος που
αντιστοιχεί στο συγκεκριµένο αρχείο.

5. Περιέχει ονόµατα πεδίων (Has Field Names): στην περίπτωση κατά την ο-
ποία τα δεδοµένα του αρχείου που θέλουµε να µεταφέρουµε είναι οργανωµέ-
να σε γραµµές και στήλες, είναι πιθανό η πρώτη γραµµή του αρχείου να
µην περιέχει δεδοµένα, αλλά τα ονόµατα των πεδίων των οποίων οι τιµές
περιλαµβάνονται στις στήλες του αρχείου. Στην περίπτωση που συµβαίνει
κάτι τέτοιο, µπορούµε να αποδώσουµε στην παράµετρο αυτή την τιµή «Ναι
(Yes)». Η χρήση αυτής της τιµής στην εν λόγω παράµετρο, επιτρέπει στη Mi-
crosoft Access να χρησιµοποιήσει τα ονόµατα αυτών των πεδίων για τα αντί-
στοιχα πεδία του πίνακα της βάσης δεδοµένων στον οποίο θα αποθηκευθούνε
τα δεδοµένα που µεταφέρονται. Στην αντίθετη περίπτωση η τιµή που θα κα-
ταχωρήσουµε σε αυτή την παράµετρο, θα είναι η τιµή «Όχι (No)».

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 336

6. Πίνακας HTML (HTML Table Name): στην περίπτωση κατά την οποία
λαµβάνει χώρα µεταφορά δεδοµένων ανάµεσα στην τρέχουσα βάση δεδοµέ-
νων και σε µία σελίδα HTML, µπορούµε να χρησιµοποιήσουµε αυτή την πα-
ράµετρο, για να καθορίσουµε το όνοµα του πίνακα ή της λίστας αυτής της
σελίδας, τα δεδοµένα του οποίου επιθυµούµε να προσπελάσουµε. Στην πε-
ρίπτωση κατά την οποία δεν καταχωρηθεί καµία τιµή σε αυτή την παράµετρο,
θα λάβει χώρα µεταφορά των δεδοµένων του πρώτου πίνακα ή λίστας που
ανήκει σε αυτή τη σελίδα.

7. Κωδικοσελίδα (Code Page): η παράµετρος αυτή επιτρέπει τον καθορισµό


της κωδικοσελίδας που χρησιµοποιείται για τη διαµόρφωση των περιεχο-
µένων του αρχείου κειµένου που θέλουµε να χρησιµοποιήσουµε.

• Μεταφορά υπολογιστικού φύλλου (TransferSpreadSheet Action): χρησιµο-


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

1. Τύπος µεταφοράς (Transfer Type): η παράµετρος αυτή επιτρέπει τον καθο-


ρισµό του τύπου µεταφοράς (εισαγωγή, εξαγωγή ή σύνδεση) που θα λάβει
χώρα ανάµεσα στο υπολογιστικό φύλλο δεδοµένων και στην τρέχουσα
βάση.

2. Τύπος υπολογιστικού φύλλου (Spreadsheet Type): η παράµετρος αυτή


χρησιµοποιείται για να καθορίσουµε τον τύπου του υπολογιστικού φύλου
που θα χρησιµοποιήσουµε στη διαδικασία µεταφοράς δεδοµένων. Η τρέ-
χουσα έκδοση της Microsoft Access επιτρέπει τη χρήση πολλών τύπων υπο-
λογιστικών φύλλων που έχουν δηµιουργηθεί τόσο µε το Microsoft Excel όσο
και µε το Lotus 1-2-3.

3. Όνοµα πίνακα (Table Name): η παράµετρος αυτή επιτρέπει τον καθορισµό


του ονόµατος του πίνακα της βάσης δεδοµένων που θα χρησιµοποιηθεί
στη διαδικασία µεταφοράς δεδοµένων. Αυτός ο πίνακας µπορεί να είναι η
προέλευση των δεδοµένων που θα µεταφερθούν από τη βάση προς το υπο-
λογιστικό φύλλο, ή το αντικείµενο της βάσης στο οποίο θα αποθηκευθούν
τα δεδοµένα που µεταφέρονται από το υπολογιστικό φύλλο προς τη βάση.

4. Όνοµα αρχείου (File Name): η παράµετρος αυτή επιτρέπει τον καθορισµό


του ονόµατος του υπολογιστικού φύλλου, που θα χρησιµοποιηθεί στη δια-
δικασία µεταφοράς δεδοµένων από ή προς τη βάση. Η τιµή που θα κατα-
χωρηθεί στην εν λόγω παράµετρο δεν θα περιλαµβάνει µόνο το όνοµα του αρ-
χείου, αλλά το πλήρες όνοµα της διαδροµής στο δέντρο καταλόγων του συ-
στήµατος που αντιστοιχεί στο συγκεκριµένο αρχείο.

5. Περιέχει ονόµατα πεδίων (Has Field Names): σε πλήρη αναλογία µε την


αντίστοιχη παράµετρο της ενέργειας TransferText, η παράµετρος αυτή µας

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 337

επιτρέπει να καθορίσουµε εάν η πρώτη γραµµή του µεταφερόµενου φύλλου


δεδοµένων περιέχει ή όχι ονόµατα πεδίων. Στην περίπτωση κατά την οποία
συµβαίνει κάτι τέτοιο, µπορούµε να χρησιµοποιήσουµε αυτά τα ονόµατα ως
τα ονόµατα των πεδίων του πίνακα που θα χρησιµοποιηθεί προκειµένου
να αποθηκεύσει τα µεταφερόµενα δεδοµένα.

6. Περιοχή (Range): χρησιµοποιούµε αυτή την παράµετρο για να καθορίσουµε


την περιοχή κελιών του φύλλου δεδοµένων της οποίας το περιεχόµενο θέ-
λουµε να µεταφέρουµε. Εάν αυτή η παράµετρος δεν χρησιµοποιηθεί, θα λά-
βει χώρα µεταφορά όλου του φύλλου δεδοµένων.

• Μετονοµασία (Rename Action): χρησιµοποιούµε την ενέργεια αυτή για να αλ-


λάξουµε το όνοµα κάποιου από τα αντικείµενα της βάσης δεδοµένων. Η χρήση
αυτής της ενέργειας, απαιτεί τον καθορισµό των επόµενων παραµέτρων:

1. Νέο όνοµα (New Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβολο-
σειρά που περιέχει το νέο όνοµα του αντικειµένου που θέλουµε να µετονο-
µάσουµε.

2. Τύπος Αντικειµένου (Object Type): η παράµετρος αυτή χρησιµοποιείται για


τον καθορισµό του τύπου του αντικειµένου του οποίου το όνοµα επιθυ-
µούµε να µεταβάλλουµε. Στην τρέχουσα έκδοση της Microsoft Access, οι
τύποι αντικειµένων που µπορούµε να χρησιµοποιήσουµε, είναι πίνακας
(table), ερώτηµα (query), φόρµα (form), έκθεση (report), µακροεντολή
(macro), λειτουργική µονάδα (module), σελίδα πρόσβασης δεδοµένων
(data access page), προβολή διακοµιστή (server view), διάγραµµα (dia-
gram) και αποθηκευµένη διαδικασία (stored procedure).

3. Παλαιό όνοµα (Old Name): η παράµετρος αυτή χρησιµοποιείται για τον κα-
θορισµό του ονόµατος του αντικειµένου που επιθυµούµε να µετονοµάσου-
µε. Εάν δεν καθορίσουµε κάποιο τύπο και κάποιο όνοµα αντικειµένου, η ε-
νέργεια αυτή θα µετονοµάσει το ενεργό αντικείµενο που βρίσκεται επιλεγ-
µένο στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων.

• Όλες οι εγγραφές (ShowAllRecords Action): στην περίπτωση κατά την οποία


λαµβάνει χώρα προεπισκόπηση µόνο ενός µέρους των εγγραφών κάποιου αντι-
κειµένου (επειδή ενδεχοµένως έχει εφαρµοσθεί κάποιο φίλτρο), µπορούµε να
χρησιµοποιήσουµε αυτή την ενέργεια προκειµένου να εµφανίσουµε όλες τις εγ-
γραφές που συσχετίζονται µε αυτό. Η ενέργεια αυτή εφαρµόζεται στο ενεργό
αντικείµενο της βάσης δεδοµένων (πίνακας, φόρµα ή ερώτηµα) και για το λό-
γο αυτό καλείται χωρίς ορίσµατα.

• Ορισµός Τιµής (SetValue Action): χρησιµοποιούµε αυτή την ενέργεια για να


καθορίσουµε τις τιµές των ιδιοτήτων που συσχετίζονται µε τα στοιχεία ελέγ-
χου που περιλαµβάνονται σε µία φόρµα ή σε µία αναφορά. Η χρήση αυτής της
ενέργειας, απαιτεί τον καθορισµό των επόµενων παραµέτρων:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 13 : Μακροεντολές 338

1. Στοιχείο (Item): η παράµετρος αυτή επιτρέπει τον καθορισµό του στοιχείου


του αντικειµένου της βάσης επί του οποίου επιθυµούµε να εφαρµόσουµε
αυτή την ενέργεια. Προκειµένου να καθορίσουµε αυτό το στοιχείο µπορούµε
να χρησιµοποιήσουµε το παράθυρο της δόµησης εκφράσεων που εµφανίζε-
ται χρησιµοποιώντας το µικρό κουµπί που βρίσκεται στο δεξί µέρος του πεδί-
ου καταχώρησης αυτής της παραµέτρου. Εάν για παράδειγµα επιθυµούµε να
ορίσουµε κάποια ιδιότητα για το πεδίο LNAME της φόρµας EMPLOYEE, η
συµβολοσειρά που θα προκύψει χρησιµοποιώντας το παράθυρο της δόµησης
εκφράσεων, θα είναι η Forms![EMPLOYEE]![LName].

2. Έκφραση (Expression): η παράµετρος αυτή χρησιµοποιείται για την κατα-


χώρηση της έκφρασης δια της οποίας θα λάβει χώρα η απόδοση τιµής σε
κάποια από τις παραµέτρους του καθορισµένου αντικειµένου. Η δηµιουρ-
γία αυτής της έκφρασης γίνεται δια της χρήσης του παραθύρου δόµησης εκ-
φράσεων που χρησιµοποιείται και για τον καθορισµό του στοιχείο ελέγχου.

• Πλαίσιο Μηνύµατος (MsgBox Action): χρησιµοποιούµε αυτή την ενέργεια σε


περιπτώσεις κατά τις οποίες επιθυµούµε να εµφανίσουµε στην οθόνη του χρήστη,
ένα προειδοποιητικό ή ενηµερωτικό µήνυµα. Η χρήση αυτής της ενέργειας α-
παιτεί τον καθορισµό των επόµενων παραµέτρων:

1. Μήνυµα (Message): η παράµετρος αυτή δέχεται ως τιµή µια συµβολοσειρά


µε µέγιστο µήκος 255 χαρακτήρες, η οποία περιέχει το κείµενο του µηνύµα-
τος που επιθυµούµε να εµφανίσουµε.

2. Ηχητικό σήµα (Beep): στην περίπτωση κατά την οποία επιθυµούµε να εµφα-
νίσουµε το κείµενο του µηνύµατος συνοδευόµενο από µία ηχητική προει-
δοποίηση, καταχωρούµε στην παράµετρο αυτή την τιµή «Ναι (Yes)», που
αποτελεί και την προεπιλεγµένη τιµή αυτής της παραµέτρου.

3. Τύπος (Type): χρησιµοποιούµε την παράµετρο αυτή για να καθορίσουµε τον


τύπο του µηνύµατος που θέλουµε να εµφανίσουµε. Η τιµή που θα καταχω-
ρηθεί στην εν λόγω παράµετρο, καθορίζει και το εικονίδιο (icon) που θα χρη-
σιµοποιηθεί στο µήνυµα προς εµφάνιση. Υπάρχουν δύο κατηγορίες µηνυµά-
των, εκ των οποίων η πρώτη κατηγορία (προειδοποιητικά µηνύµατα) συσχε-
τίζονται µε την πραγµατοποίηση µη επιτρεπτών ενεργειών ή µε την εµφά-
νιση σφαλµάτων, ενώ η δεύτερη κατηγορία (ενηµερωτικά µηνύµατα) εµφα-
νίζουν ενηµερωτικές πληροφορίες στην οθόνη του χρήστη κατά τη διάρκεια
της αλληλεπίδρασής του µε την εφαρµογή.

4. Τίτλος (Title): η παράµετρος αυτή δέχεται ως τιµή µια συµβολοσειρά η οποία


περιέχει τον τίτλο του µηνύµατος που θέλουµε να εµφανίσουµε. Εάν δεν
ορίσουµε κάποιο τίτλο, το µήνυµα που θα εµφανιστεί θα έχει ως τίτλο τη
συµβολοσειρά «Microsoft Access».

• Προσθήκη Menu (AddMenu Action): χρησιµοποιούµε την ενέργεια αυτή για να


κατασκευάσουµε διάφορα είδη menu επιλογών, όπως αναδυόµενα menus,

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 339

menu συντόµευσης και menu bars. Η χρήση αυτής της ενέργειας, απαιτεί τον
καθορισµό των επόµενων παραµέτρων:

1. Όνοµα menu (Menu Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβο-
λοσειρά που περιέχει το όνοµα του menu που θα εµφανίζεται στην προ-
σαρµοσµένη γραµµή εργαλείων.

2. Όνοµα µακροεντολής menu (Menu Macro Name): χρησιµοποιούµε αυτή


την παράµετρο για να καθορίσουµε το όνοµα της οµάδας µακροεντολών η
οποία περιέχει τις ενέργειες που θα συσχετισθούν µε το νέο menu επιλο-
γών.

3. Κείµενο γραµµής κατάστασης (Status Bar Text): η παράµετρος αυτή πε-


ριέχει το κείµενο που θα εµφανίζεται στη γραµµή κατάστασης της εφαρ-
µογής (status bar) κάθε φορά που θα χρησιµοποιείται το νέο menu επιλο-
γών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14
Λειτουργικές
Μονάδες
Στο κεφάλαιο αυτό παρουσιάζεται η δηµιουργία και
χρήση λειτουργικών µονάδων δια της χρήσης των οποίων εί-
ναι δυνατή η πραγµατοποίηση πολύπλοκων διαδικασιών που
δεν µπορούν να υλοποιηθούν µε τη βοήθεια των υπόλοιπων
εργαλείων της Microsoft Access.

Μετά την αναλυτική περιγραφή των βασικών αντικειµένων µιας βάσης δεδοµέ-
νων έτσι όπως αυτή υλοποιείται µέσα από το περιβάλλον της Microsoft Access, ας
περάσουµε τώρα σε πιο προχωρηµένες τεχνικές ανάπτυξης εφαρµογών οι οποίες ε-
κτός των άλλων περιλαµβάνουν τη συγγραφή κώδικα, δια της χρήσης του οποίου
είναι δυνατή η εκτέλεση πολύπλοκων διαδικασιών. Σε όλες τις εκδόσεις της Micro-
soft Access, η διαθέσιµη γλώσσα προγραµµατισµού για την συγγραφή αυτού του κώ-
δικα, είναι µια περιορισµένη έκδοση της Visual Basic που είναι γνωστή ως VBA
(Visual Basic for Applications). ∆εν είναι λίγες όµως και οι περιπτώσεις ανάπτυξης
εφαρµογών, στις οποίες η βάση δεδοµένων έχει υλοποιηθεί χρησιµοποιώντας τη Mi-
crosoft Access, ενώ το βασικό περιβάλλον αλληλεπίδρασης µε το χρήση έχει δη-
µιουργηθεί χρησιµοποιώντας την πλήρη έκδοση της γλώσσας Visual Basic.

Αν και στις πιο πολλές περιπτώσεις, η υλοποίηση των διαδικασιών της αναπτυσ-
σόµενης εφαρµογής µπορεί να γίνει και µε πολλούς άλλους εναλλακτικούς τρόπους
όπως είναι για παράδειγµα δια της χρήσης µακροεντολών, εν τούτοις η υλοποίηση
αυτών των διαδικασιών δια µέσου µιας γλώσσας προγραµµατισµού κρίνεται πιο απο-
δοτική, καθώς διευκολύνει περισσότερο τη σωστή σχεδίαση και υλοποίηση της
εφαρµογής. Αυτό ισχύει ιδιαίτερα στις περιπτώσεις σχεδίασης φορµών και ανα-
φορών, η προσπέλαση και χρήση των οποίων διευκολύνεται πάρα πολύ όταν στηρί-
ζεται στη χρήση ειδικών προγραµµάτων που είναι γνωστά µε το όνοµα λειτουργικές
µονάδες (modules). Σύµφωνα µε τα αρχεία τεκµηρίωσης της Microsoft Access, µια
λειτουργική µονάδα ορίζεται ως µια συλλογή δηλώσεων, προτάσεων και διαδι-
κασιών, οι οποίες βρίσκονται αποθηκευµένες ως µία ενιαία οντότητα, και κάτω
από ένα κοινό όνοµα. Στην περίπτωση κατά την οποία µία φόρµα ή αναφορά χαρα-
κτηρίζεται από την ύπαρξη λειτουργικών µονάδων οι οποίες επιτρέπουν την προσπέ-
λασή της από τον τελικό χρήστη, αυτές οι µονάδες αποτελούν τµήµα του αντικειµέ-
Κεφάλαιο 14 : Λειτουργικές Μονάδες 342

νου της φόρµας ή της αναφοράς, και εποµένως, εάν το αντικείµενο αυτό διαγραφεί ή
µετακινηθεί σε άλλη βάση, οι συσχετιζόµενες λειτουργικές µονάδες θα διαγραφούν ή
θα µετακινηθούν ανάλογα. Αυτό όµως δεν συµβαίνει όταν η αλληλεπίδραση του χρή-
στη µε τη φόρµα ή την αναφορά γίνεται δια µέσου κατάλληλα σχεδιασµένων µακροε-
ντολών. Πράγµατι, όπως έχει αναφερθεί στο προηγούµενο κεφάλαιο, οι µακροεντο-
λές αποθηκεύονται ως ξεχωριστά αντικείµενα της βάσης, και εποµένως, η διαγρα-
φή ή µετακίνηση κάποιας φόρµας ή αναφοράς, θα απαιτεί ενδεχοµένως και τη δια-
γραφή ή µετακίνηση της αντίστοιχης µακροεντολής. Εποµένως η χρήση των λειτουρ-
γικών µονάδων στη θέση των µακροεντολών, διευκολύνει τη συντήρηση της βάσης
και καθιστά απλούστερη τη σχεδίαση της εφαρµογής.

Η δεύτερη χαρακτηριστική περίπτωση στην οποία η χρήση λειτουργικών µονά-


δων προσφέρει περισσότερα πλεονεκτήµατα σε σχέση µε τη χρήση των µακροεντο-
λών, αναφέρεται στη δηµιουργία προσαρµοσµένων συναρτήσεων (customized
functions) οι οποίες χρησιµοποιούνται για την πραγµατοποίηση των κατάλληλων σε
κάθε περίπτωση διαδικασιών. Υλοποιώντας τέτοιου είδους συναρτήσεις, µπορούµε
να βελτιώσουµε και να προσαρµόσουµε τη λειτουργία των ενσωµατωµένων συ-
ναρτήσεων της Microsoft Access, έτσι ώστε να καλύψουµε τις ανάγκες µας. Η
χρήση των λειτουργικών µονάδων µας επιτρέπει ακόµη να διαχειρισθούµε µε πιο
αποτελεσµατικό τρόπο τα σφάλµατα που λαµβάνουν χώρα κατά τη διάρκεια ε-
κτέλεσης της εφαρµογής, εµφανίζοντας τα κατάλληλα σε κάθε περίπτωση µηνύ-
µατα σφάλµατος.

Στην τρέχουσα έκδοση της Microsoft Access, υπάρχουν δύο κατηγορίες λειτουρ-
γικών µονάδων. Η πρώτη από τις κατηγορίες αυτές που φέρει το όνοµα λειτουργικές
µονάδες κλάσης (class modules) χρησιµοποιείται για τον ορισµό νέων τύπων αντι-
κειµένων, και είναι εντελώς ανάλογη µε τις κλάσεις (classes) των αντικειµενοστρα-
φών γλωσσών προγραµµατισµού. Χαρακτηριστικό παράδειγµα αυτής της κατηγορίας
λειτουργικών µονάδων, είναι οι λειτουργικές µονάδες φόρµας και αναφοράς, οι
οποίες στη γενική περίπτωση περιλαµβάνουν διαδικασίες συµβάντος που καθορίζουν
την απόκριση της φόρµας ή της αναφοράς σε συµβάντα συγκεκριµένου τύπου. Ας
σηµειωθεί πως σε αντίθεση µε τις προηγούµενες εκδόσεις της Microsoft Access όπου
οι λειτουργικές µονάδες κλάσης έπρεπε υποχρεωτικά να συσχετιστούνε µε κάποια
φόρµα ή αναφορά, στην τρέχουσα έκδοση µπορούµε να δηµιουργήσουµε λειτουργι-
κές µονάδες κλάσης χωρίς να εφαρµόσουµε υποχρεωτικά ένα τέτοιο συσχετισµό.

Από την άλλη πλευρά, οι βασικές λειτουργικές µονάδες (standard modules)


περιλαµβάνουν δηλώσεις, προτάσεις και διαδικασίες, οι οποίες δεν συσχετίζονται
µε κάποιο αντικείµενο της βάσης, και µπορούν να κληθούν και να εκτελεστούν από
οποιοδήποτε σηµείο της εφαρµογής. Αυτού του είδους οι λειτουργικές µονάδες εµ-
φανίζονται στην οµώνυµη σελίδα του κεντρικού παραθύρου διαχείρισης της βάσης
δεδοµένων, και µπορούν να χρησιµοποιηθούν είτε από µόνες τους, είτε µέσα από κά-
ποια λειτουργική µονάδα κλάσης προκειµένου να υλοποιήσουν το είδος της αλληλε-
πίδρασης του χρήστη µε κάποιο από τα αντικείµενα της εφαρµογής.

ΤΑ ΒΑΣΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΗΣ ΓΛΩΣΣΑΣ VISUAL BASIC

Η γλώσσα Visual Basic ως µια τυπική γλώσσα προγραµµατισµού υψηλού επιπέ-


δου, χαρακτηρίζεται από όλες εκείνες τις δοµικές µονάδες που περιγράφουν τις

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 343

γλώσσες προγραµµατισµού αυτού του είδους όπως είναι οι σταθερές (constants), οι


µεταβλητές (variables), οι προτάσεις (statements) και οι µέθοδοι (methods) των
αντικειµένων της βάσης. Αν και η σηµασία και χρήση όλων αυτών των δοµικών µο-
νάδων είναι παρόµοια µε εκείνη των τυπικών γλωσσών προγραµµατισµού, είναι χρή-
σιµο για λόγους πληρότητας να προχωρήσουµε σε µια συνοπτική περιγραφή του τρό-
που µε τον οποίο δηλώνονται και χρησιµοποιούνται µέσα από µία λειτουργική µονά-
δα της Microsoft Access. Σύµφωνα µε τα αρχεία τεκµηρίωσης της εφαρµογής, τα πιο
σηµαντικά από τα χαρακτηριστικά της γλώσσας προγραµµατισµού που χρησιµο-
ποιούνται για την ανάπτυξη των λειτουργικών µονάδων, είναι τα ακόλουθα:

Σταθερές (Constants): οι σταθερές ορίζονται ως δοµικές µονάδες οι οποίες πε-


ριγράφονται από κάποιο όνοµα και φέρουν κάποια τιµή που παραµένει αµετάβλητη
κατά τη διάρκεια εκτέλεσης του προγράµµατος. Σε µία τυπική εφαρµογή αυτές οι
σταθερές µπορεί να είναι τόσο αριθµητικές σταθερές (ακέραιες ή πραγµατικές),
όσο και σταθερές συµβολοσειρών (δηλαδή σταθερές χαρακτήρων). Εναλλακτικά η
τιµή µιας σταθεράς µπορεί να µην είναι ένας απλός αριθµός αλλά η τιµή µιας ολό-
κληρης αριθµητικής παράστασης ορισµένη από το χρήστη. Η δήλωση µιας στα-
θεράς σε ένα πρόγραµµα της γλώσσας Visual Basic, γίνεται χρησιµοποιώντας τη δε-
σµευµένη λέξη Const. Για παράδειγµα, προκειµένου να ορίσουµε µία ακέραια στα-
θερά που να φέρει το όνοµα Age και τιµή ίση µε 18, θα χρησιµοποιήσουµε τη δήλω-
ση Const Age As Integer = 18.

Μεταβλητές (Variables): µια µεταβλητή ορίζεται ως µια δοµική µονάδα η ο-


ποία περιγράφεται από κάποιο όνοµα και φέρει κάποια τιµή που µπορεί να µεταβλη-
θεί κατά τη διάρκεια της εκτέλεσης του προγράµµατος. Επειδή η δήλωση µιας µετα-
βλητής προκαλεί τη δέσµευση της κατάλληλης σε κάθε περίπτωση ποσότητας
µνήµης η διεύθυνση της οποίας ταυτοποιείται µονοσήµαντα από το όνοµα αυτής της
µεταβλητής, είναι προφανές πως µέσα στην ίδια διαδικασία δεν είναι επιτρεπτή η
δήλωση δύο µεταβλητών µε το ίδιο όνοµα. Όσον αφορά τα ονόµατα που µπορούµε
να χρησιµοποιήσουµε για αυτές τις µεταβλητές, αυτά είναι συµβολοσειρές που θα
πρέπει υποχρεωτικά να ξεκινάνε από αλφαβητικό (και όχι αριθµητικό) χαρακτήρα,
και να έχουν µέγιστο µήκος ίσο µε 255 χαρακτήρες.

Μια µεταβλητή µπορεί να ανήκει σε πολλούς διαφορετικούς τύπους δεδοµένων το


πλήθος και το είδος των οποίων είναι συνάρτηση της γλώσσας προγραµµατισµού που
χρησιµοποιείται σε κάθε περίπτωση. Στην ειδική περίπτωση της γλώσσας Visual Ba-
sic, µια µεταβλητή µπορεί να ανήκει σε κάποιον από τους παρακάτω τύπους δεδοµέ-
νων:

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 344

Όνοµα Τύπου Μέγεθος Εύρος


∆εδοµένων σε Bytes Τιµών

Byte 01 0 έως 255


Boolean 02 TRUE ή FALSE
Integer 02 -32768 έως 32767
Long 04 2147483648 έως 2147483647
Single 04 -3.402823E38 έως 1.401298E-45 για αρ-
νητικές τιµές και 1.401298E-45 έως
3.402823E38 για θετικές τιµές
Double 08 -1.79769313486231E308 έως
4.94065645841247E-324 για αρνητικές
τιµές και 4.94065645841247E-324 έως
1.79769313486232E308 για θετικές τι-
µές.
Currency 08 922337203685477,5808 έως
922337203685477,5807
Decimal 14 +/-79228162514264337593543950335
χωρίς τη χρήση δεκαδικών ψηφίων, ή
+/-7.9228162514264337593543950335
µε 28 θέσεις για δεκαδικά ψηφία. Ο µι-
κρότερος µη µηδενικός αριθµός έχει τιµή
+/-0.0000000000000000000000000001
Date 08 January 1, 100 έως December 31, 9999
Object 04 Οποιαδήποτε αναφορά σε αντικείµενο
String 10 + µήκος 0 έως 2000000000 περίπου
(µεταβλητού συµβολοσειράς
µήκους)
String Μήκος 1 έως 65400 περίπου
(σταθερού µήκους) συµβολοσειράς
Variant 16 Ίδιο εύρος τιµών µε εκείνο του τύπου δε-
(µε αριθµούς) δοµένων Double
Variant 22 + µήκος Ίδιο εύρος τιµών µε εκείνο των συµβο-
(µε χαρακτήρες) συµβολοσειράς λοσειρών µεταβλητού µήκους (Variable
Length Strings)
User Defined Μεταβλητό Το εύρος δεδοµένων του κάθε ατοµικού
Data Type (εξαρτάται από στοιχείου (element) εξαρτάται από τον
το µέγεθος των τύπο δεδοµένων αυτού του στοιχείου
απλών τύπων
δεδοµένων που
περιέχει)

Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως στην περίπτωση δήλω-
σης πινάκων (για κάθε τύπο δεδοµένων), οι απαιτήσεις σε µνήµη δεν περιορίζονται
µόνο στον αποθηκευτικό χώρο που θα καταλάβουν τα δεδοµένα αυτών των πινά-
κων, αλλά αντίθετα απαιτούνται 20 επιπλέον bytes µνήµης για το αντικείµενο
του πίνακα και 4 bytes µνήµης για κάθε µια από τις διαστάσεις που τον περιγρά-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 345

φουν. Το µέγεθος του αποθηκευτικού χώρου που απαιτείται για την αποθήκευση των
δεδοµένων του πίνακα, είναι προφανώς ίσο µε το γινόµενο του πλήθους των στοι-
χείων του πίνακα επί το µέγεθος του τύπου δεδοµένων αυτών των στοιχείων. Για
παράδειγµα η αποθήκευση ενός συνόλου 20 ακεραίων αριθµών, απαιτεί χώρο α-
ποθήκευσης µε µέγεθος 40 bytes, διότι οι απαιτήσεις σε µνήµη του τύπου δεδοµέ-
νων ακέραιων αριθµών (integer data type) είναι 2 bytes.

Προτάσεις (Statements): µια πρόταση ορίζεται ως µια συντακτικώς ορθή


οµάδα λεκτικών µονάδων η οποία χρησιµοποιείται για την πραγµατοποίηση κά-
ποιας ενέργειας καθώς επίσης για τον ορισµό και την απόδοση τιµής σε κάποια
µεταβλητή ή σταθερά. Στις πιο συνηθισµένες περιπτώσεις η κάθε πρόταση κατα-
λαµβάνει µία και µόνο γραµµή στο πηγαίο αρχείο, αν και υπάρχει η δυνατότητα να
επεκταθεί σε περισσότερες από µία γραµµές, χρησιµοποιώντας τον ειδικό χαρακτήρα
«_». Στην περίπτωση κατά την οποία µία πρόταση είναι αρκετά µικρή, µπορούµε να
την τοποθετήσουµε στην ίδια γραµµή µε την προηγούµενη πρόταση, τοποθετώντας
ανάµεσά τους το διαχωριστικό χαρακτήρα «:».

Μέθοδος (method): σύµφωνα µε τις βασικές αρχές του αντικειµενοστραφούς


προγραµµατισµού, το κάθε στιγµιότυπο µιας κλάσης (που είναι γνωστό ως αντικεί-
µενο (object)), χαρακτηρίζεται από την ύπαρξη κάποιων ιδιοτήτων (attributes) που
περιγράφουν τη φύση του και τα χαρακτηριστικά του, καθώς και κάποιων συναρτή-
σεων (member functions) ή µεθόδων (methods) οι οποίες επιτρέπουν τη χρήση αυ-
τού του αντικειµένου µέσα από τη συνάρτηση που το καλεί. Στην ειδική περίπτωση
της Visual Basic, αυτές οι µέθοδοι συσχετίζονται µε µια πληθώρα αντικειµένων δια-
φορετικού τύπου, τα πιο χαρακτηριστικά εκ των οποίων είναι οι φόρµες και οι ανα-
φορές που χρησιµοποιούνται για τη διαχείριση και την προεπισκόπηση των δεδοµέ-
νων της βάσης.

∆ιαδικασίες συνάρτησης και διαδικασίες ρουτίνας

Χρησιµοποιούµε τον όρο διαδικασία (procedure) για να χαρακτηρίσουµε


µία µονάδα κώδικα της γλώσσας Visual Basic, δηλαδή ένα σύνολο εντολών, δη-
λώσεων και µεθόδων που επιτελούν κάποια συγκεκριµένη λειτουργία. Ανάλογα
µε τη φύση της και τον τρόπο µε τον οποίο έχει υλοποιηθεί, µια διαδικασία καλείται
µε ορίσµατα ή χωρίς ορίσµατα (arguments). Αυτά τα ορίσµατα δεν είναι τίποτε
άλλο από σταθερές, µεταβλητές ή ακόµη και ολόκληρες εκφράσεις (expressions)
πάνω στις οποίες εφαρµόζεται ο αλγόριθµος που υλοποιείται από τη διαδικασία στην
οποία αποστέλλονται. Μια διαδικασία µπορεί να επιστρέφει ή όχι κάποια τιµή στο
κυρίως πρόγραµµα ή στη διαδικασία από την οποία καλείται, γεγονός που µας επι-
τρέπει να οµαδοποιήσουµε τις διαδικασίες στις δύο επόµενες κατηγορίες:

∆ιαδικασίες ρουτίνας (sub procedures): οι διαδικασίες αυτού του τύπου ε-


πιτελούν µία ή περισσότερες λειτουργίες χωρίς ωστόσο να επιστρέφουν κάποια τιµή.
Για το λόγο αυτό δεν µπορούν να κληθούν µέσα από άλλες διαδικασίες ρουτίνας
(nested procedures). Αυτού του είδους οι διαδικασίες χρησιµοποιούνται κατά κύριο
λόγο σε λειτουργικές µονάδες κλάσης (class modules) οι οποίες επιτρέπουν την αλ-
ληλεπίδραση του χρήστη µε τις φόρµες και τις αναφορές της εφαρµογής που διαχειρί-
ζεται τη βάση δεδοµένων µας. Ο κώδικας που περιλαµβάνεται στις διαδικασίες αυτού

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 346

του είδους, αναγράφεται ανάµεσα στο ζεύγος των δεσµευµένων προτάσεων Begin
Sub και End Sub.

∆ιαδικασίες συνάρτησης (function procedures): σε αντίθεση µε τις διαδικασί-


ες ρουτίνας που δεν επιστρέφουν κάποια τιµή στη διαδικασία µέσα από την οποία
καλούνται, οι διαδικασίες συνάρτησης (που συχνά αποκαλούνται και απλά συ-
ναρτήσεις) επιστρέφουν µία τέτοια τιµή, και εποµένως µπορούν να χρησιµοποιη-
θούν σε πιο σύνθετες εκφράσεις και παραστάσεις. Ο κώδικας που περιλαµβάνεται
στις διαδικασίες αυτού του είδους αναγράφεται ανάµεσα στο ζεύγος των δεσµευµέ-
νων προτάσεων Begin Function και End Function.

Η Visual Basic ως γλώσσα προγραµµατισµού υψηλού επιπέδου (high level


programming language), παρέχει τη δυνατότητα διαµόρφωσης του περιεχοµένου
µιας λειτουργικής µονάδας ως ένα σύνολο από διαδικασίες συνάρτησης ή ρουτί-
νας. Η κάθε µία από αυτές τις διαδικασίες χρησιµοποιεί γενικά το δικό της σύνολο
µεταβλητών – οι οποίες ονοµάζονται τοπικές µεταβλητές (local variables) – αν και
υπάρχει η δυνατότητα χρήσης καθολικών µεταβλητών (global variables), οι οποίες
δύνανται να χρησιµοποιηθούν από το σύνολο των διαδικασιών που περιλαµβάνο-
νται σε µία λειτουργική µονάδα. Σύµφωνα µε τις βασικές αρχές του δοµηµένου
προγραµµατισµού (structured programming), το τµήµα του προγράµµατος στο
οποίο είναι ορατή κάποια από τις µεταβλητές που περιλαµβάνονται σε αυτό, ορίζεται
ως η εµβέλεια (scope) αυτής της µεταβλητής. Στενά συνδεδεµένη µε την έννοια της
εµβέλειας είναι η έννοια του χρόνου ζωής της µεταβλητής (variable lifetime), που
ορίζεται ως το χρονικό διάστηµα κατά τη διάρκεια του οποίου η εν λόγω µετα-
βλητή διατηρεί την τιµή της. Στην περίπτωση της γλώσσας Visual Basic, η εµβέ-
λεια και ο χρόνος ζωής µιας µεταβλητής χαρακτηρίζονται από τους ακόλουθους κα-
νόνες:

Εάν µια µεταβλητή ορίζεται µέσα σε µια συγκεκριµένη διαδικασία (συνάρτησης ή


ρουτίνας), µπορεί να χρησιµοποιηθεί µόνο από τις εντολές που περιλαµβάνονται σε
αυτή, και όχι από τις υπόλοιπες διαδικασίες της λειτουργικής µονάδας. Όσον α-
φορά το χρονικό διάστηµα για το οποίο αυτή η µεταβλητή διατηρεί την τιµή της, αυ-
τό είναι ίσο µε το χρόνο εκτέλεσης της διαδικασίας που την περιέχει. Σε αυτό το
χρόνο εκτέλεσης περιλαµβάνονται και τα χρονικά διαστήµατα εκτέλεσης των διαδι-
κασιών εκείνων που ενδεχοµένως καλούνται µέσα από την τρέχουσα διαδικασία.

Από την άλλη πλευρά, εάν η µεταβλητή δεν ορίζεται µέσα σε κάποια διαδικασία
αλλά στο δηλωτικό τµήµα (declaration section) µιας λειτουργικής µονάδας και
δια της χρήσης της δεσµευµένης λέξης Dim (που θα µελετηθεί στη συνέχεια), µπορεί
να χρησιµοποιηθεί από όλες τις διαδικασίες που περιλαµβάνονται σε αυτή, όχι
όµως και από τις διαδικασίες των υπόλοιπων λειτουργικών µονάδων. Στην ορολογία
του δοµηµένου προγραµµατισµού, οι µεταβλητές αυτές χαρακτηρίζονται ως ιδιωτι-
κές (private). Υπάρχει όµως η δυνατότητα προσπέλασης µιας µεταβλητής από όλες
τις λειτουργικές µονάδες της εφαρµογής, εάν δηλωθεί ως κοινόχρηστη, κάτι που γί-
νεται αναγράφοντας τη δεσµευµένη λέξη Public πριν από το όνοµα αυτής της µετα-
βλητής.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 347

Η έννοια της ιδιωτικής και της κοινόχρηστης µεταβλητής µπορεί χωρίς καµία
τροποποίηση να επεκταθεί και στην περίπτωση των διαδικασιών που περιέχονται σε
µία λειτουργική µονάδα. Μιλώντας γενικά, αυτού του είδους οι διαδικασίες θεωρού-
νται κοινόχρηστες, και εποµένως µπορούν να χρησιµοποιηθούν από όλες τις λει-
τουργικές µονάδες µιας εφαρµογής. Εξαίρεση στον κανόνα αυτό, αποτελούν οι
διαδικασίες συµβάντος (event procedures) οι οποίες πάντοτε θεωρούνται ιδιωτι-
κές. Για το λόγο αυτό, κάθε φορά που δηλώνουµε µια διαδικασία συµβάντος, η Vis-
ual Basic τοποθετεί πάντοτε τη δεσµευµένη λέξη Private πριν από το όνοµα αυτής
της διαδικασίας. Για όλες τις υπόλοιπες διαδικασίες, εφ’ όσον επιθυµούµε να τις δια-
πραγµατευτούµε ως ιδιωτικές, θα πρέπει να καταχωρήσουµε από µόνοι µας τη λέξη
Private αµέσως πριν από το όνοµα που τις χαρακτηρίζει.

∆ηλώσεις σταθερών, µεταβλητών και πινάκων.

Όπως έχει ήδη αναφερθεί σε προηγούµενη παράγραφο, η δήλωση µιας σταθεράς


και η απόδοση τιµής σε αυτή, λαµβάνει χώρα δια της χρήσης της δεσµευµένης λέξης
Const. Μετά τη δήλωσή της, η σταθερά διατηρεί πάντα την τιµή που της έχει α-
ποδοθεί, και η οποία δεν δύναται να µεταβληθεί κατά τη διάρκεια εκτέλεσης του
προγράµµατος. Εφόσον η σταθερά δηλωθεί µέσα σε µια διαδικασία ή στο δηλωτικό
τµήµα µιας λειτουργικής µονάδας, θεωρείται ως ιδιωτική, ενώ για να χρησιµοποιηθεί
ως κοινόχρηστη, θα πρέπει πριν από το όνοµά της, να αναγραφεί η δεσµευµένη λέξη
Public. Είναι προφανές, πως η χρήση της δεσµευµένης λέξης Private επιτρέπει τη
χρήση της σταθεράς ως ιδιωτική, κάτι που άλλωστε αποτελεί και την προεπιλεγµένη
συµπεριφορά της εφαρµογής.

Η πρόταση δήλωσης µιας σταθεράς, στη γενική περίπτωση έχει τη µορφή

[Private | Public] Const [Constant Name] As [Data Type] = [Constant Value]

όπου η χρήση του χαρακτήρα «|» υποδηλώνει τον τελεστή της λογικής διάζευξης
(Boolean OR) ενώ το όρισµα [Data Type] είναι το όνοµα του τύπου δεδοµένων της
σταθεράς που θέλουµε να δηλώσουµε. Ως τύπο δεδοµένων για τη νέα σταθερά µπο-
ρούµε να χρησιµοποιήσουµε οποιοδήποτε έγκυρο τύπο δεδοµένων της γλώσσας Vis-
ual Basic (δηλαδή κάποιον από τους Boolean, Byte, Integer, Long, Currency,
Single, Double, Date, String και Variant). Στην περίπτωση κατά την οποία επιθυ-
µούµε να δηλώσουµε δύο σταθερές µέσα από την ίδια πρόταση, µπορούµε να το
κάνουµε χρησιµοποιώντας το κόµµα «,» ως το χαρακτήρα διαχωρισµού. Έτσι η πρό-
ταση

Const Age As Integer = 18, Salary as Currency = 30000

επιτρέπει την ταυτόχρονη δήλωση δύο σταθερών, εκ των οποίων η πρώτη είναι ακέ-
ραιος αριθµός και φέρει την τιµή 18, ενώ η δεύτερη είναι νοµισµατική µονάδα και
φέρει την τιµή 30000.

Από την άλλη πλευρά, η δήλωση µιας µεταβλητής (variable) γίνεται µε πα-
ρόµοιο τρόπο, και χρησιµοποιώντας τη δεσµευµένη λέξη Dim. Σε πλήρη αναλογία µε
τη δήλωση µιας σταθεράς, η δήλωση µιας µεταβλητής µπορεί να λάβει χώρα είτε µέ-
σα σε κάποια από τις διαδικασίες της λειτουργικής µονάδας, είτε στο δηλωτικό

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 348

της τµήµα. Και στις δύο αυτές περιπτώσεις η εν λόγω µεταβλητή χρησιµοποιείται ως
ιδιωτική, ενώ για να χαρακτηριστεί ως κοινόχρηστη, θα πρέπει στη δηλωτική της
πρόταση και πριν από το όνοµά της, να αναγραφεί η δεσµευµένη λέξη Public. Η
χρήση της λέξης Private καθιστά τη µεταβλητή ιδιωτική, ενώ µια άλλη ενδιαφέρου-
σα περίπτωση είναι η χρήση της λέξης Static, η οποία επιτρέπει στην εν λόγω µετα-
βλητή να διατηρεί την τιµή της ανάµεσα σε διαδοχικές κλήσεις της από τις δια-
δικασίες της λειτουργικής µονάδας. Οι µεταβλητές αυτού του είδους ονοµάζονται
στατικές µεταβλητές (static variables).

Η πρόταση δήλωσης µιας µεταβλητής, στη γενική περίπτωση έχει τη µορφή

[Private | Public | Dim] [Variable Name] As [Data Type]

όπου ο τύπος δεδοµένων για τη νέα µεταβλητή µπορεί να είναι κάποιος από τους
Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (σταθερού ή
µεταβλητού µήκους), Object ή Variant. Εάν δεν καταχωρηθεί κάποιος τύπος δε-
δοµένων, χρησιµοποιείται ο προεπιλεγµένος τύπος Variant. Η εφαρµογή παρέχει ε-
πίσης τη δυνατότητα να χρησιµοποιήσουµε ως τύπο δεδοµένων κάποιο τύπο που έχει
ορισθεί από το χρήστη σε προηγούµενο στάδιο της διαδικασίας (user defined data
type) - η δήλωση νέων τύπων δεδοµένων, γίνεται χρησιµοποιώντας τη δεσµευµένη
λέξη Type. Τέλος, σε πλήρη αναλογία µε τη δήλωση µιας σταθεράς, υπάρχει η δυνα-
τότητα να ορίσουµε ταυτόχρονα πολλές µεταβλητές µέσα από την ίδια πρόταση, και
χρησιµοποιώντας το κόµµα «,» ως διαχωριστικό ανάµεσα σε δύο διαδοχικές δηλώ-
σεις µεταβλητών. Έτσι η δήλωση

Dim Color As Integer, Mean, Fract As Double

ορίζει τρεις µεταβλητές, τις Color, Mean και Fract εκ των οποίων η πρώτη είναι τύ-
που δεδοµένων Integer, η δεύτερη τύπου δεδοµένων Variant (αφού δεν έχει καθορι-
σθεί κάποιος τύπος δεδοµένων), και η τρίτη τύπου δεδοµένων Double.

Η τελευταία ενδιαφέρουσα περίπτωση που θα εξεταστεί σε αυτή την ενότητα,


αφορά τη δήλωση πινάκων (arrays). Ένας πίνακας ορίζεται ως µία συλλογή αντι-
κειµένων που βρίσκονται αποθηκευµένα σε διαδοχικές θέσεις µνήµης συγκεκρι-
µένου µεγέθους. Η δήλωση ενός πίνακα γίνεται χρησιµοποιώντας τις δεσµευµένες
λέξεις Dim, Static, Private και Public και ακολουθεί τον ίδιο τρόπο σύνταξης µε
αυτόν που χρησιµοποιείται για τη δήλωση των µεταβλητών. Άλλωστε η βασική
διαφορά που υφίσταται ανάµεσα στη δήλωση µιας µεταβλητής και στη δήλωση ενός
πίνακα, είναι πως στη δεύτερη περίπτωση θα πρέπει εκτός από τον τύπο δεδοµένων
των στοιχείων του πίνακα να δηλώσουµε και το πλήθος αυτών των στοιχείων.
Ένας πίνακας λέγεται στατικός (fixed array) όταν το µέγεθός του δεν µεταβάλλεται
κατά τη διάρκεια της εκτέλεσης του προγράµµατος, αν και υπάρχει η δυνατότητα
δήλωσης και χρήσης δυναµικών πινάκων (dynamic arrays) το µέγεθος των οποίων
µεταβάλλεται κατά βούληση έτσι ώστε να καλύπτονται οι ανάγκες που υφίστανται σε
κάθε περίπτωση. Η δήλωση ενός δυναµικού πίνακα ακολουθεί την ίδια σύνταξη µε τη
δήλωση ενός στατικού πίνακα, µε τη διαφορά πως δεν καθορίζουµε το πλήθος των
στοιχείων του, αλλά αφήνουµε κενές τις παρενθέσεις που ακολουθούν αµέσως µετά
το όνοµά του. Έτσι η δήλωση Dim Samples () As Integer, ορίζει ένα δυναµικό πίνα-
κα ακεραίων στοιχείων. Στην περίπτωση κατά την οποία στη δήλωση ενός στατικού ή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 349

ενός δυναµικού πίνακα δεν καθορίσουµε τον τύπο δεδοµένων των στοιχείων που πε-
ριλαµβάνονται σε αυτόν, χρησιµοποιείται ο προεπιλεγµένος τύπος Variant.

Η γλώσσα προγραµµατισµού Visual Basic παρέχει τη δυνατότητα χρήσης τό-


σο µονοδιάστατων όσο και πολυδιάστατων πινάκων. Η διάσταση αυτών των πινά-
κων καθορίζεται µονοσήµαντα από τον τρόπο µε τον οποίο λαµβάνει χώρα η δήλωσή
τους. Έτσι η δήλωση Dim points (50) As Integer ορίζει ένα µονοδιάστατο πίνακα
ακεραίων 51 θέσεων (η προεπιλεγµένη αρίθµηση των θέσεων των πινάκων ξεκινάει
από τιµή ίση µε το 0), ενώ η δήλωση Dim coordinates (19, 19) As Double ορίζει ένα
δισδιάστατο πίνακα πραγµατικών αριθµών διπλής ακρίβειας (double precision) µε
20 γραµµές και 20 στήλες. Από τα δύο ορίσµατα που χρησιµοποιούνται στον ορισµό
του πλήθους των κελιών ενός πίνακα δύο διαστάσεων, το πρώτο αναφέρεται στον
αριθµό των γραµµών και το δεύτερο στον αριθµό των στηλών του πίνακα. Στην
περίπτωση κατά την οποία επιθυµούµε η αρίθµηση των κελιών να ξεκινά από το 1
και όχι από το 0, θα πρέπει πριν από τις δηλώσεις των πινάκων της λειτουργικής µο-
νάδας, να καταχωρήσουµε την πρόταση Option Base 1.

Οι τελεστές της γλώσσας Visual Basic

Σε πλήρη αναλογία µε τις υπόλοιπες γλώσσες προγραµµατισµού, η γλώσσα


Visual Basic χαρακτηρίζεται από την ύπαρξη ενός συνόλου τελεστών (operators)
που χρησιµοποιούνται κατά τη διαδικασία δόµησης εκφράσεων. Τυπικό παράδειγµα
ενός τέτοιου τελεστή, είναι ο τελεστής καταχώρησης (assignment operator) «=», ο
οποίος χρησιµοποιείται για την απόδοση τιµών στις διάφορες σταθερές και µετα-
βλητές µιας διαδικασίας. Οι τελεστές της γλώσσας Visual Basic, οµαδοποιούνται
όπως συνήθως σε αριθµητικούς (arithmetic), συγκριτικούς (comparison) και λο-
γικούς (logical) τελεστές, ενώ υπάρχει και άλλος ένας τελεστής που χρησιµοποιείται
για τη συνένωση (concatenation) µεταβλητών συµβολοσειράς (concatenation op-
erators). Σε µια πιο αναλυτική περιγραφή, οι τελεστές που µπορούν να χρησιµοποιη-
θούνε για τη δόµηση εκφράσεων µέσα από τη γλώσσα προγραµµατισµού Visual Ba-
sic, είναι οι ακόλουθοι:

• Αριθµητικοί Τελεστές (Arithmetic Operators): στην κατηγορία αυτή των τελε-


στών, ανήκουν ο τελεστής ύψωσης σε δύναµη (^), οι τελεστές πρόσθεσης (+),
αφαίρεσης (-), πολλαπλασιασµού (*) και διαίρεσης (/), ο τελεστής υπολοίπου
(module) (mod), και ο τελεστής (\) που διαιρεί δύο αριθµούς αλλά επιστρέ-
φει µόνο το ακέραιο µέρος του πηλίκου της διαίρεσης.

• Συγκριτικοί Τελεστές (Comparison Operators): στην κατηγορία αυτή ανήκουν


οι τελεστές «µικρότερο από» (<), «µικρότερο ή ίσο µε » (<=), «µεγαλύτερο
από» (>), «µεγαλύτερο ή ίσο µε» (>=), «ίσο µε» (=) και «όχι ίσο µε» (<>).

• Τελεστής Συνένωσης Συµβολοσειράς (Concatenation Operator): στην περί-


πτωση κατά την οποία επιθυµούµε να συνενώσουµε τα περιεχόµενα δύο συµβο-
λοσειρών προκειµένου να σχηµατίσουµε µια µεγαλύτερη συµβολοσειρά, µπορού-
µε να το κάνουµε χρησιµοποιώντας τον τελεστή «&». Εάν για παράδειγµα ορί-
σουµε µια µεταβλητή συµβολοσειράς µε το όνοµα Message, η δήλωση Message

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 350

= “Hello” & “World” θα έχει ως αποτέλεσµα την καταχώρηση στη µεταβλητή


Message, της σταθερής συµβολοσειράς «Hello World».

• Λογικοί Τελεστές (Logical Operators): τέλος στην κατηγορία των λογικών τε-
λεστών, ανήκουν οι γνωστοί τελεστές AND, OR, NOT, XOR, EQV και IMP
που χρησιµοποιούνται στη διαδικασία δόµησης λογικών εκφράσεων, οι οποίες
µπορούν να λάβουν µόνο τις τιµές TRUE ή FALSE.

ΠΡΑΓΜΑΤΟΠΟΙΗΣΗ ΕΝΕΡΓΕΙΩΝ ∆ΙΑ ΤΗΣ ΧΡΗΣΗΣ


ΛΕΙΤΟΥΡΓΙΚΩΝ ΜΟΝΑ∆ΩΝ

Το πιο χαρακτηριστικό παράδειγµα χρήσης των λειτουργικών µονάδων µέσα


από την τρέχουσα βάση δεδοµένων, είναι η πραγµατοποίηση των ενεργειών (ac-
tions) που περιγράψαµε στο κεφάλαιο των µακροεντολών. Αυτό σηµαίνει πως αυ-
τές οι ενέργειες µπορούν να εκτελεστούν τόσο µέσα από µια µακροεντολή όσο και
µέσα από µια λειτουργική µονάδα, και ο τρόπος κλήσεις τους που θα επιλέξουµε,
εξαρτάται από τη φύση και τα χαρακτηριστικά της εφαρµογής. Είναι προφανές πως
όποιον από τους δύο τρόπους και αν διαλέξουµε για να εκτελέσουµε κάποια ενέργεια,
θα πρέπει να καθορίσουµε τα ορίσµατα που τη συνοδεύουν έτσι ώστε να περιγρά-
ψουµε πλήρως τη λειτουργία της. Στην ορολογία της Microsoft Access, οι ενέργειες
που καλούνται µέσα από µία λειτουργική µονάδα, είναι γνωστές ως µέθοδοι (meth-
ods).

Μιλώντας γενικά, η έννοια της µεθόδου είναι άρρηκτα συνδεδεµένη µε την


έννοια του αντικειµενοστραφούς προγραµµατισµού (object oriented program-
ming). Μια µέθοδος ορίζεται ως µια διαδικασία η οποία εφαρµόζεται πάνω σε κά-
ποιο αντικείµενο. Το κάθε αντικείµενο χαρακτηρίζεται από την παρουσία πολλών
µεθόδων δια της χρήσης των οποίων προσπελαύνουµε τα χαρακτηριστικά του συ-
γκεκριµένου αντικειµένου, και καθορίζουµε τον τρόπο µε τον οποίο αυτό χρησι-
µοποιείται. Η Microsoft Access διαθέτει µια πληθώρα αντικειµένων αυτού του τύ-
που που χρησιµοποιούνται ανάλογα µε τις περιστάσεις και όπου αυτό είναι αναγκαίο.
Ωστόσο στις σελίδες που ακολουθούν θα χρησιµοποιήσουµε µόνο δύο από αυτά τα
αντικείµενα, που φέρουν τα ονόµατα Application και DoCmd.

Το αντικείµενο της εφαρµογής (Application Object) αναφέρεται στην τρέ-


χουσα εφαρµογή της Microsoft Access και περιέχει όλα τα επιµέρους αντικείµενα
που περιλαµβάνονται σε αυτή (όπως είναι για παράδειγµα τα αντικείµενα φόρµας και
αναφοράς). Αυτό το αντικείµενο χρησιµοποιείται προκειµένου να καθορίσουµε τις
παραµέτρους λειτουργίας της εφαρµογής, στο σύνολό της, µέσα από τη γλώσσα
Visual Basic. Ως παράδειγµα χρήσης αυτού του αντικειµένου αναφέρουµε τη διαδι-
κασία εµφάνισης της γραµµής κατάστασης (status bar) της εφαρµογής, η οποία
γίνεται µε µία εντολή της µορφής Application.SetOption “Show Status Bar”, True.
Το αποτέλεσµα αυτής της εντολής είναι η εµφάνιση της γραµµής εργαλείων στο
κάτω µέρος της οθόνης, και είναι το ίδιο µε εκείνο που θα προέκυπτε εάν ανοίγαµε
το πλαίσιο διαλόγου «Επιλογές» – για να το κάνουµε αυτό µεταφερόµαστε στο κε-
ντρικό menu επιλογών της Access και ακολουθούµε τη διαδροµή Εργαλεί-
αÆΕπιλογές – και ενεργοποιούσαµε το check box µε τίτλο «Γραµµή Κατάστα-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 351

σης». Περισσότερες λεπτοµέρειες για τις µεθόδους του αντικειµένου της εφαρµογής
µπορούν να βρεθούν στα αρχεία τεκµηρίωσης της Microsoft Access.

Το δεύτερο σηµαντικό αντικείµενο που θα µας απασχολήσει σε αυτή την ενό-


τητα, είναι το αντικείµενο DoCmd που χρησιµοποιείται για την πραγµατοποίηση
των ενεργειών των µακροεντολών µέσα από τη γλώσσα Visual Basic. Αυτό το α-
ντικείµενο περιέχεται µέσα στο αντικείµενο της εφαρµογής, και οι µέθοδοι που περι-
λαµβάνονται σε αυτό, επιτρέπουν την πραγµατοποίηση των πιο χαρακτηριστικών λει-
τουργιών της εφαρµογής, όπως είναι η χρήση φορµών και αναφορών, η εκτέλεση
ερωτηµάτων, και η µετακίνηση του χρήστη ανάµεσα στις εγγραφές των πινάκων
της βάσης. Υπάρχουν ωστόσο και ενέργειες οι οποίες δεν µπορούν να εκτελεσθούν
δια της χρήσης των µεθόδων αυτού του αντικειµένου, όπως είναι για παράδειγµα η
εµφάνιση κάποιου µηνύµατος, η προσθήκη νέων menus επιλογών και ο τερµατι-
σµός της εκτέλεσης µιας µακροεντολής. Αυτού του είδους οι διαδικασίες πραγµα-
τοποιούνται δια της χρήσης εναλλακτικών µεθόδων – για παράδειγµα η εµφάνιση ε-
νός µηνύµατος λαµβάνει χώρα χρησιµοποιώντας τη συνάρτηση MsgBox – ενώ εκεί-
νες που υποστηρίζονται από το αντικείµενο DoCmd, καλούνται µέσω µιας πρότασης
της µορφής

[application].DoCmd.MethodName [argument list]

Στην παραπάνω πρόταση το όρισµα application αναφέρεται στο αντικείµενο


της εφαρµογής (η χρήση αυτού του ορίσµατος είναι προαιρετική καθώς εάν δεν κα-
θορισθεί υπονοείται πως χρησιµοποιείται το αντικείµενο της τρέχουσας εφαρµογής),
ενώ MethodName είναι το όνοµα της µεθόδου του αντικειµένου DoCmd που επιθυ-
µούµε να χρησιµοποιήσουµε. ∆εν είναι δύσκολο να διαπιστώσει κανείς, πως η κλήση
αυτής της µεθόδου ακολουθεί τους συντακτικούς κανόνες που χρησιµοποιούνται
σε όλες τις αντικειµενοστραφείς γλώσσες προγραµµατισµού για την προσπέλαση
µεθόδων αντικειµένων, και οι οποίοι χρησιµοποιούν την τελεία «.» ως το χαρακτή-
ρα διαχωρισµού του ονόµατος της µεθόδου από το όνοµα του αντικειµένου. Η κάθε
µία από αυτές τις µεθόδους του αντικειµένου DoCmd καλείται µε τον κατάλληλο σε
κάθε περίπτωση αριθµό ορισµάτων, ενώ στην περίπτωση κατά την οποία κάποια ορί-
σµατα δεν καθορισθούν, χρησιµοποιούνται για αυτά προεπιλεγµένες τιµές (default
values). Χαρακτηριστικό παράδειγµα αυτής της περίπτωσης είναι η µέθοδος Open-
Form που χρησιµοποιούµε για να ανοίξουµε κάποια από τις φόρµες της εφαρµογής.
Αν και αυτή η µέθοδος απαιτεί τον καθορισµό πολλών ορισµάτων (που περιλαµβά-
νουν µεταξύ των άλλων τον καθορισµό της προβολής της φόρµας (Normal or De-
sign View) και του φίλτρου που ενδεχοµένως επιθυµούµε να εφαρµόσουµε πάνω
στα δεδοµένα που περιλαµβάνονται σε αυτή), εν τούτοις το µόνο όρισµα που θα
πρέπει να καθορίσοµε υποχρεωτικά είναι το όνοµά της, ενώ για τα υπόλοιπα ορίσµα-
τα θα χρησιµοποιηθούν προεπιλεγµένες τιµές – η προεπιλεγµένη τιµή για την προβο-
λή της φόρµας είναι η Normal View. Η αναλυτική παρουσίαση των µεθόδων του α-
ντικειµένου DoCmd παρουσιάζεται στις επόµενες ενότητες.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 352

ΟΙ ΜΕΘΟ∆ΟΙ ΤΟΥ ΑΝΤΙΚΕΙΜΕΝΟΥ DOCMD

Ακύρωση συµβάντος (CancelEvent Method): χρησιµοποιούµε τη µέθοδο


CancelEvent για να ακυρώσουµε το συµβάν που προκάλεσε την εκτέλεση της τρέ-
χουσας διαδικασίας. Η µέθοδος αυτή καλείται µε τη µορφή DoCmd.CancelEvent και
δεν περιλαµβάνει τη χρήση ορισµάτων.

Άνοιγµα αποθηκευµένης διαδικασίας (OpenStoredProcedure Method): σε


πλήρη αναλογία µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο των µα-
κροεντολών, αυτή η µέθοδος επιτρέπει τη χρήση µιας αποθηκευµένης διαδικασίας
σε προβολή σχεδίασης (design view), προβολή εκτέλεσης (open view) ή σε προε-
πισκόπηση εκτύπωσης (print preview). Η κλήση αυτής της µεθόδου ακολουθεί τη
σύνταξη

DoCmd.OpenStoredProcedure procedureName, viewMode, dataMode

όπου procedureName είναι το όνοµα της διαδικασίας που επιθυµούµε να χρησιµο-


ποιήσουµε, viewMode είναι η προβολή στην οποία θα ανοίξουµε την εν λόγω διαδι-
κασία και dataMode είναι το είδος της προσπέλασης που µπορούµε να εφαρµόσου-
µε πάνω στα δεδοµένα που συσχετίζονται µε αυτή. Από τα τρία αυτά ορίσµατα το
όνοµα της διαδικασίας είναι υποχρεωτικό, ενώ τα άλλα δύο ορίσµατα είναι προαιρε-
τικά και χρησιµοποιούνται ανάλογα µε τις περιστάσεις. Όσον αφορά τις τιµές που
µπορούν να λάβουν αυτά τα ορίσµατα, αυτές περιλαµβάνονται στον ακόλουθο πίνα-
κα:

Επιτρέπει τη χρήση της αποθηκευµέ-


acViewNormal νης διαδικασίας σε προβολή εκτέλε-
σης
Όρισµα Επιτρέπει τη χρήση της αποθηκευµέ-
viewMode acViewDesign νης διαδικασίας σε προβολή σχεδία-
σης
Μεταφέρει την αποθηκευµένη διαδι-
acViewPreview
κασία σε προεπισκόπηση εκτύπωσης

Επιτρέπει την προσθήκη δεδοµένων


acAdd
µέσα από την τρέχουσα διαδικασία
Επιτρέπει τη µεταβολή των δεδοµέ-
acEdit νων µέσα από την τρέχουσα διαδικα-
Όρισµα
σία
dataMode
Επιτρέπει µόνο την ανάγνωση των
δεδοµένων µέσα από την τρέχουσα
acReadOnly
διαδικασία, ενώ απαγορεύει την τρο-
ποποίησή τους

Στην περίπτωση κατά την οποία δεν καθορίσουµε κάποιες τιµές για τα ορί-
σµατα viewMode και dataMode, χρησιµοποιούνται οι προεπιλεγµένες τιµές ac-
ViewNormal και acEdit αντίστοιχα.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 353

Παράδειγµα χρήσης της µεθόδου OpenStoredProcedure είναι η κλήση της


µε τη µορφή

DoCmd.OpenStoredProcedure “Employees”, acViewNormal, acReadOnly

η οποία επιτρέπει τη χρήση της αποθηκευµένης διαδικασίας «Employees» σε προβο-


λή εκτέλεσης αλλά χωρίς τη δυνατότητα τροποποίησης των δεδοµένων που συσχετί-
ζονται µε αυτή.

Άνοιγµα διαγράµµατος (OpenDiagram Method): χρησιµοποιούµε τη µέθο-


δο OpenDiagram για να ανοίξουµε ένα διάγραµµα της βάσης δεδοµένων µέσα από
την τρέχουσα διαδικασία. Η κλήση της µεθόδου ακολουθεί τη σύνταξη

DoCmd.OpenDiagram diagramName

όπου diagramName είναι το όνοµα του διαγράµµατος που επιθυµούµε να χρησιµο-


ποιήσουµε. Η χρήση αυτής της µεθόδου, δεν απαιτεί τον καθορισµό επιπλέον ορι-
σµάτων.

Άνοιγµα έκθεσης (OpenReport Method): χρησιµοποιούµε τη µέθοδο


OpenReport για να εµφανίσουµε ή να εκτυπώσουµε τα περιεχόµενα µιας αναφοράς
της βάσης δεδοµένων µέσα από την τρέχουσα διαδικασία. Η κλήση αυτής της µεθό-
δου ακολουθεί τη σύνταξη

DoCmd.OpenReport reportName, reportView, filterName, whereCondition

όπου το όρισµα reportName είναι το όνοµα της αναφοράς που θέλουµε να χρησι-
µοποιήσουµε, το όρισµα reportView καθορίζει το είδος της προβολής στην οποία
θα χρησιµοποιήσουµε την εν λόγω αναφορά, ενώ τα ορίσµατα filterName και
whereCondition επιτρέπουν τη χρήση όχι όλων των εγγραφών της αναφοράς, αλλά
µόνο εκείνων που πληρούνε κάποια κριτήρια.

Από τα τέσσερα παραπάνω ορίσµατα, το µόνο που θα πρέπει να καταχωρηθεί


υποχρεωτικά είναι το reportName, που καθορίζει το όνοµα της τρέχουσας αναφο-
ράς. Από την άλλη πλευρά, οι τιµές που µπορεί να λάβει το όρισµα reportView είναι
η acViewDesign που ανοίγει την αναφορά σε προβολή σχεδίασης, η acViewNormal
που επιτρέπει την άµεση εκτύπωση της αναφοράς (η τιµή αυτή είναι και η προεπι-
λεγµένη), και η acViewPreview που ανοίγει την αναφορά σε προεπισκόπηση εκτύ-
πωσης. Τέλος, το όρισµα filterName δέχεται ως τιµή το όνοµα κάποιου ερωτήµατος
(query) της βάσης δεδοµένων που επιθυµούµε να εφαρµόσουµε πάνω στα δεδοµένα
της αναφοράς, ενώ η τιµή που χρησιµοποιούµε για το όρισµα whereCondition είναι
µία έγκυρη πρόταση WHERE της εντολής SELECT της γλώσσας SQL, αλλά χωρίς
την ίδια τη λέξη WHERE (η οποία υπονοείται). Για παράδειγµα προκειµένου να εµ-
φανίσουµε µόνο τις εγγραφές της αναφοράς «Κατάλογος Υπαλλήλων» για τις οποίες
το πεδίο SALARY έχει τιµές µεγαλύτερες από 30000, θα καταχωρήσουµε στο όρι-
σµα αυτό τη συµβολοσειρά SALARY>30000.

Παράδειγµα χρήσης αυτής της µεθόδου, είναι η κλήση της µε τη µορφή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 354

DoCmd.OpenReport “Project Report”, acViewPreview

η οποία ανοίγει την αναφορά «Project Report» σε προεπισκόπηση εκτύπωσης.

Άνοιγµα ερωτήµατος (OpenQuery Method): χρησιµοποιούµε τη µέθοδο


OpenQuery για να ανοίξουµε ένα ερώτηµα σε προβολή σχεδίασης, προβολή φύλ-
λου δεδοµένων ή προεπισκόπησης εκτύπωσης. Η κλήση αυτής της µεθόδου ακο-
λουθεί τη σύνταξη

DoCmd.OpenQuery queryName, queryView, dataMode

όπου το όρισµα queryName είναι το όνοµα του ερωτήµατος που επιθυµούµε να


χρησιµοποιήσουµε, το όρισµα queryView καθορίζει την προβολή στην οποία θα α-
νοίξει το ερώτηµα, ενώ το όνοµα dataView επιτρέπει τον καθορισµό του είδους της
πρόσβασης πάνω στα δεδοµένα που επιστρέφονται από το ερώτηµα.

Από τα παραπάνω ορίσµατα, εκείνο που θα πρέπει να χρησιµοποιήσουµε υπο-


χρεωτικά είναι το όρισµα queryName, ενώ τα υπόλοιπα χρησιµοποιούνται κατά βού-
ληση και όπου αυτό είναι αναγκαίο. Σε πλήρη αναλογία µε προηγούµενες µεθόδους,
το όρισµα queryView δέχεται µία από τις τιµές acViewDesign, acViewNormal και
acViewPreview. Από τις τρεις αυτές τιµές, η πρώτη προκαλεί τη χρήση του ερωτή-
µατος σε προβολή σχεδίασης (design view), η δεύτερη (που είναι και η προεπιλεγ-
µένη) προκαλεί την εκτέλεση του ερωτήµατος (δηλαδή την προβολή του σε µορφή
φύλλου δεδοµένων (datasheet view)), ενώ η τιµή acViewPreview εµφανίζει το ερώ-
τηµα σε προβολή προεπισκόπησης εκτύπωσης. Από την άλλη πλευρά, το όρισµα
dataMode παίρνει µία από τις τιµές acAdd, acEdit (η τιµή αυτή είναι και η προεπι-
λεγµένη) και acReadOnly που επιτρέπουν την προσθήκη εγγραφών, την τροπο-
ποίηση των δεδοµένων του ερωτήµατος, και την εργασία µε αυτά τα δεδοµένα σε
κατάσταση µόνο ανάγνωσης (read only) αντίστοιχα.

Παράδειγµα χρήσης της µεθόδου OpenQuery είναι η κλήση της µε τη µορφή

DoCmd.OpenQuery “Employee List”, acReadOnly

που έχει ως αποτέλεσµα την προεπισκόπηση του ερωτήµατος “Employee List” σε


κατάσταση µόνο ανάγνωσης.

Άνοιγµα Λειτουργικής Μονάδας (OpenModule Method): χρησιµοποιούµε


τη µέθοδο OpenModule για να προσπελάσουµε τις διαδικασίες µιας λειτουργικής
µονάδας µέσα από την τρέχουσα διαδικασία. Αυτή η µέθοδος είναι εντελώς ανάλογη
µε την ενέργεια OpenModule που περιγράψαµε στο κεφάλαιο διαχείρισης µακροε-
ντολών.

Η κλήση της µεθόδου OpenModule χαρακτηρίζεται από µία σύνταξη της


µορφής

DoCmd.OpenModule moduleName, procedureName

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 355

όπου procedureName είναι το όνοµα της διαδικασίας που θέλουµε να χρησιµοποιή-


σουµε, και moduleName το όνοµα της λειτουργικής µονάδας στην οποία ανήκει αυ-
τή η διαδικασία.

Στην περίπτωση κατά την οποία καθορίσουµε όνοµα διαδικασίας αλλά όχι ό-
νοµα λειτουργικής µονάδας, η Microsoft Access θα αναζητήσει την καθορισµένη
διαδικασία στις βασικές λειτουργικές µονάδες της βάσης (standard modules) και
θα ανοίξει εκείνη τη λειτουργική µονάδα στην οποία θα εντοπίσει αυτή τη διαδικασί-
α. Από την άλλη πλευρά, εάν καθορίσουµε όνοµα λειτουργικής µονάδας αλλά όχι και
όνοµα διαδικασίας, η Microsoft Access θα ανοίξει τη λειτουργική µονάδα που έχει
καθορισθεί, και θα µεταφέρει τον έλεγχο της εφαρµογής στο δηλωτικό τµήµα (dec-
laration section) αυτής της µονάδας. Σε κάθε περίπτωση, η χρήση της µεθόδου
OpenModule απαιτεί τον καθορισµό τουλάχιστον ενός από τα ορίσµατα που την
περιγράφουν. Είναι προφανές, πως εάν καθορισθούν και τα δύο αυτά ορίσµατα, η
Microsoft Access θα ανοίξει τη λειτουργική µονάδα που έχει καθορισθεί, και θα ε-
κτελέσει τη διαδικασία της οποίας το όνοµα έχει περαστεί ως τιµή στο όρισµα proce-
dureName.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου OpenModule είναι η κλή-


ση της µε τη µορφή

DoCmd.OpenModule “Utility Functions”, “IsLoaded”

που προκαλεί την εκτέλεση της διαδικασίας IsLoaded που ανήκει στη λειτουργική
µονάδα Utility Functions. Το παράδειγµα αυτό έχει ληφθεί από τα αρχεία τεκµηρίω-
σης της Microsoft Access που αναφέρονται στη µέθοδο OpenModule.

Άνοιγµα πίνακα (OpenTable Method): χρησιµοποιούµε τη µέθοδο


OpenTable για να ανοίξουµε ένα πίνακα της βάσης δεδοµένων σε προβολή σχεδία-
σης, προβολή φύλλου δεδοµένων ή προεπισκόπησης εκτύπωσης. Αυτή η µέθοδος
είναι ανάλογη µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης
µακροεντολών, και η κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.OpenTable tableName, tableView, dataMode

Στη σύνταξη αυτή το όρισµα tableName καθορίζει το όνοµα του πίνακα που
επιθυµούµε να χρησιµοποιήσουµε. Η χρήση του ορίσµατος αυτού είναι υποχρεωτική,
ενώ τα υπόλοιπα δύο ορίσµατα χρησιµοποιούνται κατά βούληση και ανάλογα µε τις
περιστάσεις. Όσον αφορά τις τιµές που µπορούν να λάβουν τα ορίσµατα αυτά, ισχύ-
ουν τα όσα έχουν αναφερθεί στις προηγούµενες παραγράφους. Έτσι το όρισµα ta-
bleView µπορεί να λάβει µία από τις τιµές acViewDesign, acViewNormal και ac-
ViewPreview ενώ το όρισµα dataMode µπορεί να λάβει κάποια από τις τιµές acAdd,
acEdit και acReadOnly. Εάν δεν αποδώσουµε τιµή στα δύο αυτά ορίσµατα, χρησι-
µοποιούνται οι προεπιλεγµένες τιµές acViewNormal και acEdit αντίστοιχα.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου OpenTable είναι η κλήση της µε


τη µορφή

DoCmd.OpenTable “EMPLOYEE”, acViewDesign

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 356

η οποία ανοίγει τον πίνακα EMPLOYEE σε προβολή σχεδίασης.

Άνοιγµα προβολής (OpenView Method): χρησιµοποιούµε τη µέθοδο


OpenView, για να ανοίξουµε µία προβολή (view) σε προβολή σχεδίασης, προβολή
φύλλου δεδοµένων ή προεπισκόπηση εκτύπωσης. Η κλήση αυτής της µεθόδου ακο-
λουθεί τη σύνταξη

DoCmd.OpenView viewName, viewMode, dataMode

Στην παραπάνω πρόταση το όρισµα viewName καθορίζει το όνοµα της προβολής


που θέλουµε να χρησιµοποιήσουµε ενώ τα ορίσµατα viewMode και dataMode, σε
πλήρη αναλογία µε την προηγούµενη περίπτωση, καθορίζουν το είδος της προβολής
που θέλουµε να χρησιµοποιήσουµε, και το είδος της πρόσβασης επί των δεδοµέ-
νων που συσχετίζονται µε την καθορισµένη προβολή. Το σύνολο τιµών και τρόπος
χρήσης αυτών των ορισµάτων είναι παρόµοια µε εκείνα που παρουσιάσαµε στην
προηγούµενη µέθοδο (OpenTable) και δεν κρίνεται σκόπιµο να παρουσιαστούν εκ
νέου. Παράδειγµα χρήσης της µεθόδου OpenView είναι η κλήση της µε τη µορφή

DoCmd.OpenView “Departments”, acViewNormal, acReadOnly

που επιτρέπει την προεπισκόπηση της προβολής Departments σε προβολή φύλλου


δεδοµένων και σε κατάσταση µόνο ανάγνωσης.

Άνοιγµα σελίδας πρόσβασης δεδοµένων (OpenDataAccessPage Method):


χρησιµοποιούµε τη µέθοδο OpenDataAccessPage για να προσπελάσουµε µία σελίδα
πρόσβαση δεδοµένων (data access page) µέσα από την τρέχουσα διαδικασία. Η µέ-
θοδος αυτή είναι παρόµοια µε την οµώνυµη ενέργεια που παρουσιάσαµε στο κεφά-
λαιο διαχείρισης των µακροεντολών, και η κλήση της χαρακτηρίζεται από µία σύντα-
ξη της µορφής

DoCmd.OpenDataAccessPage dataAccessPageName, dataAccessPageView

όπου το όρισµα dataAccessPageName καθορίζει το όνοµα της σελίδας πρόσβασης


δεδοµένων που θέλουµε να χρησιµοποιήσουµε, ενώ το όρισµα dataAccessPageView
καθορίζει την προβολή στην οποία επιθυµούµε να ανοίξουµε τη συγκεκριµένη σελί-
δα. Υπάρχουν δύο τιµές που µπορεί να λάβει αυτή η ιδιότητα, εκ των οποίων η
acDataPageBrowse (που είναι και η προεπιλεγµένη τιµή) επιτρέπει την προεπισκό-
πηση της σελίδας πρόσβασης δεδοµένων σε προβολή περιήγησης, ενώ η τιµή
acDataPageDesign επιτρέπει την προεπισκόπηση της σελίδας πρόσβασης δεδοµένων
σε προβολή σχεδίασης.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου OpenDataAccessPage εί-


ναι η κλήση της µε τη µορφή

DoCmd.OpenDataAccessPage “Employees”, acDataPageBrowse

η οποία ανοίγει τη σελίδα πρόσβασης δεδοµένων που φέρει το όνοµα Employees σε


προβολή περιήγησης.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 357

Άνοιγµα φόρµας (OpenForm Method): χρησιµοποιούµε τη µέθοδο Open-


Form για να ανοίξουµε κάποια από τις φόρµες της τρέχουσας βάσης δεδοµένων. Η
µέθοδος αυτή είναι ανάλογη της ενέργειας OpenForm που περιγράψαµε στο κεφά-
λαιο διαχείρισης µακροεντολών, και η κλήση της χαρακτηρίζεται από µια σύνταξη
της µορφής

DoCmd.OpenForm formName, formView, filterName, whereCondition,


dataMode, windowMode, openArgs

Στην παραπάνω σύνταξη το µοναδικό όρισµα που πρέπει να καταχωρηθεί υ-


ποχρεωτικά, είναι το formName, που επιτρέπει τον καθορισµό του ονόµατος της
φόρµας που επιθυµούµε να χρησιµοποιήσουµε. Από την άλλη πλευρά, το όρισµα
formView καθορίζει το είδος της προβολής στην οποία θα ανοίξουµε την εν λόγω
φόρµα. Η προεπιλεγµένη τιµή για αυτό το όρισµα, είναι η acNormal που επιτρέπει τη
χρήση της φόρµας στην οµώνυµη προβολή, ενώ µπορούν να χρησιµοποιηθούν ακόµη
οι τιµές acDesign, acFormDS και acPreview που επιτρέπουν τη χρήση της φόρµας
σε προβολή σχεδίασης, σε προβολή φύλλου δεδοµένων και σε προεπισκόπηση
εκτύπωσης.

Τα υπόλοιπα πέντε ορίσµατα που µπορούν να χρησιµοποιηθούν στη σύνταξη


αυτής της µεθόδου, είναι παρόµοια µε εκείνα που χρησιµοποιούµε στην ενέργεια
OpenForm που παρουσιάστηκε στο προηγούµενο κεφάλαιο. Πιο συγκεκριµένα, το
όρισµα filterName δέχεται ως τιµή το όνοµα κάποιου ερωτήµατος που θα χρησι-
µοποιηθεί για να περιορίσει τις εγγραφές της φόρµας, εµφανίζοντας µόνο εκείνες
που πληρούν κάποιες συγκεκριµένες ιδιότητες, ενώ το όρισµα whereCondition δέχε-
ται ως τιµή µια συµβολοσειρά που περιέχει µία έγκυρη πρόταση WHERE της εντο-
λής SELECT της γλώσσας SQL, χωρίς ωστόσο την ίδια τη λέξη WHERE. Το όρι-
σµα dataMode καθορίζει το είδος της προσπέλασης του χρήστη πάνω στα δεδο-
µένα που συσχετίζονται µε την τρέχουσα φόρµα. Η προεπιλεγµένη τιµή για αυτό το
όρισµα είναι η acFormPropertySettings. Εάν χρησιµοποιηθεί αυτή η τιµή, τότε το
είδος της προσπέλασης επί των δεδοµένων της φόρµας, είναι εκείνο που έχει καθορι-
σθεί κατά τη σχεδίαση της φόρµας και χρησιµοποιώντας το φύλλο ιδιοτήτων
της. Οι άλλες τιµές που µπορεί να λάβει αυτό το όρισµα, είναι οι acFormAdd,
acFormEdit και acFormReadOnly που επιτρέπουν την προσθήκη νέων δεδοµέ-
νων, τη µεταβολή των δεδοµένων που έχουν ήδη καταχωρηθεί και την προσπέ-
λαση των δεδοµένων σε συνθήκες µόνο ανάγνωσης, αντίστοιχα. Το όρισµα win-
dowMode καθορίζει τη µορφή του παραθύρου της φόρµας, το οποίο µπορεί να εµ-
φανίζεται ως πλαίσιο διαλόγου (για την τιµή acDialog), ως εικονίδιο (για την τιµή
acIcon), ή ακόµη και να µην εµφανίζεται καθόλου (για την τιµή acHidden). Η προ-
επιλεγµένη τιµή για αυτό το όρισµα είναι η acWindowNormal που εµφανίζει τη φόρ-
µα στην κανονική της µορφή, έτσι όπως αυτή έχει καθορισθεί κατά το στάδιο της
σχεδίασής της. Τέλος το όρισµα openArgs χρησιµοποιείται για τον καθορισµό επι-
πρόσθετων παραµέτρων που σε ορισµένες περιπτώσεις είναι αναγκαίο να καθορι-
σθούνε για τη διαδικασία προβολής της τρέχουσας φόρµας. Είναι σηµαντικό να ανα-
φερθεί πως αυτό το όρισµα υπάρχει µόνο στη µέθοδο OpenForm και όχι στην οµώ-
νυµη ενέργεια που χρησιµοποιείται κατά το στάδιο δηµιουργίας µακροεντολών.

Τυπικό παράδειγµα χρήσης της µεθόδου OpenForm είναι η κλήση της µε τη


µορφή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 358

DoCmd.OpenForm “Department”, acFormDS, , , acFormReadOnly, acDialog

που επιτρέπει την προεπισκόπηση της φόρµας «Department» σε προβολή φύλλου


δεδοµένων, σε κατάσταση µόνο ανάγνωσης και σε µορφή πλαισίου διαλόγου.

Αντήχηση (Echo Method): χρησιµοποιούµε τη µέθοδο Echo για να καθορί-


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

DoCmd. Echo echoOn, statusBarText

όπου το όρισµα echoOn παίρνει µία από τις τιµές True ή False (ανάλογα µε το εάν
θα χρησιµοποιηθεί η αντήχηση ή όχι), ενώ το όρισµα statusBarText παίρνει ως τιµή
µια συµβολοσειρά, το περιεχόµενο της οποίας είναι το κείµενο που θα εµφανισθεί
στη γραµµή κατάστασης της εφαρµογής (status bar), στην περίπτωση κατά την
οποία λάβει χώρα απενεργοποίηση της αντήχησης. Χαρακτηριστικό παράδειγµα χρή-
σης αυτής της µεθόδου, είναι η κλήση της µε τη µορφή

DoCmd.Echo False, “Visual Basic Code is Executing”

που απενεργοποιεί την αντήχηση και εµφανίζει το προαναφερόµενο µήνυµα κατά τη


διάρκεια εκτέλεσης της διαδικασίας που περιέχει αυτή τη µέθοδο. Το παράδειγµα αυ-
τό αναφέρεται στο αρχείο βοήθειας της Microsoft Access που περιγράφει τη χρήση
αυτής της µεθόδου.

Αντιγραφή αντικειµένου (CopyObject Method): χρησιµοποιούµε τη µέθοδο


CopyObject για να αντιγράψουµε ένα αντικείµενο µιας βάσης δεδοµένων της Micro-
soft Access σε κάποια άλλη βάση. Η µέθοδος αυτή είναι εντελώς ανάλογη µε την
οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών,
και η χρήση της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.CopyObject destinationDataBase, newName, sourceObjectType,


sourceObjectName

Στην παραπάνω σύνταξη, το όρισµα destinationDataBase επιτρέπει τον κα-


θορισµό του ονόµατος της βάσης δεδοµένων στην οποία επιθυµούµε να αντιγράψου-
µε το εν λόγω αντικείµενο, και δέχεται ως όρισµα µία συµβολοσειρά που περιέχει το
όνοµα και τη διαδροµή της βάσης προορισµού. Εάν επιθυµούµε να αντιγράψουµε
το αντικείµενο στην τρέχουσα βάση, θα πρέπει να µην καταχωρήσουµε τιµή σε αυτό
το όρισµα. Από την άλλη πλευρά, το όρισµα newName µας επιτρέπει να καθορίσου-
µε το νέο όνοµα του αντικειµένου που θέλουµε να αντιγράψουµε. Το όρισµα αυτό
χρησιµοποιείται εφόσον θέλουµε να αποθηκεύσουµε το αντίγραφο του αντικειµένου
µε διαφορετικό όνοµα, ενώ στην αντίθετη περίπτωση, η παράµετρος αυτή δεν
χρησιµοποιείται.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 359

Το επόµενο όρισµα που περιλαµβάνεται στη σύνταξη αυτής της µεθόδου, φέ-
ρει το όνοµα sourceObjectType και επιτρέπει τον καθορισµό του τύπου του αντι-
κειµένου, επί του οποίου εφαρµόζεται αυτή η µέθοδος. Σε πλήρη αναλογία µε την
ενέργεια CopyObject, αυτό το αντικείµενο µπορεί να ανήκει σε οποιονδήποτε έγκυ-
ρο τύπο αντικειµένου της Microsoft Access. Ο πίνακας που ακολουθεί παρουσιάζει
τις τιµές που µπορεί να λάβει η παράµετρος sourceObjectType και ο τύπος αντικει-
µένου που αντιστοιχεί σε κάθε µία από αυτές.

SourceObjectType Value Τύπος αντικειµένου

acDataAccessPage Σελίδα πρόσβασης δεδοµένων


acDiagram ∆ιάγραµµα της βάσης δεδοµένων
acForm Φόρµα
acMacro Μακροεντολή
acModule Λειτουργική µονάδα
acQuery Ερώτηµα
acReport Αναφορά ή έκθεση
acServerView Προβολή διακοµιστή
acStoredProcedure Αποθηκευµένη διαδικασία
acTable Πίνακας

Τέλος το όρισµα sourceObjectName δέχεται ως τιµή µια συµβολοσειρά που


περιέχει το όνοµα του αντικειµένου που επιθυµούµε να αντιγράψουµε. Εάν δεν
καθορίσουµε κάποιο τύπο και κάποιο όνοµα δια της χρήσης των δύο τελευταίων ορι-
σµάτων, λαµβάνει χώρα αντιγραφή του τρέχοντος αντικειµένου, που βρίσκεται επι-
λεγµένο στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων. Στην περίπτωση
αυτή ως προεπιλεγµένη τιµή για τον τύπο αντικειµένου, χρησιµοποιείται η τιµή acDe-
fault..

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου CopyObject είναι η κλήση


της µε τη µορφή

DoCmd.CopyObject “EmployeeBackUp”, acTable, “Employees”

που επιτρέπει τη δηµιουργία αντιγράφου του πίνακα Employees στην τρέχουσα βάση
δεδοµένων. Χρησιµοποιώντας ανάλογες εντολές, µπορούµε να δηµιουργήσουµε αντί-
γραφα ασφαλείας, για όλα τα αντικείµενα της βάσης δεδοµένων.

Αποθήκευση (Save Method): χρησιµοποιούµε τη µέθοδο Save για να απο-


θηκεύσουµε κάποιο από τα αντικείµενα της τρέχουσας βάσης δεδοµένων. Εάν δεν
καθορισθεί κάποιο τέτοιο αντικείµενο, η µέθοδος αποθηκεύει το ενεργό αντικείµενο
της βάσης δεδοµένων, δηλαδή το αντικείµενο που έχει επιλεγεί χρησιµοποιώντας τη
µέθοδο SelectObject που θα περιγραφεί στη συνέχεια. Η κλήση της µεθόδου Save
ακολουθεί τη σύνταξη

DoCmd.Save objectType, objectName

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 360

όπου τα ορίσµατα objectType και objectName επιτρέπουν τον καθορισµό του τύπου
και του ονόµατος του αντικειµένου που θέλουµε να αποθηκεύσουµε. Σύµφωνα µε τα
όσα αναφέραµε σε προηγούµενη παράγραφο, οι επιτρεπτές τιµές που µπορεί να λά-
βει το όρισµα objectType είναι οι acDataAccessPage (για σελίδα πρόσβασης δεδο-
µένων), acDiagram (για διάγραµµα της βάσης δεδοµένων), acForm (για φόρµα),
acMacro (για µακροεντολή), acModule (για λειτουργική µονάδα), acQuery (για ε-
ρώτηµα), acReport (για αναφορά), acServerView (για προβολή διακοµιστή), ac-
StoredProcedure (για αποθηκευµένη διαδικασία) και acTable (για πίνακα). Εάν δεν
καθορισθεί κάποιος τύπος δεδοµένων χρησιµοποιείται η προεπιλεγµένη τιµή acDe-
fault. Στην περίπτωση αυτή η Microsoft Access αποθηκεύει το τρέχον αντικείµενο
της βάσης δεδοµένων χρησιµοποιώντας το όνοµα που έχει καθορισθεί δια της χρή-
σης της παραµέτρου objectName.

Παράδειγµα χρήσης της µεθόδου Save, είναι η κλήση της µε τη µορφή

DoCmd.Save acTable, Employees

που αποθηκεύει τον πίνακα «Employees» της τρέχουσας βάσης δεδοµένων.

Αποκατάσταση (Restore Method): χρησιµοποιούµε τη µέθοδο Restore για


να επαναφέρουµε το παράθυρο του ενεργού αντικειµένου της βάσης στο φυσικό του
µέγεθος, εφ όσον αυτό είναι ελαχιστοποιηµένο ή µεγιστοποιηµένο. Η µέθοδος καλεί-
ται χωρίς ορίσµατα, και η σύνταξή της έχει τη µορφή DoCmd.Restore.

Αποστολή αντικειµένου (SendObject Method): χρησιµοποιούµε τη µέθοδο


SendObject για να αποστείλουµε επιλεγµένα αντικείµενα της βάσης δεδοµένων σε
κάποιο χρήστη, δια της χρήσης της υπηρεσίας του ηλεκτρονικού ταχυδροµείου. Η
κλήση αυτής της µεθόδου ακολουθεί τη σύνταξη

DoCmd.SendObject objectType, objectName, outputFormat, to, cc, bcc, subject,


messageText, editMessage, templateFile

Στη σύνταξη αυτή, τα ορίσµατα objectType και objectName χρησιµοποιού-


νται για τον καθορισµό του τύπου και του ονόµατος του αντικειµένου που θέλουµε να
αποστείλουµε. Πιο συγκεκριµένα, το όρισµα objectType, µπορεί να λάβει µία από τις
τιµές acSendDataAccessPage (για αποστολή σελίδας πρόσβασης δεδοµένων),
acSendForm (για αποστολή φόρµας), acSendModule (για αποστολή λειτουργικής
µονάδας), acSendQuery (για αποστολή ερωτήµατος), acSendReport (για αποστολή
αναφοράς) και acSendTable (για αποστολή πίνακα της βάσης δεδοµένων). Όσον α-
φορά τα υπόλοιπα ορίσµατα που χρησιµοποιούνται κατά τη χρήση αυτής της µεθό-
δου, αυτά σε γενικές γραµµές είναι τα ακόλουθα:

outputFormat: το όρισµα αυτό επιτρέπει τον καθορισµό της µορφοποίησης


µε την οποία θα σταλεί το αντικείµενο της βάσης στο χρήστη – παραλήπτη. Οι
επιτρεπτές τιµές που µπορεί να λάβει αυτή η παράµετρος, είναι acFormatDAP (για
µορφή σελίδας πρόσβασης δεδοµένων), acFormatHTML (για µορφή σελίδας
HTML), acFormatRTF (για µορφή εµπλουτισµένου κειµένου (Rich Text Format,
RTF)), acFormatTXT (για µορφή απλού κειµένου) και acFormatXLS (για µορφή
φύλλου δεδοµένων του Microsoft Excel). Στην περίπτωση κατά την οποία δεν καθο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 361

ρίσουµε τιµή για αυτό το όρισµα, η Microsoft Access θα µας ζητήσει αυτή την πλη-
ροφορία αµέσως πριν την εκτέλεση αυτής της διαδικασίας.

to: η παράµετρος αυτή επιτρέπει τον καθορισµό της ηλεκτρονικής διεύθυν-


σης του παραλήπτη στον οποίο επιθυµούµε να αποστείλουµε το επιλεγµένο αντικεί-
µενο της βάσης. Εάν το αντικείµενο πρόκειται να αποσταλεί σε περισσότερους από
έναν παραλήπτες, µπορούµε να τοποθετήσουµε τις ηλεκτρονικές µας διευθύνσεις τη
µία δίπλα στην άλλη και χωρισµένα µε το χαρακτήρα «;». Εναλλακτικά µπορούµε
αντί για τον εν λόγω χαρακτήρα, να χρησιµοποιήσουµε το χαρακτήρα διαχωρισµού
στοιχείων λίστας που έχουµε καθορίσει χρησιµοποιώντας το εικονίδιο «Regional
Settings» του Πίνακα Ελέγχου (Control Panel) του λειτουργικού συστήµατος.

cc και bcc: τα ορίσµατα αυτά δέχονται ως τιµή τις ηλεκτρονικές διευθύνσεις


ενός ή περισσοτέρων παραληπτών στους οποίους επιθυµούµε να κοινοποιήσουµε το
µήνυµα ηλεκτρονικού ταχυδροµείου που περιέχει το επιλεγµένο αντικείµενο της βά-
σης. Στα πεδία αυτά µπορούµε να καταχωρήσουµε περισσότερες από µία διευθύν-
σεις, χρησιµοποιώντας τους χαρακτήρες διαχωρισµού που παρουσιάσαµε στην προη-
γούµενη παράγραφο.

subject: το όρισµα αυτό δέχεται ως τιµή µια συµβολοσειρά που περιέχει το


θέµα του µηνύµατος που περιέχει το επιλεγµένο αντικείµενο της βάσης. Στην περί-
πτωση κατά την οποία το όρισµα αυτό δεν χρησιµοποιηθεί, λαµβάνει χώρα αποστολή
του µηνύµατος, χωρίς να έχει καθορισθεί κάποιο θέµα.

messageText: η χρήση του ορίσµατος messageText επιτρέπει την αποστολή


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

editMessage: αυτό το όρισµα χρησιµοποιείται προκειµένου να καθορίσουµε


εάν είναι δυνατή η επεξεργασία του µηνύµατος αµέσως πριν τη διαδικασία απο-
στολής του, ή εάν το µήνυµα θα σταλεί άµεσα χωρίς να πραγµατοποιηθούν κά-
ποιες διορθώσεις σε αυτό. Εάν το όρισµα αυτό λάβει την τιµή True (που είναι και η
προεπιλεγµένη τιµή), θα λάβει χώρα εκκίνηση του προεπιλεγµένου προγράµµατος
διαχείρισης ηλεκτρονικής αλληλογραφίας (π.χ. του Microsoft Outlook), δια της
χρήσης του οποίου µπορούµε να τροποποιήσουµε το µήνυµα αµέσως πριν την απο-
στολή του. Στην αντίθετη περίπτωση το µήνυµα θα σταλεί άµεσα στον προορισµό
του χωρίς καµία περαιτέρω διόρθωση.

templateFile: σε περίπτωση κατά την οποία το επιλεγµένο αντικείµενο θα


αποσταλεί µε τη µορφή ιστοσελίδας (HTML format), µπορούµε να χρησιµοποιή-
σουµε αυτό το όρισµα για να καθορίσουµε το όνοµα και τη διαδροµή κάποιου αρ-
χείου προτύπου (template file) δια της χρήσης του οποίου θα λάβει χώρα η διαµόρ-
φωση του περιεχοµένου της ιστοσελίδας.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου SendObject είναι η κλήση


της µε τη µορφή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 362

DoCmd.SendObject acSendReport, “Sales Report”, acFormatHTML,


amarg@uom.gr, , , “November’s Sales Report”, , False

που προκαλεί την άµεση αποστολή της αναφοράς «Sales Reports» σε µορφή HTML
στον παραλήπτη amarg@uom.gr µε θέµα µηνύµατος «November’s Sales Report».

∆ιαγραφή αντικειµένου (DeleteObject Method): χρησιµοποιούµε τη µέθοδο


DeleteObject για να διαγράψουµε ένα αντικείµενο από τη βάση δεδοµένων της ε-
φαρµογής. Η µέθοδος αυτή είναι εντελώς ανάλογη µε την ενέργεια DeleteObject που
περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και χαρακτηρίζεται από
µια σύνταξη της µορφής

DoCmd.DeleteObject objectType, objectName

όπου objectType είναι ο τύπος του αντικειµένου που επιθυµούµε να διαγράψουµε,


και objectName το όνοµα αυτού του αντικειµένου. Σε πλήρη αναλογία µε παρόµοιες
µεθόδους που παρουσιάσαµε στις προηγούµενες παραγράφους, ο τύπος του αντικει-
µένου καθορίζεται από τις τιµές acDataAccessPage (σελίδα πρόσβασης δεδοµένων),
acDiagram (διάγραµµα της βάσης δεδοµένων), acForm (φόρµα), acMacro (µακροε-
ντολή), acModule (λειτουργική µονάδα), acQuery (ερώτηµα), acReport (αναφορά ή
έκθεση), acServerView (προβολή διακοµιστή), acStoredProcedure (αποθηκευµένη
διαδικασία) και acTable (πίνακας). Εάν λάβει χώρα κλήση αυτής της µεθόδου χωρίς
να καθορισθεί ούτε τύπος αλλά και ούτε όνοµα αντικειµένου, τότε η µέθοδος αυτή θα
εφαρµοσθεί στο ενεργό αντικείµενο της βάσης, δηλαδή στο αντικείµενο που είναι
επιλεγµένο στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου DeleteObject είναι η κλήση


της µε τη µορφή

DoCmd.DeleteObject acTable, “EMPLOYEE”

η οποία διαγράφει τον πίνακα «EMPLOYEE» από τη βάση δεδοµένων της εφαρµο-
γής.

Εκτέλεση εντολής SQL (RunSQL Method): χρησιµοποιούµε τη µέθοδο


RunSQL για να εκτελέσουµε µια εντολή της γλώσσας SQL µέσα από την τρέχουσα
διαδικασία. Ας σηµειωθεί πως η µέθοδος αυτή χρησιµοποιείται µόνο για την εκτέλε-
ση ερωτηµάτων ενέργειας (action queries) ή ερωτηµάτων ορισµού δεδοµένων
(data definition queries) και όχι για την εκτέλεση ερωτηµάτων επιλογής (select
queries) τα οποία εκτελούνται δια της χρήσης της µεθόδου OpenQuery που παρου-
σιάσαµε σε προηγούµενη ενότητα. Η κλήση της µεθόδου RunSQL χαρακτηρίζεται
από µία σύνταξη της µορφής

DoCmd.RunSQL sqlStatement, useTransaction

όπου το όρισµα sqlStatement περιέχει τον κώδικα SQL ενός ερωτήµατος ενέργειας ή
ορισµού δεδοµένων (τα ερωτήµατα αυτού του είδους περιλαµβάνουν ενέργειες όπως
είναι η CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX,
DROP INDEX, INSERT INTO, DELETE, UPDATE κ.λ.π), ενώ στο όρισµα use-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 363

Transaction αποδίδεται µια από τις τιµές True ή False ανάλογα µε το εάν το query
που εκτελείται δια της χρήσης αυτής της µεθόδου, πρόκειται να χρησιµοποιηθεί ή όχι
σε µία διαδικασία συναλλαγής (transaction). Αυτή η διαδικασία ορίζεται ως µία
σειρά από µεταβολές που εφαρµόζονται πάνω στα δεδοµένα και στο σχήµα µιας
βάσης δεδοµένων και χαρακτηρίζεται από τη χρήση των δεσµευµένων λέξεων Be-
ginTrans και CommitTrans. Η προεπιλεγµένη τιµή για αυτή την ιδιότητα είναι η
τιµή True.

Παράδειγµα χρήσης της µεθόδου RunSQL είναι η κλήση της µε τη µορφή

DoCmd.RunSQL “UPDATE EMPLOYEE” & _


SET SALARY=50000 WHERE SSN=”123456789”

η οποία τροποποιεί τα περιεχόµενα του πίνακα EMPLOYEE, και πιο συγκεκριµένα


αποδίδει στο πεδίο SALARY της εγγραφής µε κωδικό 123456789 την τιµή 50000.

Εκτέλεση µακροεντολής (RunMacro Method): χρησιµοποιούµε τη µέθοδο


RunMacro προκειµένου να εκτελέσουµε µια µακροεντολή µέσα από την τρέχουσα
διαδικασία. Αυτή η µέθοδος είναι εντελώς ανάλογη µε την ενέργεια RunMacro που
περιγράψαµε στο κεφάλαιο διαχείρισης µακροεντολών, και η κλήση της χαρακτηρί-
ζεται από µία σύνταξη της µορφής

DoCmd.RunMacro macroName, repeatCount, repeatExpression

Στην παραπάνω σύνταξη, το όρισµα macroName είναι υποχρεωτικό, και επι-


τρέπει τον καθορισµό του ονόµατος της µακροεντολής που επιθυµούµε να εκτελέ-
σουµε. Αντίθετα, τα ορίσµατα repeatCount και repeatExpression είναι προαιρετικά,
και χρησιµοποιούνται προκειµένου να καθορίσουµε τον αριθµό επαναλήψεων εκτέ-
λεσης αυτής της µακροεντολής. Εάν δεν χρησιµοποιήσουµε αυτά τα ορίσµατα, η
µακροεντολή θα εκτελεστεί µόνο µία φορά. Εάν καταχωρήσουµε µια ακέραια τιµή Ν
στο όρισµα repeatCount, τότε θα λάβει χώρα εκτέλεση της µακροεντολής Ν φορές.
Τέλος η παράµετρος repeatExpression δέχεται ως όρισµα µία συµβολοσειρά που
περιέχει µία λογική έκφραση, δηλαδή µία έκφραση που µπορεί να λάβει µία από τις
τιµές True ή False. Η τιµή αυτής της έκφρασης υπολογίζεται σε κάθε κύκλο εκτέλε-
σης της µακροεντολής, και εφόσον είναι αληθής (True), η µακροεντολή θα εκτελε-
στεί και στην επόµενη επανάληψη, ενώ στην αντίθετη περίπτωση θα λάβει χώρα τερ-
µατισµός της εκτέλεσής της.

Τυπικό παράδειγµα χρήσης της µεθόδου RunMacro είναι η κλήση της µε τη


µορφή

DoCmd.RunMacro “Print Employee List”, 3

η οποία προκαλεί την εκτύπωση της λίστας των υπαλλήλων της εταιρείας σε τρία
αντίτυπα. Η εκτύπωση αυτής της λίστας γίνεται από τη µακροεντολή «Print Em-
ployee List», η οποία στην προκειµένη περίπτωση εκτελείται τρεις φορές.

Εκτύπωση (PrintOut Method): χρησιµοποιούµε τη µέθοδο PrintOut για να


εκτυπώσουµε τα περιεχόµενα του ενεργού αντικειµένου της τρέχουσας βάσης δεδο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 364

µένων. Αυτή η µέθοδος είναι εντελώς ανάλογη µε την ενέργεια PrintOut που περι-
γράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση της ακολουθεί
µία σύνταξη της µορφής

DoCmd.PrintOut printRange, pageFrom, pageTo, printQuality,


copies, collateCopies

Στην παραπάνω σύνταξη, το όρισµα printRange επιτρέπει τον καθορισµό


της περιοχής σελίδων που επιθυµούµε να εκτυπώσουµε. Η παράµετρος αυτή παίρ-
νει µία από τις τιµές acPrintAll που επιτρέπει την εκτύπωση του συνόλου των σελί-
δων (η τιµή αυτή είναι η προεπιλεγµένη), acSelection που επιτρέπει την εκτύπωση
µόνο του τµήµατος του αντικειµένου που έχει επιλεγεί (µε το πληκτρολόγιο ή µε
το ποντίκι) και acPages που επιτρέπει την εκτύπωση συγκεκριµένης περιοχής σελί-
δων. Στην τελευταία περίπτωση µπορούµε να καθορίσουµε την αρχική και την τελι-
κή σελίδα εκτύπωσης, χρησιµοποιώντας τα δύο επόµενα ορίσµατα, που φέρουν τα
ονόµατα pageFrom και pageTo. Εάν για παράδειγµα επιθυµούµε να εκτυπώσουµε
τις σελίδες 5,6,7 και 8 µιας αναφοράς, θα αποδώσουµε σε αυτές τις δύο παραµέτρους
τις τιµές pageFrom=5 και pageTo=8

Από την άλλη πλευρά, το όρισµα printQuality, επιτρέπει τον καθορισµό της
ποιότητας εκτύπωσης. Οι τιµές που µπορεί να πάρει αυτό το όρισµα είναι acDraft
(πρόχειρη εκτύπωση), acLow (εκτύπωση χαµηλής ποιότητας), acMedium (εκτύπω-
σης µεσαίας ποιότητας) και acHigh (εκτύπωση υψηλής ποιότητας). Η τελευταία τιµή
είναι και η προεπιλεγµένη τιµή για την παράµετρο printQuality. Εάν επιθυµούµε να
εκτυπώσουµε τα περιεχόµενα του επιλεγµένου αντικειµένου περισσότερες από µία
φορές, καθορίζουµε τον αριθµό των αντιτύπων δια της χρήσης της παραµέτρου cop-
ies. Τέλος η παράµετρος collateCopies δέχεται µία από τις τιµές True ή False ανά-
λογα µε τον εάν επιθυµούµε ή όχι να χρησιµοποιήσουµε το χαρακτηριστικό της συρ-
ραφής αντιτύπων. Περισσότερες λεπτοµέρειες σχετικά µε αυτό το χαρακτηριστικό
εκτύπωσης, µπορούν να βρεθούνε στην τεκµηρίωση της ενέργειας PrintOut όπως
αυτή παρουσιάζεται στο κεφάλαιο διαχείρισης των µακροεντολών.

Παράδειγµα χρήσης της µεθόδου PrintOut είναι η κλήση της µε τη µορφή

DoCmd.PrintOut acPages, 1, 10, acDraft, 5, True

που έχει ως αποτέλεσµα την πρόχειρη εκτύπωση 5 αντιτύπων των σελίδων 1 έως
10 του επιλεγµένου αντικειµένου χρησιµοποιώντας το χαρακτηριστικό της συρρα-
φής αντιτύπων.

Ελαχιστοποίηση (Minimize Method): χρησιµοποιούµε τη µέθοδο Minimize


για να ελαχιστοποιήσουµε το ενεργό πλαίσιο διαλόγου. Μετά την ελαχιστοποίηση,
αυτό το πλαίσιο εµφανίζεται ως µία µικρή γραµµή τίτλου (title bar) στο κάτω µέρος
της οθόνης. Η µέθοδος αυτή καλείται χωρίς ορίσµατα, και η κλήση της ακολουθεί τη
σύνταξη DoCmd.Minimize.

Εµφάνιση γραµµής εργαλείων (ShowToolbar Method): χρησιµοποιούµε τη


µέθοδο ShowToolbar για να εµφανίσουµε ή να αποκρύψουµε µια γραµµή εργαλείων
από την οθόνη του υπολογιστή µας. Αυτή η µέθοδος είναι εντελώς ανάλογη µε την

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 365

ενέργεια ShowToolbar που περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντο-


λών, και η κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd. ShowToolbar toolbarName, show

Στην παραπάνω σύνταξη, το όρισµα toolbarName δέχεται ως τιµή µια συµ-


βολοσειρά που περιέχει το όνοµα της γραµµής εργαλείων που επιθυµούµε να εµφα-
νίσουµε ή να αποκρύψουµε. Από την άλλη πλευρά, το όρισµα show επιτρέπει τον
καθορισµό της διαδικασίας που πρόκειται να εφαρµοσθεί πάνω στη γραµµή ερ-
γαλείων. Οι τιµές που µπορεί να λάβει αυτή η παράµετρος, είναι οι acToolbarYes
που προκαλεί την εµφάνιση της γραµµής εργαλείων (η τιµή αυτή είναι και η προεπι-
λεγµένη), acToolbarNo (που προκαλεί την απόκρυψη της γραµµής εργαλείων) και
acToolbarWhenApprop που έχει ως αποτέλεσµα την εµφάνιση της γραµµής εργα-
λείων αλλά µόνο όπου αυτό είναι αναγκαίο.

Παράδειγµα χρήσης της µεθόδου ShowToolbar, είναι η κλήση της µε τη µορφή

DoCmd.ShowToolbar “EmployeeManagement”, acToolbarYes

που προκαλεί την εµφάνιση της γραµµής εργαλείων που φέρει το όνοµα Employee-
Management.

Ενηµέρωση αντικειµένου (RepaintObject Method): χρησιµοποιούµε τη µέ-


θοδο RepaintObject για να επανασχεδιάσουµε την περιοχή της οθόνης που κατα-
λαµβάνεται από το πλαίσιο διαλόγου κάποιου από τα αντικείµενα της βάσης δεδοµέ-
νων, στην περίπτωση κατά την οποία λάβει χώρα µεταβολή του µεγέθους του (µεγι-
στοποίηση, ελαχιστοποίηση ή επαναφορά). Η κλήση αυτής της µεθόδου ακολουθεί
τη σύνταξη

DoCmd.RepaintObject objectType, objectName

όπου objectName είναι το όνοµα του αντικειµένου και objectType ο τύπος του. Σε
πλήρη αναλογία µε παρόµοιες µεθόδους οι οποίες εφαρµόζονται πάνω στα αντικείµε-
να της βάσης δεδοµένων, οι τιµές που µπορεί να πάρει το όρισµα objectType είναι
acDataAccessPage (σελίδα πρόσβασης δεδοµένων), acDiagram (διάγραµµα της βά-
σης δεδοµένων), acForm (φόρµα), acMacro (µακροεντολή), acModule (λειτουργική
µονάδα), acQuery (ερώτηµα), acReport (αναφορά ή έκθεση), acServerView (προ-
βολή διακοµιστή), acStoredProcedure (αποθηκευµένη διαδικασία) και acTable (πί-
νακας). Παράδειγµα χρήσης της µεθόδου acRepaintObject είναι η κλήση της µε τη
µορφή

DoCmd.RepaintObject actable, “Employees”

που επανασχεδιάζει το παράθυρο που συσχετίζεται µε τον πίνακα Employees της βά-
σης δεδοµένων.

Έξοδος (Quit Method): χρησιµοποιούµε τη µέθοδο Quit για να τερµατίσου-


µε τη λειτουργία της Microsoft Access. Αυτή η µέθοδος είναι εντελώς ανάλογη µε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 366

την ενέργεια Quit που περιγράψαµε στο κεφάλαιο διαχείρισης µακροεντολών, και η
κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.Quit Options

όπου το όρισµα options καθορίζει εάν θα λάβει χώρα αποθήκευση της βάσης δε-
δοµένων πριν τον τερµατισµό της λειτουργίας της εφαρµογής. Οι τιµές που µπορεί
να λάβει αυτή η παράµετρος είναι οι acQuitPrompt (που προκαλεί την εµφάνιση ε-
νός πλαισίου διαλόγου δια της χρήσης του οποίου ο χρήστης καθορίζει εάν επιθυµεί
να αποθηκεύσει ή όχι τη βάση δεδοµένων), acQuitSaveAll (που προκαλεί την αυτό-
µατη αποθήκευση όλων των αντικειµένων της εφαρµογής) και acQuitSaveNone (που
τερµατίζει τη λειτουργία της Microsoft Access χωρίς να αποθηκεύσει τις αλλαγές
που ενδεχοµένως έχουν πραγµατοποιηθεί πάνω στη βάση δεδοµένων). Εάν δεν καθο-
ρισθεί κάποια τιµή, η προεπιλεγµένη τιµή που χρησιµοποιείται, είναι η acQuit-
SaveAll. Παράδειγµα χρήσης της µεθόδου Quit είναι η κλήση της µε τη µορφή

DoCmd.Quit acQuitPrompt

που τερµατίζει τη λειτουργία της Microsoft Access, ερωτώντας το χρήστη εάν επιθυ-
µεί να αποθηκεύσει ή όχι την τρέχουσα βάση δεδοµένων.

Έξοδος σε (OutputTo Method): χρησιµοποιούµε τη µέθοδο OutputTo για


να αποθηκεύσουµε τα περιεχόµενα των αντικειµένων της βάσης δεδοµένων σε αρχεία
συγκεκριµένου τύπου, όπως είναι λογιστικά φύλλα του Microsoft Excel ή αρχεία
κειµένου του MS-DOS. Η µέθοδος αυτή είναι παρόµοια µε την ενέργεια OutputTo
που περιγράψαµε στο κεφάλαιο διαχείρισης µακροεντολών, και η κλήση της χαρα-
κτηρίζεται από µία σύνταξη της µορφής

DoCmd.OutputTo objectType, objectName, outputFormat, outputFile,


autoStart, templateFile

Στην παραπάνω σύνταξη, τα δύο πρώτα ορίσµατα επιτρέπουν τον καθορισµό


του τύπου και του ονόµατος του αντικειµένου τα περιεχόµενα του οποίου επιθυµού-
µε να αποθηκεύσουµε σε αρχείο. Το όνοµα του αντικειµένου αποθηκεύεται στη µε-
ταβλητή objectName, ενώ ο τύπος που το περιγράφει, καθορίζεται δια της καταχώ-
ρησης στην παράµετρο objectType κάποιας από τις τιµές acOutputDataAccessPage
(σελίδα πρόσβασης δεδοµένων), acOutputForm (φόρµα), acOutputModule (λει-
τουργική µονάδα), acOutputQuery (ερώτηµα), acOutputReport (αναφορά),
acOutputServerView (προβολή διακοµιστή), acOutputStoredProcedure (αποθη-
κευµένη διαδικασία) και acOutputTable (πίνακας της βάσης δεδοµένων).

Από την άλλη πλευρά, το όρισµα outputFormat δέχεται ως τιµή µια σταθερά
που καθορίζει τον τύπο του αρχείου στο οποίο θα αποθηκεύσουµε τα περιεχόµενα
του επιλεγµένου αντικειµένου. Η σταθερά αυτή µπορεί να λάβει µία από τις τιµές
acFormatASP (για Active Server Page Format), acFormatDAP (για Data Access
Page Format), acFormatHTML (για HTML Format), acFormatIIS (για Internet In-
formation Server Format), acFormatRTF (για Rich Text Format), acFormatTXT
(για Text Format) και acFormatXLS (για XLS Format). Όσον αφορά το όνοµα και
τη διαδροµή του αρχείου εξόδου, αυτά καθορίζονται χρησιµοποιώντας την παράµε-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 367

τρο outputFile, ενώ στην περίπτωση κατά την οποία ο τύπος του αρχείου εξόδου εί-
ναι HTML, µπορούµε χρησιµοποιώντας την παράµετρο templateFile να καθορίσου-
µε το όνοµα και τη διαδροµή ενός αρχείου προτύπου, µε τη βοήθεια του οποίου θα
λάβει χώρα η διαµόρφωση του περιεχοµένου του αρχείου εξόδου. Η τελευταία παρά-
µετρος που µπορούµε να καθορίσουµε στην κλήση της µεθόδου OutputTo, είναι η
autoStart. Εάν αυτή η παράµετρος λάβει την τιµή «True», λαµβάνει χώρα άµεση
εκκίνηση της εφαρµογής που διαχειρίζεται το συγκεκριµένο τύπου του αρχείου
εξόδου. Εάν για παράδειγµα καθορίσουµε ως αρχείο εξόδου ένα φύλλο δεδοµένων
(XLS Format), η απόδοση της τιµής «True» στη µεταβλητή autoStart, θα έχει ως
αποτέλεσµα την εκκίνηση του Microsoft Excel αµέσως µετά την ολοκλήρωση της
διαδικασίας έτσι ώστε να προχωρήσουµε σε περαιτέρω επεξεργασία του αρχείου εξό-
δου (εάν βέβαια κάτι τέτοιο είναι επιθυµητό).

Τυπικό παράδειγµα χρήσης της µεθόδου OutputTo, είναι η κλήση της µε τη


µορφή

DoCmd.OutputTo, acOutputTable, “WorksOn”,


acFormatHTML, “Report.htm”

η οποία αποθηκεύει τα περιεχόµενα του πίνακα «WorksOn» ως ιστοσελίδα και κάτω


από το όνοµα «Report.html».

Επανεκτέλεση ερωτήµατος (Requery Method): χρησιµοποιούµε τη µέθοδο


Requery για να ανανεώσουµε τα περιεχόµενα ενός στοιχείου ελέγχου, στην περίπτω-
ση κατά την οποία τα περιεχόµενα του αντικειµένου από το οποίο αυτό παίρνει δεδο-
µένα, έχουν µεταβληθεί. Αυτή η µέθοδος είναι παρόµοια µε την ενέργεια Requery
που περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση της χα-
ρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.Requery controlName

όπου controlName είναι το όνοµα του στοιχείου ελέγχου τα περιεχόµενα του οποίου
επιθυµούµε να ανανεώσουµε. Χαρακτηριστικό παράδειγµα χρήσης αυτής της µεθό-
δου είναι η κλήση της µε τη µορφή

DoCmd.Requery “EmployeeList”

όπου το στοιχείο ελέγχου «EmployeeList» είναι ένα πλαίσιο λίστας (list box) που
εµφανίζει τα προσωπικά στοιχεία των υπαλλήλων που εργάζονται στην εταιρεία.
Στην περίπτωση κατά την οποία λάβει χώρα τροποποίηση των περιεχοµένων του πί-
νακα EMPLOYEE δια της προσθήκης ή της διαγραφής κάποιων εγγραφών, θα πρέ-
πει να χρησιµοποιήσουµε αυτή τη µέθοδο για να ανανεώσουµε τα περιεχόµενα του
πλαισίου λίστας, έτσι ώστε αυτό σε κάθε περίπτωση να εµφανίζει ενηµερωµένα
δεδοµένα.

Επιλογή αντικειµένου (SelectObject Method): χρησιµοποιούµε τη µέθοδο


SelectObject για να επιλέξουµε κάποιο από τα αντικείµενα της τρέχουσας βάσης
δεδοµένων. Η µέθοδος αυτή είναι παρόµοια µε την οµώνυµη ενέργεια που περιγρά-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 368

ψαµε στο κεφάλαιο διαχείρισης των µακροεντολών και η κλήση της χαρακτηρίζεται
από µία σύνταξη της µορφής

DoCmd.SelectObject objectType, objectName, inDatabaseWindow

Στην παραπάνω σύνταξη, το όρισµα objectName επιτρέπει τον καθορισµό


του ονόµατος του αντικειµένου που θέλουµε να επιλέξουµε, ενώ ο τύπος αυτού του
αντικειµένου καθορίζεται δια της καταχώρησης στην παράµετρο objectType µίας εκ
των τιµών acDataAccessPage (σελίδα πρόσβασης δεδοµένων), acDiagram (διά-
γραµµα της βάσης δεδοµένων), acForm (φόρµα), acMacro (µακροεντολή), acMod-
ule (λειτουργική µονάδα), acQuery (ερώτηµα), acReport (αναφορά ή έκθεση),
acServerView (προβολή διακοµιστή), acStoredProcedure (αποθηκευµένη διαδικα-
σία) και acTable (πίνακας της βάσης δεδοµένων). Τέλος το όρισµα inDatabaseWin-
dow δέχεται µία από τις τιµές True ή False και καθορίζει εάν το αντικείµενο θα ε-
πιλεγεί ή όχι στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων. Σύµφωνα
µε τα όσα έχουµε αναφέρει στην παρουσίαση της οµώνυµης ενέργειας, η χρήση της
τιµής False σε αυτή την παράµετρο, είναι επιτρεπτή, µόνο όταν το αντικείµενο που
θέλουµε να χρησιµοποιήσουµε έχει ήδη ανοίξει σε προηγούµενο στάδιο της δια-
δικασίας. Στην αντίθετη περίπτωση η Microsoft Access θα εµφανίσει ένα µήνυµα
λάθους.

Χαρακτηριστικό παράδειγµα χρήσης της µεθόδου SelectObject είναι η κλήση


της µε τη µορφή

DoCmd.SelectObject acForm, “Department”

που επιτρέπει την επιλογή της φόρµας «Department» ως το ενεργό αντικείµενο της
βάσης δεδοµένων.

Επισηµάνσεις (SetWarnings Method): χρησιµοποιούµε τη µέθοδο Set-


Warnings για να ενεργοποιήσουµε ή να απενεργοποιήσουµε την εµφάνιση προειδο-
ποιητικών µηνυµάτων (warnings) κατά τη διάρκεια εκτέλεσης µιας διαδικασίας. Η
κλήση αυτής της µεθόδου χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.SetWarnings warningsOn

όπου το όρισµα warningsOn δέχεται µία από τις τιµές True ή False που ενεργο-
ποιούν ή απενεργοποιούν αντίστοιχα την εµφάνιση των προειδοποιητικών µηνυµά-
των. Τυπικό παράδειγµα χρήσης αυτής της µεθόδου, είναι η κλήση της µε τη µορφή

DoCmd.SetWarnings False
η οποία αποτρέπει την εµφάνιση αυτών των µηνυµάτων κατά τη διάρκεια εκτέλεσης
της διαδικασίας που περιέχει αυτή τη µέθοδο.

Εύρεση εγγραφής (FindRecord Method): χρησιµοποιούµε τη µέθοδο Fin-


dRecord για να αναζητήσουµε την πρώτη εκ των εγγραφών του ενεργού αντικειµέ-
νου της βάσης δεδοµένων που χαρακτηρίζεται από κάποια κριτήρια. Αυτή η µέθοδος
είναι παρόµοια µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης
των µακροεντολών, και η κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 369

DoCmd.FindRecord findWhat, match, matchCase, search, searchFormatted,


onlyCurrentField. findFirst

Στην παραπάνω σύνταξη, το όρισµα findWhat δέχεται ως τιµή µια συµβολο-


σειρά που περιέχει µία έκφραση η οποία καθορίζει και το κριτήριο αναζήτησης της
εγγραφής του ενεργού αντικειµένου. Εάν για παράδειγµα επιθυµούµε να αναζητή-
σουµε την εγγραφή του πίνακα EMPLOYEE που αναφέρεται στον εργαζόµενο µε
επώνυµο Smith, θα καταχωρήσουµε ως τιµή σε αυτή την παράµετρο, τη συµβολοσει-
ρά «Smith». Εναλλακτικά µπορούµε εκτός από συµβολοσειρές να τοποθετήσουµε
στην έκφραση αναζήτησης, και άλλους τύπους δεδοµένων, όπως είναι για παράδειγµα
αριθµούς και ηµεροµηνίες.

Από την άλλη πλευρά, το όρισµα match επιτρέπει τον καθορισµό του τρόπου
αναζήτησης του δεδοµένου που έχει καθοριστεί. Αυτό το όρισµα παίρνει µία από
τις τιµές acAnyWhere, acEntire και acStart. Χρησιµοποιώντας την τιµή acAny-
Where θεωρούµε πως το δεδοµένο αναζήτησης αποτελεί τµήµα κάποιου πεδίου
ενώ η τιµή acEntire (που είναι και η προεπιλεγµένη) διαπραγµατεύεται το δεδοµένο
αναζήτησης ως ολόκληρη την τιµή του πεδίου. Τέλος η χρήση της τιµής acStart
θεωρεί πως το δεδοµένο αναζήτησης αποτελεί µόνο πρόθεµα των τιµών των πεδίων
του πίνακα, και εποµένως η διαδικασία αναζήτησης θα επιστρέψει µόνο τις εγγραφές
που χαρακτηρίζονται από αυτή την ιδιότητα.

Για να κατανοήσουµε καλύτερα αυτή τη διαδικασία, ας θεωρήσουµε πως ο πί-


νακας EMPLOYEE περιέχει δύο εργαζόµενους µε επώνυµα James και Jameson.
Εάν καταχωρήσουµε στο όρισµα findWhat τη συµβολοσειρά James και αποδώσου-
µε στην παράµετρο match την τιµή acAnyWhere η διαδικασία αναζήτησης θα επι-
στρέψει και τις δύο εγγραφές, καθώς θα αναζητήσει τη συµβολοσειρά James σε ο-
ποιοδήποτε τµήµα των επωνύµων που έχουν καταχωρηθεί στο πεδίο LNAME του
πίνακα EMPLOYEE. Αντίθετα η χρήση της τιµής acEntire θα επιστρέψει µόνο την
εγγραφή στην οποία περιέχεται το επώνυµο James καθώς στην προκειµένη περίπτω-
ση η συµβολοσειρά αναζήτησης θα θεωρηθεί πως αποτελεί ολόκληρη την τιµή του
πεδίου, και όχι κάποιο τµήµα του. Εάν επιθυµούµε η διαδικασία αναζήτησης να
κάνει διάκριση ανάµεσα στα µικρά και στα κεφαλαία γράµµατα (case
sensitivity), θα πρέπει να χρησιµοποιήσουµε το επόµενο όρισµα που φέρει το όνοµα
matchCase, και να αποδώσουµε σε αυτό την τιµή True. Αντίθετα, εφόσον το όρισµα
αυτό λάβει την τιµή False, η αναζήτηση θα πραγµατοποιηθεί, χωρίς να λάβει χώρα
αυτή η διάκριση.

Το επόµενο πεδίο που µπορούµε να καθορίσουµε στη σύνταξη αυτής της µε-
θόδου, φέρει το όνοµα search και επιτρέπει τον καθορισµό του συνόλου των εγ-
γραφών στις οποίες θα λάβει χώρα η αναζήτηση του καθορισµένου δεδοµένου.
Αυτό το όρισµα µπορεί να λάβει µία από τις τιµές acDown, acUp και acSearchAll.
Εάν χρησιµοποιήσουµε την τιµή acDown, η διαδικασία αναζήτησης θα περιορισθεί
µόνο σε εκείνες τις εγγραφές που βρίσκονται κάτω από την τρέχουσα εγγραφή, ενώ η
χρήση της τιµής acUp θα περιορίσει την αναζήτηση µόνο στις εγγραφές του ενεργού
αντικειµένου που βρίσκονται πάνω από την τρέχουσα εγγραφή. Εάν επιθυµούµε να
επεκτείνουµε την αναζήτηση σε όλες τις εγγραφές του ενεργού αντικειµένου, ανεξάρ-
τητα από τη θέση της τρέχουσας εγγραφής, θα πρέπει να αποδώσουµε σε αυτή την

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 370

παράµετρο την τιµή acSearchAll που είναι άλλωστε και η προεπιλεγµένη τιµή για
αυτό το όρισµα.

Σε περιπτώσεις κατά τις οποίες τα δεδοµένα που βρίσκονται αποθηκευµένα


στους πίνακες της βάσης χαρακτηρίζονται από κάποιο τύπο διαµόρφωσης, µπορούµε
να χρησιµοποιήσουµε την επόµενη παράµετρο (που φέρει το όνοµα searchFormat-
ted) για να καθορίσουµε εάν η διαδικασία αναζήτησης θα πραγµατοποιηθεί λαµ-
βάνοντας υπ’ όψιν ή όχι αυτή τη διαµόρφωση. Στην περίπτωση κατά την οποία ε-
πιθυµούµε να ληφθεί υπ’ όψιν αυτή η διαµόρφωση θα πρέπει να αποδώσουµε στην
παράµετρο αυτή την τιµή True, ενώ στην αντίθετη περίπτωση θα πρέπει να χρησιµο-
ποιήσουµε την τιµή False. Προκειµένου να γίνει κατανοητή η χρήση αυτής της πα-
ραµέτρου, ο αναγνώστης παραπέµπεται στο παράδειγµα που περιλαµβάνεται στην
τεκµηρίωση της οµώνυµης ενέργειας στο κεφάλαιο διαχείρισης των µακροεντολών
της εφαρµογής.

Από την άλλη πλευρά, το όρισµα onlyCurrentField, παίρνει µία από τις τιµές
acAll και acCurrent και καθορίζει εάν η αναζήτηση του καθορισµένου δεδοµένου
θα περιοριστεί µόνο στο αντίστοιχο πεδίο των εγγραφών του ενεργού αντικειµέ-
νου, ή θα επεκταθεί σε όλα τα πεδία αυτών των εγγραφών. Εάν για παράδειγµα
αναζητούµε τον υπάλληλο της εταιρείας µε το επώνυµο Smith, η χρήση της τιµής
acCurrent στην παράµετρο onlyCurrentField θα περιορίζει τη διαδικασία αναζήτη-
σης µόνο στις τιµές της στήλης LNAME του πίνακα EMPLOYEE. Αντίθετα η χρή-
ση της τιµής acAll θα επιστρέψει τις εγγραφές του εν λόγω πίνακα που περιέχουν τη
συµβολοσειρά Smith σε οποιοδήποτε από τα πεδία τους.

Τέλος το πεδίο findFirst παίρνει κάποια από τις τιµές True ή False και καθο-
ρίζει εάν η διαδικασία αναζήτησης θα ξεκινήσει από την πρώτη εγγραφή του ε-
νεργού αντικειµένου ή από την εγγραφή εκείνη που βρίσκεται αµέσως µετά την
τρέχουσα εγγραφή. Η προεπιλεγµένη τιµή για αυτή την παράµετρο είναι η τιµή True
που ξεκινά τη διαδικασία αναζήτησης από την πρώτη εγγραφή του ενεργού αντικει-
µένου.

Τυπικό παράδειγµα χρήσης της µεθόδου FindRecord είναι η κλήση της µε τη


µορφή

DoCmd.FindRecord Smith, acAnyWhere, True, acDown, False, True, True

που επιστρέφει τις εγγραφές του ενεργού αντικειµένου που βρίσκονται µετά την τρέ-
χουσα εγγραφή η οποίες περιέχουν τη συµβολοσειρά Smith σε οποιοδήποτε τµήµα
της τιµής του πεδίου τους.

Εύρεση εποµένου (FindNext Method): χρησιµοποιούµε τη µέθοδο


FindNext για να αναζητήσουµε την αµέσως επόµενη εγγραφή του ενεργού αντικει-
µένου που πληροί τα κριτήρια αναζήτησης που έχουν καθορισθεί δια της χρήσης της
µεθόδου FindRecord. Η µέθοδος αυτή καλείται χωρίς ορίσµατα και η κλήση της χα-
ρακτηρίζεται από τη σύνταξη DoCmd.FindNext.

Εφαρµογή φίλτρου (ApplyFilter Method): χρησιµοποιούµε τη µέθοδο Ap-


plyFilter για να εφαρµόσουµε ένα φίλτρο, ένα ερώτηµα ή µία πρόταση WHERE

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 371

της εντολής SELECT της γλώσσας SQL πάνω στα δεδοµένα ενός πίνακα, µιας
φόρµας ή ενός ερωτήµατος. Αυτή η µέθοδος είναι παρόµοια µε την οµώνυµη ενέρ-
γεια που παρουσιάσαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση
της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.ApplyFilter filterName, whereCondition, filterType

Στην παραπάνω σύνταξη, το όρισµα filterName δέχεται ως τιµή µια συµβο-


λοσειρά που περιέχει το όνοµα κάποιου φίλτρου ή ερωτήµατος της βάσης δεδοµένων
ενώ η τιµή που καταχωρούµε στο όρισµα whereCondition περιέχει µία πρόταση
WHERE της εντολής SELECT της γλώσσας SQL η οποία ωστόσο δεν θα πρέπει να
περιλαµβάνει την ίδια τη λέξη WHERE (η οποία υπονοείται). Τέλος το όρισµα fil-
terType δέχεται µία από τις τιµές acFilterNormal και acServerFilter που καθορί-
ζουν εάν η διαδικασία αναζήτησης θα επεκταθεί και στα δεδοµένα τα οποία βρίσκο-
νται αποθηκευµένα στους πίνακες της βάσης αλλά η διαµόρφωσή τους είναι διαφορε-
τική από εκείνη µε την οποία εµφανίζονται στην οθόνη. Η προεπιλεγµένη τιµή για
αυτή την παράµετρο είναι η acFilterNormal που περιορίζει τη διαδικασία αναζήτη-
σης µόνο σε εκείνα τα δεδοµένα που ακολουθούν τον ίδιο τρόπο διαµόρφωσης
τόσο για την εµφάνισή τους στην οθόνη όσο και για την αποθήκευσή τους στη βάση
δεδοµένων της εφαρµογής.

Παράδειγµα χρήσης της µεθόδου ApplyFilter είναι η κλήση της µε τη µορφή

DoCmd.ApplyFilter FName=“John“

που εµφανίζει µόνο τις εγγραφές του ενεργού αντικειµένου για τις οποίες το πεδίο
LName έχει την τιµή «John». Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως
πριν από τη µέθοδο ApplyFilter θα πρέπει να χρησιµοποιήσουµε τη µέθοδο Select
Object προκειµένου να καθορίσουµε το ενεργό αντικείµενο της βάσης.

Ηχητικό σήµα (Beep Method): χρησιµοποιούµε τη µέθοδο Beep για να ανα-


παράγουµε ένα ηχητικό σήµα δια της χρήσης του µεγαφώνου (speaker) του υπολο-
γιστή. Η µέθοδος καλείται χωρίς ορίσµατα και η σύνταξή της έχει τη µορφή
DoCmd.Beep. Η µέθοδος αυτή είναι ιδιαίτερα χρήσιµη σε περιπτώσεις κατά τις οποί-
ες επιθυµούµε να υποδηλώσουµε την ολοκλήρωση µιας διαδικασίας ή την πραγ-
µατοποίηση κάποιου σφάλµατος.

Κατάσταση στοιχείου menu (SetMenuItem Method): χρησιµοποιούµε τη


µέθοδο SetMenuItem για να καθορίσουµε την κατάσταση των στοιχείων ενός menu
επιλογών. Αυτή η µέθοδος είναι παρόµοια µε την οµώνυµη ενέργεια που περιγράψα-
µε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση της χαρακτηρίζεται
από µια σύνταξη της µορφής

DoCmd.SetMenuItem menuIndex, commanIndex, subCommandIndex, flag

Στην παραπάνω σύνταξη, οι παράµετροι menuIndex, commandIndex και


subCommandIndex επιτρέπουν τον καθορισµό της θέσης της εντολής την κατά-
σταση της οποίας επιθυµούµε να µεταβάλλουµε. Οι τιµές που καταχωρούµε σε αυτές
τις παραµέτρους είναι ακέραιοι αριθµοί που ξεκινούν από το µηδέν και καθορίζουν

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 372

πλήρως τη θέση της εντολής µέσα στο menu. Για παράδειγµα εάν αποδώσουµε στις
τιµές menuIndex και commandIndex τις τιµές 1 και 4, αναφερόµαστε στην πέµπτη
εντολή της δεύτερης οµάδας επιλογών του menu του ενεργού παραθύρου. Εάν το
στοιχείο του menu που καθορίζουµε δια της χρήσης αυτών των δύο τιµών δεν αντι-
στοιχεί σε εντολή αλλά σε menu επιλογών χαµηλότερου επιπέδου, µπορούµε να χρη-
σιµοποιήσουµε το τρίτο όρισµα (subCommandIndex) για να καθορίσουµε τη θέση
της εντολής µέσα σε αυτό το menu. Τέλος, η κατάσταση στην οποία θέλουµε να
µεταφέρουµε την επιλογή που έχουµε καθορίσει, χρησιµοποιούµε το τέταρτο όρισµα.
Το όρισµα αυτό παίρνει µία από τις τιµές acMenuCheck (επιλογή στοιχείου),
acMenuGray (απενεργοποίηση στοιχείου), acMenuUncheck (κατάργηση επιλογής
στοιχείου) και acMenuUngray (ενεργοποίηση στοιχείου). Η επιλογή ενός στοιχείου
menu γίνεται τοποθετώντας δίπλα στο όνοµά του το σύµβολο «√». Θα πρέπει να ση-
µειωθεί, πως αυτή η ενέργεια µπορεί να εφαρµοσθεί µόνο στα προσαρµοσµένα
menus (custom menus) που δηµιουργούνται προκειµένου να καλύψουν τις ανάγκες
του χρήστη, και όχι στα προεπιλεγµένα menus (default menus) της Microsoft Ac-
cess.

Παράδειγµα χρήσης της µεθόδου SetMenuItem είναι η κλήση της µε τη µορ-


φή

DoCmd.SetMenuItem 0, 1, acMenuUngray

που ενεργοποιεί τη δεύτερη εντολή που βρίσκεται στην πρώτη οµάδα επιλογών του
προσαρµοσµένου menu του ενεργού παραθύρου της εφαρµογής.

Κλείσιµο (Close Method): χρησιµοποιούµε τη µέθοδο Close για να κλείσου-


µε το παράθυρο κάποιου αντικειµένου της Microsoft Access ή το ενεργό παράθυρο
εάν δεν καθοριστεί κάποιο άλλο. Η µέθοδος αυτή είναι παρόµοια µε την οµώνυµη
ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλή-
ση της ακολουθεί µία σύνταξη της µορφής

DoCmd.Close objectType, objectName, save

Στην παραπάνω σύνταξη, το πεδίο objectName επιτρέπει τον καθορισµό του


ονόµατος του αντικειµένου το παράθυρο του οποίου επιθυµούµε να κλείσουµε, ενώ
το όρισµα objectType καθορίζει τον τύπο αυτού του αντικειµένου, και δέχεται µία
από τις τιµές acDataAccessPage (σελίδα πρόσβασης δεδοµένων), acDiagram (διά-
γραµµα της βάσης δεδοµένων), acForm (φόρµα), acMacro (µακροεντολή), acMod-
ule (λειτουργική µονάδα), acQuery (ερώτηµα), acReport (αναφορά ή έκθεση),
acServerView (προβολή διακοµιστή), acStoredProcedure (αποθηκευµένη διαδικα-
σία) και acTable (πίνακας). Τέλος η παράµετρος save δέχεται µία από τις τιµές ac-
SaveNo, acSavePrompt και acSaveYes και καθορίζει εάν θα λάβει χώρα αποθήκευ-
ση των περιεχοµένων του αντικειµένου πριν το κλείσιµο του παραθύρου µε το οποίο
συσχετίζεται. Η προεπιλεγµένη τιµή αυτής της παραµέτρου είναι η τιµή ac-
SavePrompt. Στην περίπτωση χρήσης αυτής της τιµής η Microsoft Access ρωτά το
χρήστη εάν επιθυµεί ή όχι την αποθήκευση των περιεχοµένων του επιλεγµένου αντι-
κειµένου.
Τυπικό παράδειγµα χρήσης της µεθόδου Close, είναι η κλήση της µε τη µορ-
φή

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 373

DoCmd.Close acForm, “DEPARTMENT”, acSaveYes

η οποία κλείνει τη φόρµα DEPARTMENT αποθηκεύοντας τις αλλαγές που ενδεχο-


µένως έχουν πραγµατοποιηθεί πάνω σε αυτό το αντικείµενο.

Κλεψύδρα (Hourglass Method): χρησιµοποιούµε τη µέθοδο Hourglass για


να αντικαταστήσουµε το δείκτη του ποντικιού µε µία κλεψύδρα για όσο χρονικό
διάστηµα λαµβάνει χώρα η εκτέλεση της τρέχουσας διαδικασίας. Με τον τρόπο αυτό
διευκολύνουµε την αλληλεπίδραση του χρήστη µε το πρόγραµµα, καθώς παρατηρώ-
ντας το εικονίδιο της κλεψύδρας, αντιλαµβάνεται πως κάποιο συµβάν βρίσκεται σε
εξέλιξη. Η κλήση αυτής της µεθόδου χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.Hourglass hourglassOn όπου το όρισµα hourglassOn δέχεται µία από τις
τιµές True ή False και καθορίζει εάν θα λάβει χώρα χρήση της κλεψύδρας ή όχι.

Μεγιστοποίηση (Maximize Method): χρησιµοποιούµε τη µέθοδο Maximize


για να µεγιστοποιήσουµε το ενεργό παράθυρο της βάσης δεδοµένων της Microsoft
Access, έτσι ώστε να καλύψει όλη την επιφάνεια εργασίας. Η µέθοδος καλείται χωρίς
ορίσµατα και η κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.Maximize.

Μετάβαση σε εγγραφή (GoToRecord Method): χρησιµοποιούµε τη µέθοδο


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

DoCmd.GoToRecord objectType, objectName, record, offset.

Στην παραπάνω σύνταξη η παράµετρος objectName χρησιµοποιείται για τον


καθορισµό του ονόµατος του αντικειµένου, ενώ ο τύπος του καθορίζεται δια της
καταχώρησης στο πεδίο objectType, µιας εκ των τιµών acDataForm (φόρµα),
acDataQuery (ερώτηµα) και acDataTable (πίνακας). Τα υπόλοιπα δύο ορίσµατα
που χαρακτηρίζουν τη σύνταξη αυτής της µεθόδου, επιτρέπουν τον καθορισµό της
εγγραφής στην οποία επιθυµούµε να µεταβούµε. Πιο συγκεκριµένα, το όρισµα re-
cord δέχεται µία από τις τιµές acFirst, acLast, acNext, και acPrevious που επιτρέ-
πουν τη µετάβαση στην πρώτη, στην τελευταία, στην επόµενη και στην προηγού-
µενη εγγραφή αντίστοιχα. Εάν θέλουµε να µεταφερθούµε στη θέση νέας εγγραφής
(new record) θα χρησιµοποιήσουµε την τιµή acNewRec, ενώ σε κάθε περίπτωση έ-
χουµε τη δυνατότητα να µεταβούµε σε οποιαδήποτε εγγραφή του επιλεγµένου α-
ντικειµένου, καταχωρώντας στο όρισµα record την τιµή acGoTo. Εάν δεν καταχω-
ρηθεί κάποια τιµή σε αυτό το όρισµα, χρησιµοποιείται ως προεπιλεγµένη τιµή η ac
Next που µεταφέρει την εστίαση του συστήµατος στην επόµενη της τρέχουσας εγ-
γραφής του ενεργού αντικειµένου.

Το τελευταίο όρισµα που µπορούµε να χρησιµοποιήσουµε στη σύνταξη αυτής


της µεθόδου, φέρει το όνοµα offset και δέχεται ως τιµή µια αριθµητική ποσότητα.
Στην περίπτωση κατά την οποία στο όρισµα record καταχωρήσουµε µία από τις τιµές
acNext και acPrevious, η ποσότητα αυτή εκφράζει τον αριθµό των εγγραφών που
θα πρέπει να µετακινηθούµε προς τα εµπρός ή προς τα πίσω αντίστοιχα, για να

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 374

προσπελάσουµε τη νέα εγγραφή. Εάν για παράδειγµα χρησιµοποιήσουµε τις τιµές


record = acNext και offset = 15, η νέα εγγραφή του ενεργού αντικειµένου είναι αυτή
που βρίσκεται 15 θέσεις πιο µπροστά από την τρέχουσα εγγραφή. Αντίθετα, εάν
στην προηγούµενη παράµετρο έχουµε καταχωρήσει την τιµή acGoTo, χρησιµο-
ποιούµε αυτό το όρισµα για να καθορίσουµε επακριβώς την εγγραφή στην οποία
θέλουµε να µεταβούµε. Έτσι, χρησιµοποιώντας τις τιµές record = acGoTo και off-
set = 185, µεταφερόµαστε στην εγγραφή υπ’ αριθµόν 185 του ενεργού αντικειµένου,
ανεξάρτητα από την εγγραφή στην οποία βρισκόµαστε τώρα.

Τυπικό παράδειγµα χρήσης της µεθόδου GoToRecord, είναι η κλήση της µε


τη µορφή

DoCmd.GoToRecord acDataTable, “Employee”, acGoTo 20

η οποία µας µεταφέρει στην υπ’ αριθµόν 20 εγγραφή του πίνακα Employee.

Μετάβαση σε σελίδα (GoToPage Method): χρησιµοποιούµε τη µέθοδο Go-


ToPage για να µεταφέρουµε την εστίαση του συστήµατος στο πρώτο στοιχείο ελέγ-
χου µιας σελίδας. Αυτή η µέθοδος είναι ιδιαίτερα χρήσιµη σε περιπτώσεις φορµών
που διαθέτουν περισσότερες από µία σελίδες, και η κλήση της χαρακτηρίζεται από
µία σύνταξη της µορφής

DoCmd.GoToPage pageNumber, right, down

Στην παραπάνω σύνταξη, το όρισµα pageNumber περιέχει τον αριθµό της


σελίδας της φόρµας στην οποία θέλουµε να µεταβούµε – ας σηµειωθεί πως για να
χρησιµοποιηθεί αυτή η µέθοδος θα πρέπει πρώτα να επιλέξουµε τη φόρµα που θέ-
λουµε να χρησιµοποιήσουµε, δια της κλήσης της µεθόδου SelectObject. Από την άλ-
λη πλευρά, τα ορίσµατα right και down ορίζουν τις συντεταγµένες της άνω αρι-
στερής γωνίας του τµήµατος της σελίδας που θέλουµε να εµφανίσουµε. Αυτές οι
δύο παράµετροι χρησιµοποιούνται σε περιπτώσεις κατά τις οποίες δεν επιθυµούµε να
εµφανίσουµε ολόκληρη τη σελίδα της φόρµας αλλά µόνο ένα µέρος αυτής, και οι
τιµές που καταχωρούµε σε αυτές είναι εκπεφρασµένες σε twips. Το twip είναι µία
µονάδα µέτρησης µήκους που χρησιµοποιείται από τη Microsoft Access και ορίζεται
ως το 1/1440 µιας ίντσας (ένα εκατοστό έχει 567 twips).

Τυπικό παράδειγµα χρήσης της µεθόδου GoToPage είναι η κλήση της µε τη


µορφή

DoCmd.GoToPage 3, 1440, 567

που µεταφέρει την εστίαση του συστήµατος στην τρίτη σελίδα της φόρµας και
στο σηµείο µε συντεταγµένες (1440, 567).

Μετάβαση σε στοιχείο ελέγχου (GoToControl Method): χρησιµοποιούµε


τη µέθοδο GoToControl για να µεταφέρουµε την εστίαση του συστήµατος σε κάποιο
πεδίο ή στοιχείο ελέγχου της τρέχουσας εγγραφής ενός ανοικτού αντικειµένου (αυτό
το αντικείµενο µπορεί να είναι µία φόρµα ή ένας πίνακας σε κανονική προβολή ή
προβολή φύλλου δεδοµένων, ή ακόµη και µία αναφορά). Αυτή η µέθοδος είναι παρό-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 375

µοια µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης µακροε-
ντολών, και η κλήσης χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.GoToControl controlName

όπου controlName είναι το όνοµα του στοιχείου ελέγχου στο οποίο επιθυµούµε να
µεταφέρουµε την εστίαση του συστήµατος.

Τυπικό παράδειγµα χρήσης αυτής της µεθόδου, είναι η κλήση της µε τη µορ-
φή

DoCmd.GoToControl “EmployeeSSN”

που µεταφέρει την εστίαση του συστήµατος στο πεδίο «EmployeeSSN» της φόρµας
EMPLOYEES.

Μετακίνηση – Προσαρµογή µεγέθους (MoveSize Method): χρησιµοποιού-


µε τη µέθοδο MoveSize για να µετακινήσουµε ή να αλλάξουµε το µέγεθος του ενερ-
γού παραθύρου της βάσης δεδοµένων. Αυτή η µέθοδος είναι παρόµοια µε την ενέρ-
γεια MoveSize που περιγράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η
κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.MoveSize right, down, width, height

όπου τα ορίσµατα right και down καθορίζουν τις συντεταγµένες της άνω αριστε-
ρής γωνίας της νέας θέσης του παραθύρου (αυτές οι συντεταγµένες µετρώνται σε
σχέση µε τις συντεταγµένες των πλευρών του παραθύρου που περιέχει το ενεργό πα-
ράθυρο της βάσης δεδοµένων), ενώ τα ορίσµατα width και height εκφράζουν τις νέ-
ες διαστάσεις του παραθύρου, και πιο συγκεκριµένα, το πλάτος και το ύψος του.
Είναι σηµαντικό να αναφερθεί, πως οι αριθµητικές τιµές που καταχωρούµε σε αυτά
τα τέσσερα ορίσµατα, είναι εκπεφρασµένες σε twips. Όπως έχει αναφερθεί σε προη-
γούµενη παράγραφο, το twip είναι µία ειδική µονάδα µέτρησης µήκους της Micro-
soft Access, και ορίζεται ως το 1/1440 µιας ίντσας.

Τυπικό παράδειγµα χρήσης της µεθόδου MoveSize είναι η κλήση της µε τη


µορφή

DoCmd.MoveSize 1440, 1440

που µετακινεί το παράθυρο σε µία νέα θέση επί της οθόνης, χωρίς ωστόσο να µετα-
βάλει τις διαστάσεις του.

Μεταφορά βάσης δεδοµένων (TransferDatabase Method): χρησιµοποιού-


µε τη µέθοδο TransferDatabase για να κάνουµε εισαγωγή, εξαγωγή ή σύνδεση δε-
δοµένων ανάµεσα σε µία άλλη βάση δεδοµένων και στην τρέχουσα βάση. Η µέθοδος
αυτή είναι παρόµοια µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο δια-
χείρισης των µακροεντολών, και η κλήση της χαρακτηρίζεται από µία σύνταξη της
µορφής

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 376

DoCmd.TransferDatabase transferType, databaseType, databaseName,


objectType, source, destination, structureOnly, saveLoginId.

Στην παραπάνω σύνταξη, το όρισµα transferType επιτρέπει τον καθορισµό


του τύπου της µεταφοράς των δεδοµένων που θα λάβει χώρα ανάµεσα στις δύο
βάσεις. Αυτό το όρισµα παίρνει µία από τις τιµές acExport, acImport και acLink
που καθορίζουν αντίστοιχα διαδικασία εξαγωγής, εισαγωγής και σύνδεσης δεδοµέ-
νων. Η προεπιλεγµένη τιµή για αυτή την παράµετρο είναι η acImport, που επιτρέπει
την εισαγωγή δεδοµένων στην τρέχουσα βάση. Είναι σηµαντικό να αναφερθεί στο
σηµείο αυτό, πως η διαδικασία σύνδεσης δεδοµένων (data linking) που καθορίζεται
δια της χρήσης της τιµής acLink, είναι δυνατή, µόνο όταν και οι δύο βάσεις δεδοµέ-
νων έχουν δηµιουργηθεί µε τη Microsoft Access.

Από την άλλη πλευρά, το όρισµα databaseType επιτρέπει τον καθορισµό του
τύπου της βάσης δεδοµένων από ή προς την οποία θα µεταφέρουµε δεδοµένα. Υ-
πάρχουν πολλοί διαφορετικοί τύποι βάσεων δεδοµένων που µπορούνε να
χρησιµοποιηθούνε και οι οποίοι καθορίζονται αποδίδοντας στην παράµετρο
databaseType µια από τις τιµές «Microsoft Access» (η τιµή αυτή είναι και η
προεπιλεγµένη) , «Jet 2.x», «Jet 3.x», «dBase III», «dBase IV», «dBase 5»,
«Paradox 3.x», «Paradox 4.x», «Paradox 5.x», «Paradox 7.x», «ODBC
Databases». Έχοντας καθορίσει τον τύπο της βάσης δεδοµένων που επιθυµούµε να
χρησιµοποιήσουµε θα πρέπει στη συνέχεια να καθορίσουµε και το όνοµά της
καταχωρώντας το όνοµα και τη διαδροµή του αρχείου που την περιέχει, στην
παράµετρο databaseName.
Μετά τον καθορισµό του τύπου και του ονόµατος της βάσης, θα πρέπει να
προσδιορίσουµε τον τύπο και το όνοµα του αντικειµένου που θέλουµε να χρησι-
µοποιήσουµε. Ο τύπος του αντικειµένου καθορίζεται κατά τα γνωστά καταχωρώντας
στην παράµετρο objectType µια εκ των τιµών acTable (πίνακας), acQuery (ερώτη-
µα), acForm (φόρµα), acReport (αναφορά ή έκθεση), acMacro (µακροεντολή),
acModule (λειτουργική µονάδα), acDataAccessPage (σελίδα πρόσβασης δεδοµέ-
νων), acServerView (προβολή διακοµιστή), acDiagram (διάγραµµα της βάσης δε-
δοµένων) και acStoredProcedure (αποθηκευµένη διαδικασία). Η προεπιλεγµένη τι-
µή για αυτή την ιδιότητα είναι η acTable. Από την άλλη πλευρά, τα ονόµατα των α-
ντικειµένων προέλευσης και προορισµού καθορίζονται δια της χρήσης των ορισµά-
των source και destination – εάν δεν χρησιµοποιηθεί το όρισµα destination τότε το
αντικείµενο προέλευσης θα µεταφερθεί στην τρέχουσα βάση δεδοµένων µε το ίδιο
όνοµα. Μία ακόµη παράµετρος που µπορούµε να καθορίσουµε στο σηµείο αυτό αφο-
ρά το τµήµα του αντικειµένου που επιθυµούµε να µεταφέρουµε. Αν και στις πιο
πολλές περιπτώσεις η µεταφορά αυτή περιλαµβάνει τόσο τη δοµή του αντικειµένου
όσο και το σύνολο των δεδοµένων που βρίσκονται αποθηκευµένα σε αυτό, εν τού-
τοις σε πολλές περιπτώσεις ζητούµε να µεταφέρουµε µόνο τη δοµή του αντικειµέ-
νου και όχι τα δεδοµένα που περιέχει. Για να το κάνουµε αυτό θα πρέπει να κατα-
χωρήσουµε στο όρισµα structureOnly την τιµή «True». Τέλος το όρισµα saveLog-
inId δέχεται µία από τις τιµές «True» ή «False» ανάλογα µε το εάν επιθυµούµε ή όχι
να αποθηκεύσουµε το όνοµα (login name) και τον κωδικό πρόσβασης (password)
που καταχώρησε ο χρήστης προκειµένου να συνδεθεί σε µία βάση δεδοµένων η οποία
ακολουθεί το µοντέλο του ODBC (Open Database Connectivity).

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 377

Παράδειγµα χρήσης της µεθόδου TransferDatabase είναι η κλήση της µε τη


µορφή

DoCmd.TransferDatabase acImport, “Microsoft Access”, _


“c:\dbases\company.mdb”, acTable, “Employee”, ,True

η οποία µεταφέρει τη δοµή του πίνακα «Employee» από τη βάση δεδοµένων


«c:\dbases\company.mdb» στην τρέχουσα βάση.

Μεταφορά κειµένου (TransferText Method): χρησιµοποιούµε τη µέθοδο


TransferText για να πραγµατοποιήσουµε διαδικασία εισαγωγής, εξαγωγής ή σύν-
δεσης δεδοµένων ανάµεσα σε ένα αρχείο κειµένου και στην τρέχουσα βάση. Η κλή-
ση αυτής της µεθόδου ακολουθεί τη σύνταξη

DoCmd.TransferText transferType, specificationName, tableName, fileName,


hasFieldNames, htmlTableName, codepage

Στην παραπάνω σύνταξη το όρισµα transferType δέχεται µία από τις τιµές
acExportDelim, acExportFixed, acExportHTML, acExportMerge, acImportDe-
lim (η τιµή αυτή είναι και η προεπιλεγµένη), acImportFixed, acImportHTML,
acLinkDelim, acLinkFixed, acLinkHTML οι οποίες καθορίζουν τον τύπο της µε-
ταφοράς (εισαγωγή, εξαγωγή ή σύνδεση) καθώς και τον τύπο του αρχείου κειµέ-
νου. Η χρήση αυτής της παραµέτρου είναι ιδιαίτερα σηµαντική καθώς µας δίνει τη
δυνατότητα να κάνουµε εισαγωγή κειµένου που είναι διαµορφωµένο σε γραµµές
και στήλες, σε κάποιον από τους πίνακες της τρέχουσας βάσης. Το όνοµα του πί-
νακα στον οποίο θα λάβει χώρα η αποθήκευση των δεδοµένων (σε περίπτωση διαδι-
κασίας εισαγωγής κειµένου) καθορίζεται δια της χρήσης της παραµέτρου tableName,
ενώ το όνοµα specificationName δέχεται ως τιµή ένα όνοµα προδιαγραφής (specifi-
cation name) που καθορίζει µε µοναδικό τρόπο το είδος της ανταλλαγής πληροφορί-
ας ανάµεσα στο αρχείου κειµένου και στην τρέχουσα βάση. Περισσότερες πληροφο-
ρίες σχετικά µε το θέµα αυτό ξεφεύγουν από το σκοπό της συγγραφής αυτού του βι-
βλίου και ο αναγνώστης παραπέµπεται στα αρχεία τεκµηρίωσης της Microsoft Ac-
cess ή σε κάποιο άλλο εγχειρίδιο που καλύπτει µε περισσότερη λεπτοµέρεια τη χρήση
αυτής της εφαρµογής.

Η αµέσως επόµενη παράµετρος που θα πρέπει να καθοριστεί, αφορά το όνοµα


του αρχείου κειµένου που θα χρησιµοποιηθεί στη διαδικασία µεταφοράς δεδοµέ-
νων από ή προς την τρέχουσα βάση. Για να καθορίσουµε αυτή την πληροφορία θα
πρέπει να καταχωρήσουµε στο όρισµα fileName το όνοµα και τη διαδροµή αυτού του
αρχείου κειµένου. Η παράµετρος hasFields δέχεται µία από τις τιµές «True» ή
«False» ανάλογα µε το εάν η πρώτη γραµµή του αρχείου δεν περιέχει τιµές αλλά
ονόµατα κάποιων πεδίων. Αυτό ισχύει κυρίως σε περιπτώσεις αρχείων κειµένου τα
περιεχόµενα των οποίων είναι οργανωµένα σε γραµµές και στήλες. Εάν η παράµε-
τρος αυτή λάβει την τιµή «True» που σηµαίνει πως η πρώτη γραµµή του αρχείου
κειµένου περιέχει ονόµατα πεδίων, η Microsoft Access χρησιµοποιεί αυτά τα ονόµα-
τα ως τα ονόµατα των αντίστοιχων πεδίων του πίνακα που θα δηµιουργηθεί για την
αποθήκευση αυτών των δεδοµένων. Από την άλλη πλευρά, το όρισµα htmlTable-
Name χρησιµοποιείται στην περίπτωση κατά την οποία το αρχείο κειµένου είναι δια-
µορφωµένο ως σελίδα HTML (αυτό σηµαίνει πως στο όρισµα transferType έχουµε

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 378

καταχωρήσει µία από τις τιµές acImportHTML ή acLinkHTML). Εάν τα δεδοµένα


της σελίδας HTML βρίσκονται οργανωµένα σε κατάλληλα διαµορφωµένους πίνακες
ή λίστες, µπορούµε να χρησιµοποιήσουµε το όρισµα htmlTableName για να καθο-
ρίσουµε το όνοµα του πίνακα (ή της λίστας) τα δεδοµένα του οποίου επιθυµούµε
να µεταφέρουµε στην τρέχουσα βάση. Εάν αυτό το όρισµα δεν χρησιµοποιηθεί, θα
λάβει χώρα µεταφορά των περιεχοµένων του πρώτου πίνακα ή λίστας της συγκε-
κριµένης ιστοσελίδας. Τέλος το όρισµα codePage χρησιµοποιείται για τον καθορι-
σµό της κωδικοσελίδας που χρησιµοποιείται για τη διαµόρφωση των περιεχοµένων
του αρχείου κειµένου που θέλουµε να χρησιµοποιήσουµε.

Τυπικό παράδειγµα χρήσης της µεθόδου TransferText, είναι η κλήση της µε


τη µορφή

DoCmd.TransferText acExportDelim, “defaultSpec”, “Employees”, _


“c:\dBases\employeeReport.txt”

που µεταφέρει τα περιεχόµενα του πίνακα “Employees” στο αρχείου κειµένου


“c:\dBases\employeeReport.txt”.

Μεταφορά Υπολογιστικού Φύλλου (TransferSpreadsheet Method): χρη-


σιµοποιούµε τη µέθοδο TransferSpreadSheet για να κάνουµε ανταλλαγή δεδοµέ-
νων (εισαγωγή, εξαγωγή ή σύνδεση) ανάµεσα σε ένα φύλλο δεδοµένων και στην
τρέχουσα βάση. Αυτή η µέθοδος είναι παρόµοια µε την ενέργεια TransferSpread-
sheet που παρουσιάσαµε στο κεφάλαιο διαχείριση των µακροεντολών, και η κλήση
της χαρακτηρίζεται από µία σύνταξη της µορφής

DoCmd.TransferSpreadsheet transferType, spreadsheetType, tableName,


filename, hasFieldNames, range

Σε πλήρη αναλογία µε τις προηγούµενες µεθόδους που συσχετίζονται µε δια-


δικασίες µεταφοράς δεδοµένων, το πεδίο transferType δέχεται µία από τις τιµές
acImport, acExport και acLink ανάλογα µε το εάν η διαδικασία µεταφοράς είναι
εισαγωγή, εξαγωγή ή σύνδεση. Από την άλλη πλευρά, το όρισµα spreadSheetType,
επιτρέπει τον καθορισµό του τύπου του υπολογιστικού φύλλου που θέλουµε να
χρησιµοποιήσουµε. Η τρέχουσα έκδοση της Microsoft Access επιτρέπει τη χρήση
υπολογιστικών φύλλων που έχουν δηµιουργηθεί από διαφορετικές εκδόσεις των δύο
πιο δηµοφιλών προγραµµάτων διαχείρισης υπολογιστικών φύλλων, δηλαδή του Mi-
crosoft Excel και του Lotus 1-2-3. Ο καθορισµός του τύπου του υπολογιστικού φύλ-
λου που επιθυµούµε να χρησιµοποιήσουµε γίνεται δια της καταχώρησης στο πεδίο
spreadSheetType µίας εκ των τιµών «acSpreadSheetTypeExcel3», «acSpread-
SheetTypeExcel4», «acSpreadSheetType Excel5», «acSpreadSheetTypeExcel7»,
«acSpreadSheetTypeExcel8» (η τιµή αυτή είναι και η προεπιλεγµένη), «acSpread-
SheetTypeExcel9», «acSpreadSheetTypεLotusWK1», «acSpreadSheetTypεLo-
tusWK3» και «acSpreadSheetTypεLotusWK4».

Τα επόµενα τρία ορίσµατα της µεθόδου TransferSpreadsheet, είναι παρό-


µοια µε εκείνα της µεθόδου TransferText που περιγράψαµε στην προηγούµενη πα-
ράγραφο. Έτσι το όρισµα tableName επιτρέπει τον καθορισµό του ονόµατος του πί-
νακα που θα χρησιµοποιηθεί στη διαδικασία εισαγωγής, εξαγωγής ή σύνδεσης δεδο-

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Σχεσιακές Βάσεις ∆εδοµένων – Θεωρία και Εφαρµογές 379

µένων, ενώ το όνοµα fileName δέχεται ως τιµή µια συµβολοσειρά που περιέχει το
όνοµα και τη διαδροµή του αρχείου του υπολογιστικού φύλλου που επιθυµούµε
να χρησιµοποιήσουµε. Στην περίπτωση κατά την οποία η πρώτη γραµµή του υπολο-
γιστικού φύλλου δεν περιέχει δεδοµένα αλλά ονόµατα πεδίων, θα πρέπει να αποδώ-
σουµε στην παράµετρο hasFieldNames την τιµή «True». Στην περίπτωση αυτή, αυ-
τά τα ονόµατα των πεδίων θα χρησιµοποιηθούν ως τα ονόµατα των πεδίων του πίνα-
κα που θα δηµιουργήσουµε για την αποθήκευση αυτών των δεδοµένων.

Τέλος το όρισµα range χρησιµοποιείται σε περίπτωση κατά την οποία δεν ε-


πιθυµούµε να χρησιµοποιήσουµε τα δεδοµένα ολόκληρου του υπολογιστικού
φύλλου, αλλά µόνο εκείνα που ανήκουν σε µια συγκεκριµένη περιοχή του. Στην πε-
ρίπτωση αυτή θα πρέπει να καταχωρήσουµε στην παράµετρο range µία συµβολοσει-
ρά η τιµή της οποίας είναι µία έγκυρη έκφραση περιοχής φύλλου δεδοµένων. Ας
σηµειωθεί πως η παράµετρος αυτή χρησιµοποιείται µόνο για την εισαγωγή δεδοµέ-
νων από ένα υπολογιστικό φύλλο στην τρέχουσα βάση δεδοµένων, και όχι για την
εξαγωγή δεδοµένων προς ένα υπολογιστικό φύλλο – στην τελευταία περίπτωση, η
χρήση της παραµέτρου range θα οδηγήσει σε αποτυχία της διαδικασίας εξαγωγής δε-
δοµένων.

Τυπικό παράδειγµα χρήσης της µεθόδου TransferSpreadsheet είναι η κλήση


της µε τη µορφή

DoCmd.TransferSpreadsheet acImport, acSpreadSheetTypeExcel8, “Sales”, _


“c:\dataFiles\sales.xls”, True, “A1:D15”

που έχει ως αποτέλεσµα τη µεταφορά των περιεχοµένων της περιοχής A1:D15 του
φύλλου δεδοµένων «c:\dataFiles\sales.xls» στον πίνακα «Sales» της τρέχουσας βά-
σης δεδοµένων.

Μετονοµασία (Rename Method): χρησιµοποιούµε τη µέθοδο Rename για


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

DoCmd.Rename newName, objectType, oldName

Στην παραπάνω σύνταξη τα ορίσµατα oldName και newName εκφράζουν το


παλαιό και το νέο όνοµα του αντικειµένου αντίστοιχα, ενώ το όρισµα objectType
χρησιµοποιείται για τον καθορισµό του τύπου του αντικειµένου και δέχεται κατά τα
γνωστά µία εκ των τιµών acDataAccessPage (σελίδα πρόσβασης δεδοµένων),
acDiagram (διάγραµµα της βάσης δεδοµένων), acForm (φόρµα), acMacro (µακροε-
ντολή), acModule (λειτουργική µονάδα), acQuery (ερώτηµα), acReport (αναφορά),
acServerView (προβολή διακοµιστή), acStoredProcedure (αποθηκευµένη διαδικα-
σία) και acTable (πίνακας της βάσης δεδοµένων).
Τυπικό παράδειγµα χρήσης της µεθόδου Rename είναι η κλήση της µε τη
µορφή

DoCmd.Rename “Employees2003”, acTable, “Employees2002”

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κεφάλαιο 14 : Λειτουργικές Μονάδες 380

πού προκαλεί τη µετονοµασία του πίνακα «Employees2002» δίδοντάς του το όνοµα


«Employees2003».

Όλες οι εγγραφές (ShowAllRecords): σε περίπτωση κατά την οποία λαµβά-


νει χώρα προεπισκόπηση µόνο ενός µέρους των εγγραφών του ενεργού αντικειµέ-
νου – αυτό συµβαίνει συνήθως όταν έχει εφαρµοσθεί επί του αντικειµένου κάποιο
φίλτρο – µπορούµε να χρησιµοποιήσουµε αυτή τη µέθοδο για να καταργήσουµε το
φίλτρο ή τη συνθήκη περιορισµού των εγγραφών που έχει εφαρµοσθεί, και να
εµφανίσουµε όλες τις εγγραφές. Η µέθοδος αυτή χρησιµοποιείται χωρίς ορίσµατα
και η κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.ShowAllRecords.

Προσθήκη Menu (AddMenu Method): χρησιµοποιούµε τη µέθοδο Add-


Menu για να κατασκευάσουµε διάφορα είδη menu επιλογών όπως είναι για παρά-
δειγµα τα αναδυόµενα menus, τα menus συντόµευσης και οι γραµµές menu
(menu bars). Αυτή η µέθοδος είναι παρόµοια µε την οµώνυµη ενέργεια που παρου-
σιάσαµε στο κεφάλαιο διαχείρισης µακροεντολών, και η κλήση της χαρακτηρίζεται
από µία σύνταξη της µορφής

DoCmd.AddMenu menuName, menuMacroName, statusBarText

Στην παραπάνω σύνταξη, το όρισµα menuName χρησιµοποιείται για τον κα-


θορισµό του ονόµατος του menu που θα εµφανίζεται στη γραµµή εργαλείων, ενώ το
όρισµα menuMacroName επιτρέπει τον καθορισµό του ονόµατος της οµάδας µα-
κροεντολών οι ενέργειες της οποίας θα συσχετιστούν µε το νέο menu επιλογών. Τέ-
λος το όρισµα statusBarText χρησιµοποιείται για τον καθορισµό του κειµένου που
θα εµφανίζεται στη γραµµή κατάστασης (status bar) της εφαρµογής, κάθε φορά
που θα χρησιµοποιείται το νέο menu επιλογών.

Επιµέλεια : Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 1

ΕΡΓΑΣΤΗΡΙΟ 1

Στόχος του 1ου εισαγωγικού εργαστηρίου είναι η κατανόηση του τρόπου οργάνωσης της πληροφορίας
στους πίνακες της βάσης δεδοµένων. Αυτή η οργάνωση χαρακτηρίζεται από την οµαδοποίηση των
ατοµικών πεδίων που συσχετίζονται µεταξύ τους σε εγγραφές (records) οι οποίες αποθηκεύονται σε
κατάλληλα διαµορφωµένους πίνακες (tables). Με άλλα λόγια ο κάθε πίνακας αποτελείται από ένα
σύνολο εγγραφών, µε την κάθε µια από αυτές τις εγγραφές να αποτελείται από ένα σύνολο πεδίων.
Όσον αφορά το σύνολο των πινάκων που έχουν δηµιουργηθεί µε τον τρόπο αυτό, αυτοί συσχετίζονται
µεταξύ τους και αποτελούν τη βάση δεδοµένων της εφαρµογής. Με άλλα λόγια ένα σχεσιακό σχήµα
βάσης δεδοµένων, χαρακτηρίζεται από την ακόλουθη ιεραρχική δοµή:

ΑΣΚΗΣΗ 01.01

Να σχολιασθούν και να κατανοηθούν οι παρακάτω


έννοιες που χαρακτηρίζουν την οργάνωση της
πληροφορίας σε πίνακες.

Όνοµα πίνακα – Ονόµατα στηλών – Γραµµές &


πλειάδες – Κύριο κλειδί – Περιορισµένη &
ελεγχόµενη οπτική πρόσβαση στα δεδοµένα –
Συνδυασµός επιλογής και προβολής – Νέα
εγγραφή – Μαζική και ελεγχόµενη διαγραφή.

ΑΣΚΗΣΗ 01.02 Να υλοποιηθούν οι πίνακες ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ στη Microsoft Access

ΥΠΟ∆ΕΙΞΕΙΣ ΓΙΑ ΤΗ ∆ΗΜΙΟΥΡΓΙΑ ΤΩΝ ΠΙΝΑΚΩΝ ΣΤΗ MICROSOFT ACCESS

Για την κατασκευή αυτών των δύο πινάκων στη Microsoft Access – καθώς και όσων άλλων προκύψουν
στο µέλλον – υπάρχουν συνοπτικές οδηγίες στο µικρό εγχειρίδιο χρήσης της εφαρµογής που συνοδεύει
τις εκφωνήσεις των εργαστηριακών ασκήσεων, και αναλυτικές οδηγίες στο Κεφάλαιο 8 των
σηµειώσεων του µαθήµατος που βρίσκονται στην ηλεκτρονική διεύθυνση www.neural.uom.gr/
databases.htm. Σε γενικές γραµµές, η διαδικασία δηµιουργίας ενός νέου πίνακα έχει ως εξής: από το
κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, µεταφερόµαστε στη σελίδα των πινάκων και
επιλέγουµε τη δηµιουργία νέου πίνακα σε προβολή σχεδίασης. Αυτή η διαδικασία έχει ως αποτέλεσµα
τη µεταφορά του χρήστη στο περιβάλλον σχεδίασης πινάκων, όπου για κάθε πεδίο καταχωρούµε το όνοµά
του, τον τύπο δεδοµένων που το χαρακτηρίζει και προαιρετικά κάποιο σχόλιο που περιγράφει το
ρόλο του µέσα στον πίνακα. Στο τελευταίο βήµα της διαδικασίας ορίζουµε το πρωτεύον κλειδί του
πίνακα και τον αποθηκεύουµε ορίζοντας για αυτόν κάποιο όνοµα.

ΣΗΜΕΙΩΣΗ: Θα είναι καλό να δοθεί ιδιαίτερη έµφαση στη σωστή διαµόρφωση του κάθε πεδίου
πίνακα και στην απόδοση των κατάλληλων σε κάθε περίπτωση τιµών στις ιδιότητες που το
χαρακτηρίζουν. Αυτές οι ιδιότητες επηρεάζουν τα χαρακτηριστικά εµφάνισης του πεδίου στις
επιφάνειες των φορµών και των αναφορών της βάσης, καθώς και το είδος των συσχετίσεων στις
οποίες αυτό συµµετέχει. Για το λόγο αυτό ενδείκνυται η προσεκτική διαµόρφωσή τους όσον αφορά τις
τιµές που λαµβάνουν.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 2

ΤΑΙΝΙΑ
ΤΙΤΛΟΣ ΑΠΟΘΕΜΑ_VHS ΑΠΟΘΕΜΑ_BETA ΠΑΡΑΓΩΓΗ ΤΙΜΗ

A night in the opera 05 24 Fox 14000


Pretty woman 10 18 Metro 15500
Prince of Tides 05 10 Fox 12000
The way we were 15 20 Columbia 14000
Ενόραση 10 12 Cinematic 13000
Η Φυγή 18 20 Cinematic 16000
Ήρεµη δύναµη 28 19 3Κ 17000
Ο κόσµος της Έλενας 08 08 Φωτοκίνηση 19000
Το βλέµµα του Οδυσσέα 10 18 3Κ 16000

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

A night in the opera Marx Brothers - Η κατασκευή των πινάκων


Pretty woman Cormack Stacey ΤΑΙΝΙΑ και ΣΥΜΜΕ-
ΤΟΧΗ στη Microsoft Ac-
Pretty woman Gere Richard
cess θα γίνει χρησιµοποιώ-
Pretty woman Roberts Julia
ντας για τα πεδία τους,
Prince of Tides Redford Robert
τους ακόλουθους τύπους
The way we were Redford Robert δεδοµένων.
The way we were Robson Thomas
The way we were Rutherford Chris ΑΠΟΘΕΜΑ_VHS,
The way we were Rutherford Mike ΑΠΟΘΕΜΑ_ΒΕΤΑ
The way we were Streisand Barbara Τιµή:
The way we were Whitney Maggie Αριθµός (ακέραιος)
Ενόραση Καραφωτιάς Χρήστος
Ενόραση Σφυρίου Ηρώ Τίτλος: Κείµενο (30)
Η Φυγή Καζάς Ιάσων Παραγωγή: Κείµενο (20)
Η Φυγή Σφυρίου Ηρώ
Ήρεµη δύναµη Καζάς Ιάσων Όνοµα Ηθοποιού,
Ήρεµη δύναµη Κλέους Περσεφόνη Επώνυµο Ηθοποιού:
Ήρεµη δύναµη Λάµπρου Νιόβη
Ήρεµη δύναµη Σφυρίου Ηρώ Κείµενο (20)
Το βλέµµα του Οδυσσέα Καραφωτιάς Αντώνης
Το βλέµµα του Οδυσσέα Κουτρής Στέφανος
Το βλέµµα του Οδυσσέα Λάζου Αργυρώ

ΑΣΚΗΣΗ 01.03 Να σχολιασθούν και να απαντηθούν τα ακόλουθα ερωτήµατα:

(α) Για ποιο λόγο τα δεδοµένα καταχωρούνται σε δύο και όχι σε ένα πίνακα; Ποια είναι τα πλεονεκτήµατα
και τα µειονεκτήµατα των δύο αυτών µορφών οργάνωσης της πληροφορίας;

(β) Μελετώντας την τρέχουσα δοµή της βάσης δεδοµένων, θεωρείτε πως υπάρχει καλύτερος τρόπος
οργάνωσης της πληροφορίας σε πίνακες, και εάν ναι, ποιος είναι αυτός; Ποια είναι τα πλεονεκτήµατα
αυτού του νέου τρόπου οργάνωσης, σε σχέση µε την τρέχουσα δοµή της βάσης;

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 3

Η υλοποίηση του πίνακα ΤΑΙΝΙΑ στη Microsoft Access οδηγεί στο αποτέλεσµα του επόµενου σχήµατος:

Από τον παραπάνω πίνακα διαπιστώνουµε πως στη θέση νέας εγγραφής βρίσκονται ήδη
καταχωρηµένες οι τιµές µηδέν (0) σε ορισµένες από τις στήλες που περιέχονται σε αυτή. Αυτές είναι
και οι προεπιλεγµένες τιµές για τα πεδία που αντιστοιχούν σε αυτές τις στήλες. Η έννοια της
προεπιλεγµένης τιµής είναι πως εάν ο χρήστης δεν καταχωρήσει κάποια τιµή σε κάποιο πεδίο, τότε
κατά την αποθήκευση της εγγραφής στον πίνακα της βάσης, θα χρησιµοποιηθεί ως τιµή για αυτό το
πεδίο, η προεπιλεγµένη τιµή του. Ας θεωρήσουµε για παράδειγµα το σύστηµα µηχανογράφησης ενός
τριτοβάθµιου ιδρύµατος. Θεωρώντας πως όλοι οι φοιτητές που σπουδάζουν σε αυτό είναι ενήλικες –
δηλαδή πάνω από 18 ετών – µπορούµε να θέσουµε ως προεπιλεγµένη τιµή για την ηλικία του φοιτητή την
τιµή 18. Αυτό σηµαίνει πως αν ο υπάλληλος της Γραµµατείας δεν καταχωρήσει την ηλικία του
φοιτητή στην ατοµική του καρτέλα, θα αποδοθεί σε αυτό το πεδίο η τιµή 18, δηλαδή η
προεπιλεγµένη τιµή του.

ΠΑΡΑΤΗΡΗΣΗ (η κατανόηση αυτής της παραγράφου απαιτεί την γνώση εννοιών όπως είναι η
συσχέτιση, το ξένο κλειδί και οι κανόνες ακεραιότητας αναφοράς εγγραφών): ∆εν είναι δύσκολο να
διαπιστώσει κανείς, πως κάθε φορά που ο χρήστης προσθέτει σε κάποιο πίνακα ένα αριθµητικό πεδίο,
η Microsoft Access θέτει αυτόµατα ως προεπιλεγµένη τιµή για αυτό το πεδίο, την τιµή µηδέν. Αυτό
είναι κάτι που µπορεί να οδηγήσει σε προβληµατική συµπεριφορά της βάσης, εάν το εν λόγω πεδίο είναι
ξένο κλειδί, έχει δηλαδή τοποθετηθεί στον πίνακα για να υλοποιήσει τη συσχέτισή του µε κάποιο άλλο
πίνακα. Ας θεωρήσουµε για παράδειγµα το σύστηµα µηχανογράφησης µιας βιβλιοθήκης και τους
πίνακες BOOK και EDITOR στους οποίους καταχωρούνται στοιχεία βιβλίων και εκδοτικών οίκων
αντίστοιχα. Θεωρώντας πως η πολλαπλότητα της συσχέτισης που υφίσταται ανάµεσα στους δύο πίνακες,
είναι Ν:1, είναι προφανές πως η υλοποίηση της εν λόγω συσχέτισης, απαιτεί την προσθήκη στον
πίνακα BOOK του αριθµητικού πεδίου EditorId, που αποτελεί το πρωτεύον κλειδί του πίνακα
EDITOR. Εάν δεν θέσουµε κάποια προεπιλεγµένη τιµή για αυτό το πεδίο, αυτή θα τεθεί αυτόµατα στην
τιµή µηδέν. Εποµένως εάν κατά την καταχώρηση ενός νέου βιβλίου δεν ορίσουµε κάποιο κωδικό εκδότη,
το πεδίο EditorId θα λάβει τη µηδενική τιµή. Στην περίπτωση αυτή η ακεραιότητα αναφοράς
εγγραφών (referential integrity) θα διασφαλισθεί µόνο αν στον πίνακα EDITOR υπάρχει εγγραφή
εκδότη µε τιµή πρωτεύοντος κλειδιού ίση µε το µηδέν. Στην αντίθετη περίπτωση, θα λάβει χώρα
παραβίαση των κανόνων ακεραιότητας της βάσης δεδοµένων, διότι στον πίνακα BOOK θα υπάρχει
εγγραφή που θα παραπέµπει σε ανύπαρκτη εγγραφή του πίνακα EDITOR. Αλλά ακόµη και εάν υπάρχει
µία τέτοια εγγραφή, είναι πολύ πιθανό να λάβει χώρα συσχέτιση του νέου βιβλίου µε λάθος εκδότη. Για
το λόγο αυτό όταν προσθέτουµε ένα αριθµητικό πεδίο σε κάποιο πίνακα προκειµένου αυτό να
χρησιµοποιηθεί ως ξένο κλειδί που υλοποιεί κάποια συσχέτιση, είναι αναγκαίο να µη θέτουµε
προεπιλεγµένη τιµή για το πεδίο αυτό, και να αποδίδουµε στην παράµετρο αυτή την τιµή NULL.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 4

ΕΡΓΑΣΤΗΡΙΟ 2

Στόχος του 2ου εργαστηρίου είναι η κατανόηση των συσχετίσεων που υφίστανται ανάµεσα στους
πίνακες της βάσης. Πιο συγκεκριµένα θα σχολιασθεί η αναγκαιότητα της ύπαρξης αυτών των
συσχετίσεων, και η δυνατότητα της ανάκτησης συνδυασµένης πληροφορίας που απορρέει από αυτές.
Επίσης θα µελετηθούν οι πράξεις της σύζευξης και του καρτεσιανού γινοµένου – τόσο σε θεωρητικό όσο
και σε πρακτικό επίπεδο – ενώ θα γίνει και η πρώτη αναφορά στη διαδικασία της κανονικοποίησης που
χρησιµοποιείται κατά τη φάση της σχεδίασης της δοµής του σχεσιακού σχήµατος.

ΘΕΩΡΗΤΙΚΗ ΕΙΣΑΓΩΓΗ

Σε κάθε εφαρµογή βάσης δεδοµένων όπου η πληροφορία οργανώνεται σε κατάλληλα διαµορφωµένους


πίνακες, το σύνολο του πληροφοριακού της περιεχοµένου βρίσκεται στον συνδυασµό και στη
συσχέτιση των δεδοµένων από όλους τους πίνακες. Στον χώρο των πινάκων, ο συνδυασµός αυτός
επιτυγχάνεται µε την πράξη της ΣΥΖΕΥΞΗΣ. Η σύζευξη γίνεται πάντα ανάµεσα σε δύο πίνακες και η
υλοποίησή της προϋποθέτει την ύπαρξη µιας ή περισσότερων κοινών στηλών σε αυτούς τους πίνακες.
Ας σηµειωθεί πως δεν είναι αναγκαίο οι στήλες των δύο πινάκων να φέρουν το ίδιο όνοµα, είναι
ωστόσο απαραίτητο να χαρακτηρίζονται από τον ίδιο τύπο δεδοµένων.

Συνήθως το κοινό πεδίο επί του οποίου εφαρµόζεται η πράξη της σύζευξης (το πεδίο αυτό ονοµάζεται
οδηγός της πράξης) αποτελεί κύριο κλειδί για τον ένα ή και για τους δύο πίνακες. Αυτό, όµως, δεν είναι
απαραίτητο να συµβαίνει πάντα. Στην ακραία περίπτωση κατά την οποία ο οδηγός της σύζευξης είναι το
κενό σύνολο, η πράξη της σύζευξης εκφυλίζεται στην πράξη του ΚΑΡΤΕΣΙΑΝΟΥ ΓΙΝΟΜΕΝΟΥ. Ας
σηµειωθεί πως δεν είναι υποχρεωτικό να εφαρµόσουµε τις πράξεις της σύζευξης και του καρτεσιανού
γινοµένου σε δύο διαφορετικούς πίνακες, καθώς οι πράξεις αυτές δύνανται να εφαρµοσθούν και επί δύο
διαφορετικών αντιγράφων του ίδιου πίνακα.

Ερώτηµα – κλειδί για την επιλογή ή την απόρριψη οδηγού στην εκτέλεση της πράξης της σύζευξης (και
του καρτεσιανού γινοµένου) ανάµεσα σε δύο πίνακες είναι το εξής: υπάρχει πληροφορία στο
αποτέλεσµα που επιστρέφει η συγκεκριµένη πράξη για τη συγκεκριµένη βάση πληροφοριών; Με
άλλα λόγια, έχει νόηµα η πραγµατοποίηση µιας τέτοιας πράξης, και εάν ναι, ποιο είναι αυτό;

ΑΣΚΗΣΗ 02.01

Στο προηγούµενο εργαστήριο ορίσαµε τη βάση ταινιών video η οποία περιέχει τους ακόλουθους πίνακες:

ΤΑΙΝΙΑ (Τίτλος, Απόθεµα_VHS, Απόθεµα_BETA, Παραγωγή, Τιµή)


ΣΥΜΜΕΤΟΧΗ (Τίτλος Ταινίας, Επώνυµο Ηθοποιού, Όνοµα Ηθοποιού)

Στηριζόµενοι στην τρέχουσα δοµή της βάσης και στη θεωρητική εισαγωγή που παρουσιάζεται στην
προηγούµενη παράγραφο, να σχολιάσετε και να απαντήσετε τα επόµενα ερωτήµατα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 5

Έχει νόηµα η σύζευξη των πινάκων ΤΑΙΝΙΑ, Ας συµβολίσουµε τη σύζευξη των πινάκων ΤΑΙ-
ΣΥΜΜΕΤΟΧΗ µε οδηγό τις στήλες ΣΥΜΜΕ- ΝΙΑ και ΣΥΜΜΕΤΟΧΗ ως ΤΑΙ-
ΤΟΧΗ.Τίτλος και ΤΑΙΝΙΑ. Τίτλος; ΝΙΑ&ΣΥΜΜΕΤΟΧΗ. Στην περίπτωση αυτή
ισχύουν οι ακόλουθες προτάσεις:
Πως θα σχολιάζατε την σύζευξη των πινάκων
ΤΑΙΝΙΑ, ΣΥΜΜΕΤΟΧΗ µε οδηγό τις στήλες Οι στήλες στον πίνακα αποτέλεσµα δεν είναι
ΣΥΜΜΕΤΟΧΗ.Τίτλος και ΤΑΙΝΙΑ.Παραγωγή; απαραίτητο να διατηρούν τα ονόµατα που έχουν
στους αρχικούς πίνακες
Πως θα σχολιάζατε την εκτέλεση της πράξης του
καρτεσιανού γινοµένου ανάµεσα στους πίνακες Ο πίνακας ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ περιέχει το
ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ; σύνολο του πληροφοριακού περιεχοµένου της
βάσης.
Πως θα σχολιάζατε την εκτέλεση της πράξης του
καρτεσιανού γινοµένου ανάµεσα σε δύο αντί- Ερώτηση: Γιατί λοιπόν η πληροφορία βρίσκεται
γραφα του πίνακα ΤΑΙΝΙΑ; καταχωρηµένη σε δύο και όχι σε ένα πίνακα;

ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ
ΤΙΤΛΟΣ ΑΠΟΘ. ΑΠΟΘ. ΕΠΙΘΕΤΟ ΟΝΟΜΑ
ΠΑΡΑΓΩΓΗ ΤΙΜΗ
ΤΑΙΝΙΑΣ VHS BETA ΗΘΟΠΟΙΟΥ ΗΘΟΠΟΙΟΥ

The way we were 15 20 Columbia 14000 Redford Robert


The way we were 15 20 Columbia 14000 Streisand Barbara
The way we were 15 20 Columbia 14000 Rutherford Chris
The way we were 15 20 Columbia 14000 Whitney Maggie
The way we were 15 20 Columbia 14000 Robson Thomas
The way we were 15 20 Columbia 14000 Rutherford Mike
Prince of Tides 05 10 Fox 12000 Redford Robert
Το βλέµµα του Οδυσσέα 10 18 3Κ 16000 Κουτρής Στέφανος
Το βλέµµα του Οδυσσέα 10 18 3Κ 16000 Λάζου Αργυρώ
Το βλέµµα του Οδυσσέα 10 18 3Κ 16000 Καραφωτιάς Αντώνης
Η Φυγή 18 20 Cinematic 16000 Καζάς Ιάσων
Η Φυγή 18 20 Cinematic 16000 Σφυρίου Ηρώ
Ενόραση 10 12 Cinematic 13000 Σφυρίου Ηρώ
Ενόραση 10 12 Cinematic 13000 Καραφωτιάς Χρήστος
Ήρεµη δύναµη 28 19 3Κ 17000 Κλέους Περσεφόνη
Ήρεµη δύναµη 28 19 3Κ 17000 Σφυρίου Ηρώ
Ήρεµη δύναµη 28 19 3Κ 17000 Καζάς Ιάσων
Ήρεµη δύναµη 28 19 3Κ 17000 Λάµπρου Νιόβη
Pretty woman 10 18 Metro 15500 Roberts Julia
Pretty woman 10 18 Metro 15500 Gere Richard
Pretty woman 10 18 Metro 15500 Cormack Stacey
A night in the opera 5 24 Fox 14000 Marx Brothers -
The way we were 15 20 Columbia 14000 Redford Robert
The way we were 15 20 Columbia 14000 Streisand Barbara
The way we were 15 20 Columbia 14000 Rutherford Chris
The way we were 15 20 Columbia 14000 Whitney Maggie

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 6

Η διαδικασία του κατακερµατισµού της πληροφορίας σε δύο ή περισσότερους πίνακες ονοµάζεται

ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ
• Η κανονικοποίηση ελαττώνει τον χώρο που δεσµεύει η βάση στην περιφερειακή µνήµη
• Η κανονικοποίηση διευκολύνει την πράξη της εγγραφής νέας πληροφορίας στη βάση
• Η κανονικοποίηση διευκολύνει την πράξη της µεταβολής πληροφορίας στη βάση
• Η κανονικοποίηση αυξάνει την πιστότητα της βάσης πληροφοριών καθώς αποτρέπει την
καταχώρηση της ίδιας πληροφορίας περισσότερες από µία φορές (data redundancy).

ωστόσο ….
Η κανονικοποίηση οδηγεί στην αύξηση του υπολογιστικού κόστους επεξεργασίας για κάποια
ερωτήµατα προς τη βάση: οι πράξεις της σύζευξης και του καρτεσιανού γινοµένου κοστίζουν
ακριβά

ΑΣΚΗΣΗ 02.02

Να σχολιασθούν και να απαντηθούν τα ακόλουθα ερωτήµατα:

(α) Για το παράδειγµα της βάσης των ταινιών (β) Πόσες γραµµές θα έχει ο πίνακας-
video, πόσο επί τοις εκατό χώρο περιφερειακής αποτέλεσµα µετά την εκτέλεση της πράξης
µνήµης κερδίζουµε, όταν κάνουµε χρήση του του καρτεσιανού γινοµένου ανάµεσα στους
κανονικοποιηµένου σχεσιακού σχήµατος σε ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ; Σχολιάστε το
σχέση µε το µη κανονικοποιηµένο; κατά πόσο µπορεί να γίνει γενίκευση του
αποτελέσµατος αυτής της ερώτησης ώστε
Για απλότητα θεωρείστε ότι τα κελιά του πίνακα να ισχύει για τον πληθυσµό (σε γραµµές)
δεσµεύουν σταθερό χώρο µνήµης ανάλογα µε στο καρτεσιανό γινόµενο οποιωνδήποτε
τον τύπο της στήλης, ακόµη και όταν µένουν δύο πινάκων.
κενά.

(γ) Θα µπορούσαµε να γενικεύσουµε το αποτέλεσµα του προηγούµενου ερωτήµατος για τη


περίπτωση της πράξης της σύζευξης;

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 7

ΕΡΓΑΣΤΗΡΙΟ 3

Στο 3ο εργαστήριο του µαθήµατος η υποδειγµατική βάση δεδοµένων εµπλουτίζεται µε επιπρόσθετους


πίνακες ενώ ταυτόχρονα γίνεται εισαγωγή στις θεµελιώδεις αρχές της σχεσιακής άλγεβρας, οι πράξεις
της οποίας επιτρέπουν τη συνδυασµένη ανάκτηση πληροφορίας από πολλούς πίνακες ταυτόχρονα. Στο
τέλος του µαθήµατος γίνεται και η πρώτη αναφορά στο µοντέλο οντοτήτων συσχετίσεων που περιγράφει
µε διαγραµµατικό τρόπο τη σχεσιακή δοµή της βάσης.

Η ∆ΟΜΗ ΤΗΣ ΒΑΣΗΣ ΤΑΙΝΙΩΝ VIDEO

ΤΑΙΝΙΑ

ΤΙΤΛΟΣ ΑΠΟΘΕΜΑ VHS ΑΠΟΘΕΜΑ BETA ΠΑΡΑΓΩΓΗ ΤΙΜΗ


A night in the opera 05 24 Fox 14000
Pretty woman 10 18 Metro 15500
Prince of Tides 05 10 Fox 12000
The way we were 15 20 Columbia 14000
Ενόραση 10 12 Cinematic 13000
Η Φυγή 18 20 Cinematic 16000
Ήρεµη δύναµη 28 19 3Κ 17000
Ο κόσµος της Έλενας 08 08 Φωτοκίνηση 19000
Το βλέµµα του Οδυσσέα 10 18 3Κ 16000

ΤΡΑΓΟΥ∆Ι

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


CDs TAPES ΕΤΑΙΡΙΑ
ΤΡΑΓΟΥ∆ΙΟΥ ΕΡΜΗΝΕΥΤΗ ΕΡΜΗΝΕΥΤΗ CD TAPE
Endless Love Osborn Mike 04 04 4500 1250 Sony
Wasted Youth Springsteen Bruce 08 17 5000 1450 Kansas
Without you Sherwood Cliff 05 15 4500 1300 Virgin
Άντε Γεια Χαλκιάς Σταύρος 18 11 3850 1200 Μίνως
Κρυφή Ελπίδα Αρβανίτη Ίρις 08 12 4800 1500 Χλόη
Μικρή Χαρά Σαββόπουλος ∆ιονύσης 10 10 4000 1250 Φορτηγό
Ξηµερώνει Αρβανίτη Ίρις 03 02 5000 1300 Χλόη
The way we Streisand Barbara 07 03 4200 1400 Sony

∆ΙΑΝΟΜΕΑΣ

ΟΝΟΜΑ ∆ΙΕΥΘΥΝΣΗ ΤΗΛΕΦΩΝΟ


CineSound Κοροµηλά 1, Αθήνα (01)3334988
Εικόνα Φραντζή 152, Θεσ/κη (031)902817
Ήχος Μουρούζη 13, Αθήνα (01)3523711
ΟΒΤ Κάλβου 155, Ηράκλειο (081)20367

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 8

ΣΥΜΜΕΤΟΧΗ ∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ

ΤΙΤΛΟΣ ΕΠΩΝΥΜΟ ΟΝΟΜΑ ΟΝΟΜΑ ΟΝΟΜΑ


ΤΑΙΝΙΑΣ ΗΘΟΠΟΙΟΥ ΗΘΟΠΟΙΟΥ ΤΡΑΓΟΥ∆ΙΟΥ ∆ΙΑΝΟΜΕΑ
A night in the opera Marx Brothers ---------- Endless Love Εικόνα
Pretty woman Gere Richard Endless Love Ήχος
Pretty woman Roberts Julia Endless Love ΟΒΤ
Prince of Tides Redford Robert Wasted Youth Ήχος
The way we were Redford Robert Without you Ήχος
The way we were Streisand Barbara Κρυφή Ελπίδα Ήχος
Ενόραση Καραφωτιάς Χρήστος Κρυφή Ελπίδα ΟΒΤ
Ενόραση Σφυρίου Ηρώ Μικρή Χαρά CineSound
Η Φυγή Καζάς Ιάσων Μικρή Χαρά Ήχος
Η Φυγή Σφυρίου Ηρώ Μικρή Χαρά ΟΒΤ
Ήρεµη δύναµη Καζάς Ιάσων Ξηµερώνει Ήχος
Το βλέµµα του Οδυσσέα Καραφωτιάς Αντώνης The way we CineSound

∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ ΕΠΕΝ∆ΥΣΗ

ΟΝΟΜΑ ΟΝΟΜΑ ΟΝΟΜΑ ΟΝΟΜΑ


ΤΑΙΝΙΑΣ ∆ΙΑΝΟΜΕΑ ΤΑΙΝΙΑΣ ΤΡΑΓΟΥ∆ΙΟΥ
A night in the opera CineSound A night in the opera Without you
A night in the opera Εικόνα Pretty woman Endless Love
Prince of Tides CineSound Pretty woman Wasted Youth
The way we were CineSound The way we were Wasted Youth
The way we were Εικόνα Η φυγή Ξηµερώνει
The way we were ΟΒΤ Ήρεµη δύναµη Μικρή Χαρά
Η Φυγή Εικόνα Το βλέµµα του Οδυσσέα Άντε Γεια
Ήρεµη δύναµη CineSound Το βλέµµα του Οδυσσέα Κρυφή Ελπίδα
Ο κόσµος της Έλενας CineSound The way we were The way we were
Το βλέµµα του Οδυσσέα ΟΒΤ A night in the opera Without you
A night in the opera CineSound Pretty woman Endless Love
A night in the opera Εικόνα Pretty woman Wasted Youth

Σύµφωνα µε το συµβολισµό που χρησιµοποιήσαµε στο προηγούµενο εργαστήριο, η σχεσιακή δοµή της
βάσης µπορεί να γραφεί µε τη µορφή

ΤΑΙΝΙΑ(Τίτλος, Απόθεµα VHS, Απόθεµα BETA, Τιµή, Παραγωγή)


ΤΡΑΓΟΥ∆Ι(Τίτλος, Επώνυµο Ερµηνευτή, Όνοµα Ερµηνευτή, Cds, Tapes, Τιµή CD, Τιµή Tape, Εταιρία)
ΣΥΜΜΕΤΟΧΗ(Ταινία, Όνοµα Ηθοποιού, Επώνυµο Ηθοποιού)
ΕΠΕΝ∆ΥΣΗ(Ταινία, Τραγούδι)
∆ΙΑΝΟΜΗ_ΤΑΙΝΙΑΣ(Ταινία, ∆ιανοµέας)
∆ΙΑΝΟΜΗ_ΤΡΑΓΟΥ∆ΙΟΥ(Τραγούδι, ∆ιανοµέας)
∆ΙΑΝΟΜΕΑΣ(Όνοµα, ∆ιεύθυνση, Τηλέφωνο)

Στην παραπάνω γραφή τα πεδία των πινάκων που είναι γραµµένα µε έντονους (bold) χαρακτήρες είναι
τα πρωτεύοντα κλειδιά τους (primary keys). Παρατηρούµε πως σε κάποιους πίνακες τα πρωτεύοντα
κλειδιά είναι σύνθετα πεδία, αποτελούνται δηλαδή από πολλά απλά πεδία.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 9

ΑΙΤΗΜΑΤΑ ΠΡΟΣΠΕΛΑΣΗΣ (QUERIES)

Τα ερωτήµατα αυτού του είδους απευθύνονται προς το πληροφοριακό σύστηµα και έχουν ως αποτέλεσµα
την επιλεκτική ανάκτηση δεδοµένων. Για κάθε ερώτηµα επιλέγεται µία στρατηγική προσπέλασης σε
έναν ή περισσότερους πίνακες, και επεξεργασία του περιεχοµένου τους δια της χρήσης των τελεστών
της άλγεβρας πινάκων (γνωστή και ως σχεσιακή άλγεβρα). Το τελικό αποτέλεσµα της επεξεργασίας
επιστρέφεται στο χρήστη καταχωρηµένο σε κατάλληλα διαµορφωµένο πίνακα και εκτυπώνεται στον
εκτυπωτή ή προβάλλεται στην οθόνη. Το σχεσιακό σύστηµα διαχείρισης βάσης δεδοµένων δεν καταχωρεί
αποτελέσµατα στην περιφερειακή µνήµη εκτός και αν εµείς το καθοδηγήσουµε στο να κάνει κάτι τέτοιο.

ΠΑΡΑ∆ΕΙΓΜΑ ΣΧΕ∆ΙΑΣΗΣ ΕΡΩΤΗΜΑΤΟΣ ΠΡΟΣΠΕΛΑΣΗΣ

Να ανακτηθούν τα ονόµατα και τα επώνυµα των καλλιτεχνών των οποίων τα


τραγούδια µπορούµε να προµηθευτούµε από την εταιρεία OBT τόσο σε CD όσο
ΕΡΩΤΗΜΑ
και se Tape.

Ο πίνακας ο οποίος µας πληροφορεί για το ποιος διανοµέας διανέµει ποιο τραγούδι
φέρει το όνοµα ∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ. Εκεί ωστόσο δεν περιλαµβάνεται το
ΠΙΝΑΚΕΣ ΠΟΥ
όνοµα του καλλιτέχνη ο οποίος ερµηνεύει το κάθε τραγούδι, και εποµένως ο
ΕΜΠΛΕΚΟΝΤΑΙ
πίνακας ∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ από µόνος του δεν επαρκεί. Χρειάζεται να
ΣΤΗ ΣΧΕ∆ΙΑΣΗ
γίνει σύζευξη των περιεχοµένων του µε τα περιεχόµενα του πίνακα ΤΡΑΓΟΥ∆Ι –
ΤΟΥ
στην περίπτωση αυτή ο οδηγός της πράξης της σύζευξης θα είναι η στήλη Τίτλος
ΕΡΩΤΗΜΑΤΟΣ
Τραγουδιού στον πίνακα ΤΡΑΓΟΥ∆Ι και η στήλη Όνοµα Τραγουδιού στον πίνακα
∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ.

Η ανάκτηση της συγκεκριµένης πληροφορίας απαιτεί την πραγµατοποίηση των


τριών επόµενων πράξεων της σχεσιακής άλγεβρας:

1) Εφαρµογή του τελεστή της ΕΠΙΛΟΓΗΣ στον πίνακα ∆ΙΑΝΟΜΗ


ΤΡΑΓΟΥ∆ΙΟΥ έτσι ώστε να κρατήσουµε µόνο τις εγγραφές εκείνες για τις οποίες η
στήλη Όνοµα ∆ιανοµέα έχει ως τιµή τη συµβολοσειρά «ΟΒΤ». Έστω ότι το
αποτέλεσµα αυτής της διαδικασίας το αποθηκεύουµε σε ενδιάµεσο βοηθητικό πίνακα
ΣΤΡΑΤΗΓΙΚΗ
µε όνοµα TABLE_1.
ΠΡΟΣΠΕΛΑΣΗΣ
ΣΤΗ
2) Σύζευξη του πίνακα TABLE_1 µε τον πίνακα ΤΡΑΓΟΥ∆Ι χρησιµοποιώντας ως
ΒΑΣΗ
οδηγό τις στήλες Όνοµα Τραγουδιού του πίνακα TABLE_1 και Τίτλος
∆Ε∆ΟΜΕΝΩΝ
Τραγουδιού του πίνακα ΤΡΑΓΟΥ∆Ι. Έστω πως το αποτέλεσµα αυτής της πράξης
αποθηκεύεται σε ενδιάµεσο βοηθητικό πίνακα που φέρει το όνοµα TABLE_2.

3) Στο τελευταίο βήµα της διαδικασίας θα πρέπει να λάβει χώρα η πράξη της
επιλογής επί του ενδιάµεσου πίνακα TABLE_2 έτσι ώστε να κρατήσουµε µόνο τις
στήλες οι οποίες µας ενδιαφέρουν και οι οποίες φέρουν τα ονόµατα Όνοµα
Ερµηνευτή και Επώνυµο Ερµηνευτή.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 10

ΜΟΝΤΕΛΑ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ (ENTITY – RELATIONSHIP MODELS)

Από την ανάλυση που πραγµατοποιήθηκε στις προηγούµενες σελίδες, καθίσταται προφανές, πως το
σχεσιακό σχήµα της βάσης δεδοµένων (relational database schema) περιγράφει σε αρκετά µεγάλο
βαθµό, τη δοµή και οργάνωση της πληροφορίας η οποία καταχωρείται στους πίνακες της βάσης,
καθώς και τις συσχετίσεις των δεδοµένων στη συγκεκριµένη εφαρµογή. Υπό αυτή την έννοια, το
σχεσιακό σχήµα µοντελοποιεί την εφαρµογή και αποτελεί εναλλακτική µορφή της µεθοδολογίας των
διαγραµµάτων Οντοτήτων Συσχετίσεων (Entity Relationship Diagrams, ER Diagrams). Στην
προκειµένη περίπτωση, η διαδικασία ταυτοποίησης των οντοτήτων και των συσχετίσεων της εφαρµογής,
θα οδηγήσει στα ακόλουθα αποτελέσµατα:

ΟΝΤΟΤΗΤΕΣ Ταινία, Τραγούδι, ∆ιανοµέας


ΣΥΣΧΕΤΙΣΕΙΣ ∆ιανοµή Ταινίας, ∆ιανοµή Τραγουδιού, Επένδυση

Ο πίνακας ΣΥΜΜΕΤΟΧΗ δεν περιλαµβάνεται στα παραπάνω αποτελέσµατα, διότι χαρακτηρίζεται από
την ακόλουθη ιδιαιτερότητα: θα αποτελούσε συσχέτιση εάν υπήρχε πίνακας ΗΘΟΠΟΙΟΣ στον οποίο
θα καταχωρούσαµε επιπρόσθετα ατοµικά στοιχεία των ηθοποιών (για παράδειγµα, Ηλικία,
∆ιεύθυνση Κατοικίας, κ.λ.π.). Ο λόγος για τον οποίο υπάρχει στο παραπάνω σχήµα, είναι για να
αποφύγουµε την πολλαπλή καταχώρηση των στοιχείων ταινίας για εκείνες τις ταινίες στις οποίες
πρωταγωνιστούν περισσότεροι από ένας ηθοποιοί. Με εντελώς ανάλογο τρόπο, το ζεύγος των στηλών
Όνοµα Ηθοποιού και Επώνυµο Ηθοποιού, µπορεί να λάβει πολλαπλές τιµές για κάθε στιγµιότυπο της
οντότητας ΤΑΙΝΙΑ.

Να σχεδιασθεί το επόµενο ερώτηµα προσπέλασης: ποιοι διανοµείς διανέµουν τόσο


ΑΣΚΗΣΗ 03.01 την ταινία όσο και το τραγούδι σε περιπτώσεις κατά τις οποίες το τραγούδι
αποτελεί µουσική επένδυση της ταινίας και µάλιστα είναι οµότιτλό της.

Να σχεδιασθεί το µοντέλο οντοτήτων συσχετίσεων (E-R model) για τη σχεσιακή


ΑΣΚΗΣΗ 03.02
βάση δεδοµένων ταινιών video που παρουσιάστηκε στο σηµερινό εργαστήριο.

Να υλοποιηθεί το σχεσιακό σχήµα της τρέχουσας βάσης δεδοµένων δια της


χρήσης της Microsoft Access. Για κάθε πίνακα, να ορισθεί το πρωτεύον κλειδί του
ΑΣΚΗΣΗ 03.03 και το σύνολο των ιδιοτήτων του κάθε πεδίου του. Τέλος να λάβει χώρα η
υλοποίηση των συσχετίσεων και η προσθήκη στους πίνακες των εγγραφών που
περιλαµβάνονται στο φύλλο των εργαστηριακών ασκήσεων.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 11

ΕΡΓΑΣΤΗΡΙΟ 4

Στα τρία προηγούµενα εργαστήρια έλαβε χώρα η µελέτη της σχεδίασης της βάσης ταινιών video και η
υλοποίησή της στη Microsoft Access. Στο στάδιο αυτό υποτίθεται πως έχει επέλθει η εξοικείωση των
φοιτητών µε τις βασικές έννοιες των σχεσιακών βάσεων δεδοµένων και πώς έχει λάβει χώρα η πλήρη
υλοποίηση της βάσης. Αυτό σηµαίνει πως οι πίνακες έχουν υλοποιηθεί, οι ιδιότητες των πεδίων των
πινάκων έχουν διαµορφωθεί σωστά, και οι εγγραφές που περιέχονται στο φυλλάδιο των
εργαστηριακών ασκήσεων, έχουν ήδη καταχωρηθεί στους πίνακες. Εάν κάποια από αυτές τις
διαδικασίες δεν έχει ακόµη ολοκληρωθεί, θα είναι καλό να πραγµατοποιηθεί πριν την ενασχόληση µε το
αντικείµενο του τέταρτου εργαστηρίου.

Στο επόµενο σχήµα παρουσιάζεται το µοντέλο οντοτήτων συσχετίσεων που περιγράφει µε διαγραµµατικό
τρόπο τη δοµή της βάσης ταινιών video. Οι φοιτητές θα πρέπει να έχουν τη δυνατότητα να κατανοήσουν τη
δοµή και τα χαρακτηριστικά του µοντέλου, κατανόηση, που απαιτεί τη γνώση της βασικής θεωρίας που
συσχετίζεται µε αυτή τη διαγραµµατική τεχνική. Αυτή η θεωρία περιλαµβάνεται στο 2ο κεφάλαιο των
σηµειώσεων του µαθήµατος και είναι διαθέσιµη µέσω του παγκόσµιου διαδικτύου.

Ξεκινώντας από το µοντέλο οντοτήτων συσχετίσεων του προηγούµενου


σχήµατος, να κατασκευάσετε το σχεσιακό µοντέλο της βάσης δεδοµένων video.
ΑΣΚΗΣΗ 04.01
Αυτή η διαδικασία αναγωγής περιγράφεται αναλυτικά στο κεφάλαιο 3 των
σηµειώσεων του µαθήµατος.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 12

Έχοντας κατανοήσει το µοντέλο οντοτήτων συσχετίσεων και το σχεσιακό σχήµα για την τρέχουσα µορφή
της βάσης ταινιών video ας περάσουµε τώρα στη βελτίωση του σχεσιακού σχήµατος, η οποία
συζητήθηκε για πρώτη φορά στο πρώτο εργαστήριο του µαθήµατος. Θεωρώντας πως για τον κάθε
ηθοποιό που συµµετέχει σε ταινία της βάσης καταχωρούµε και άλλες πληροφορίες εκτός από το
ονοµατεπώνυµό του, είναι προφανές πως απαιτείται η ύπαρξη ενός ακόµη πίνακα που φέρει το όνοµα
ΗΘΟΠΟΙΟΣ και ο οποίος χρησιµοποιείται για την καταχώρηση στοιχείων ηθοποιών. Ας υποθέσουµε
ακόµη πως για κάθε ηθοποιό καταχωρούµε το όνοµα και το επώνυµό του, τη διεύθυνση κατοικίας
του, το τηλέφωνό του, τον κωδικό αριθµό του και την ηλικία του – η επιλογή του τύπου δεδοµένων για
αυτά τα πεδία αφήνεται ως άσκηση στους φοιτητές του εργαστηρίου.

Η άλλη βελτίωση που µπορούµε να επιφέρουµε στο τρέχον σχεσιακό σχήµα, είναι η χρήση ενός κωδικού
αριθµού ως πρωτεύον κλειδί για τον πίνακα ΤΑΙΝΙΑ. Ποια πιστεύετε πως θα είναι η συνέπεια αυτής
της τροποποίησης του σχεσιακού σχήµατος, αφού ούτως ή άλλως, ο τίτλος της κάθε ταινίας (υποτίθεται
πως) είναι µοναδικός και εποµένως µπορεί να χρησιµοποιηθεί ως το πρωτεύον κλειδί για αυτόν τον
πίνακα;

Να κατασκευαστεί το µοντέλο οντοτήτων συσχετίσεων και το σχεσιακό σχήµα


της βάσης δεδοµένων για το τροποποιηµένο µοντέλο του συστήµατος
ΑΣΚΗΣΗ 04.02
διαχείρισης ταινιών video. Ποιες είναι οι συνέπειες αυτών των τροποποιήσεων,
όσον αφορά τον πίνακα ΣΥΜΜΕΤΟΧΗ;

Χρησιµοποιώντας τη Microsoft Access, να κατασκευάσετε τη βάση δεδοµένων


που αντιστοιχεί στο τροποποιηµένο µοντέλο του συστήµατος διαχείρισης
ταινιών video. Για κάθε έναν από τους πίνακες της βάσης να υλοποιήσετε τη δοµή
ΑΣΚΗΣΗ 04.03
του (αυτή η υλοποίηση περιλαµβάνει εκτός των άλλων τον καθορισµό του
πρωτεύοντος κλειδιού και τον καθορισµό των ιδιοτήτων του κάθε πεδίου πίνακα)
και να ορίσετε τις συσχετίσεις ανάµεσα στους πίνακες.

Να υλοποιηθούν τα ακόλουθα ερωτήµατα και να παρουσιαστεί η προεπισκόπησή


ΑΣΚΗΣΗ 04.04 τους σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων και προβολή κώδικα
SQL.

Σε ποιες ταινίες ακούγονται τραγούδια που διανέµονται από την εταιρεία OBT;

Ποιων ταινιών τα τραγούδια διανέµονται σε CD η τιµή του οποίου είναι µεγαλύτερη από 4000 δραχµές;

Να ανακτηθούν τα ονοµατεπώνυµα των ηθοποιών που συµµετέχουν σε περισσότερες από µία ταινίες.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 13

CASE STUDIES

Σύµφωνα µε το νέο ανανεωµένο σχέδιο µαθήµατος, µετά την ολοκλήρωση του 4ου εργαστηρίου, οι
φοιτητές θα πρέπει να αναλάβουν και να διεκπεραιώσουν ένα πρόβληµα µηχανογράφησης ενός
πληροφοριακού συστήµατος (case study). Οι λύσεις αυτών των ασκήσεων θα πρέπει να παραδοθούν
στους διδάσκοντες µετά την ολοκλήρωση του 8ου εργαστηρίου – όπου σύµφωνα µε το χρονοδιάγραµµα
θα έχει ολοκληρωθεί η παρουσίαση της Microsoft Access – και οι πιο άρτιες από αυτές θα παρουσιαστούν
από τους φοιτητές µετά την ολοκλήρωση του εργαστηρίου και πριν τη διεξαγωγή των εξετάσεων του
µαθήµατος. Στις επόµενες σελίδες ακολουθεί ένας κατάλογος τυπικών προβληµάτων µηχανογράφησης
πληροφοριακών συστηµάτων, από όπου οι φοιτητές µπορούν να διαλέξουν το πρόβληµα που θα
αναλάβουν να υλοποιήσουν. Εναλλακτικά οι φοιτητές έχουν τη δυνατότητα να προτείνουν το δικό τους
πρόβληµα – εφ’ όσον έχουν κάτι υπ’ όψιν – καθώς ούτως ή άλλως ο αριθµός των προτεινόµενων
προβληµάτων που ακολουθούν είναι ήδη περιορισµένος.

CASE STUDY 1: ΜΗΧΑΝΟΓΡΑΦΗΣΗ ΕΤΑΙΡΕΙΑΣ

Το πρόβληµα αυτό παρουσιάζεται αναλυτικά στις σηµειώσεις του µαθήµατος και για το λόγο αυτό η
έµφαση δεν θα πρέπει να δοθεί τόσο στην ανάλυση και στη σχεδίαση της δοµής της βάσης, όσο στην
υλοποίηση του πληροφοριακού συστήµατος στη Microsoft Access. Σε γενικές γραµµές το πρόβληµα
αφορά τη λειτουργία µιας εταιρείας (COMPANY) η οποία υποδιαιρείται σε τµήµατα
(DEPARTMENTS) που απασχολούν υπαλλήλους (EMPLOYEES) σε διάφορα έργα (PROJECTS).
Ζητείται η ανάπτυξη ενός πληροφοριακού συστήµατος που θα επιτρέπει τη διαχείριση του
πληροφοριακού υλικού της βάσης, όπως την καταχώρηση υπαλλήλων, τµηµάτων και έργων, την
κατανοµή των υπαλλήλων σε τµήµατα και την ανάθεση έργων σε υπαλλήλους.

Η υλοποίηση αυτού του προβλήµατος απαιτεί την κατασκευή των πινάκων της βάσης, των
συσχετίσεων που υφίστανται ανάµεσά τους έτσι όπως αυτές υπαγορεύονται από το σχεσιακό σχήµα
της συγκεκριµένης εφαρµογής, και την καταχώρηση στους πίνακες, των εγγραφών που υπάρχουν
στις σηµειώσεις του µαθήµατος. Στο επόµενο βήµα της διαδικασία, θα πρέπει να υλοποιηθούν τα
ακόλουθα στοιχεία:

Φόρµες καταχώρησης δεδοµένων για υπαλλήλους, τµήµατα και έργα. Ιδιαίτερη έµφαση θα πρέπει να
δοθεί στην κατανοµή των υπαλλήλων στα τµήµατα της εταιρείας. Πιο συγκεκριµένα ο κωδικός του
τµήµατος στο οποίο θα τοποθετηθεί ο υπάλληλος δεν θα καταχωρηθεί µε το χέρι. Αντίθετα θα
κατασκευαστεί ένα πλαίσιο λίστας (list box) που θα εµφανίζει τον κατάλογο των διαθέσιµων τµηµάτων
της εταιρείας, και κάθε φορά που χρήστης θα επιλέγει κάποιο όνοµα τµήµατος, ο κωδικός αυτού του
τµήµατος θα επιστρέφεται και θα καταχωρείται στο πεδίο DNO της νέας εγγραφής του πίνακα
EMPLOYEE. Εντελώς ανάλογες τεχνικές θα εφαρµοσθούν σε όλες τις περιπτώσεις που απαιτούν την
απόδοση τιµής σε πεδίο πίνακα που έχει χαρακτηρισθεί ως ξένο κλειδί. Ποιο πιστεύετε πως είναι το
πλεονέκτηµα αυτής της διαδικασίας;

Να κατασκευαστεί φόρµα που θα εµφανίζει εντός πλαισίου λίστας τα ονόµατα των διαθέσιµων
τµηµάτων της εταιρείας. Όταν ο χρήστης επιλέγει κάποιο όνοµα τµήµατος, θα λαµβάνει χώρα εµφάνιση
των στοιχείων των υπαλλήλων που δουλεύουν σε αυτό (LNAME, FNAME, SSN, BDATE και SALARY)
σε κατάλληλα διαµορφωµένη υποφόρµα κάτω από την οποία θα υπάρχουν δύο άλλα πεδία που θα
εµφανίζουν το µέσο όρο του µισθού και της ηλικίας αυτών των υπαλλήλων. Αυτή η υποφόρµα θα
πρέπει να κατασκευαστεί µε τέτοιο τρόπο ώστε όταν ο χρήστης επιλέξει ένα όνοµα υπαλλήλου σε αυτή,
να εµφανιστεί – σε άλλη υποφόρµα – το όνοµα και η τοποθεσία των έργων στα οποία απασχολείται,
καθώς επίσης ο εβδοµαδιαίος αριθµός των ωρών ενασχόλησης σε αυτό το έργο.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 14

Να κατασκευαστεί φόρµα που να εµφανίζει πλαίσιο λίστας µε τα προσωπικά στοιχεία των υπαλλήλων της
εταιρίας (LNAME, FNAME και SSN). Όταν ο χρήστης επιλέγει κάποιο όνοµα από αυτό το πλαίσιο, θα
λαµβάνει χώρα εµφάνιση των στοιχείων των προστατευόµενων µελών για αυτόν τον υπάλληλο (NAME,
SEX, BDATE, RELATIONSHIP) σε κατάλληλα διαµορφωµένη υποφόρµα.

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

Να κατασκευαστεί αναφορά που να εµφανίζει στοιχεία τµηµάτων, έργων και υπαλλήλων


οµαδοποιηµένα πρώτα ως προς τµήµα και στη συνέχεια ως προς έργο. Με άλλα λόγια για κάθε τµήµα
θα εµφανίζει τον κατάλογο των έργων (PNUMBER, PNAME, PLOCATION) που εποπτεύονται από
αυτό (πρώτο επίπεδο οµαδοποίησης), και στη συνέχεια για κάθε έργο θα εµφανίζει τα προσωπικά
στοιχεία των υπαλλήλων που απασχολούνται σε αυτό (LNAME, FNAME, SSN) και τον αριθµό των
εβδοµαδιαίων ωρών ενασχόλησης του κάθε υπαλλήλου σε αυτό το έργο (δεύτερο επίπεδο
οµαδοποίησης).

CASE STUDY 2: ΜΗΧΑΝΟΓΡΑΦΗΣΗ ΒΙΒΛΙΟΘΗΚΗΣ

∆ίδεται το µοντέλο οντοτήτων συσχετίσεων του επόµενου σχήµατος που περιγράφει τη δοµή του
συστήµατος µηχανογράφησης µιας βιβλιοθήκης.

Με τη βοήθεια αυτού του µοντέλου να σχεδιάσετε το σχεσιακό σχήµα του συστήµατος διαχείρισης
βιβλιοθήκης. Για κάθε πίνακα να ορίσετε τη δοµή του, τον τύπο δεδοµένων των πεδίων του και το
πρωτεύον κλειδί του.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 15

Χρησιµοποιώντας τη Microsoft Access να υλοποιήσετε το σύστηµα µηχανογράφησης βιβλιοθήκης. Να


δηµιουργήσετε τους πίνακες, να ορίσετε τα πρωτεύοντα κλειδιά και τις συσχετίσεις που υφίστανται
ανάµεσά τους, και να καταχωρήσετε 15 µε 20 ενδεικτικές εγγραφές σε κάθε πίνακα. Στη συνέχεια να
υλοποιήσετε τα επόµενα στοιχεία της βάσης δεδοµένων:

Για κάθε έναν από τους πίνακες που συσχετίζονται µε το ΒΙΒΛΙΟ, τον ΕΚ∆ΟΤΗ, το ΣΥΓΓΡΑΦΕΑ και
το ∆ΑΝΕΙΖΟΜΕΝΟ να κατασκευάσετε φόρµες καταχώρησης εγγραφών δια της χρήσης των οποίων θα
καταχωρούνται νέα στοιχεία στους πίνακες της βάσης.

Να κατασκευαστεί φόρµα δανεισµού βιβλίων που να επιτρέπει το δανεισµό βιβλίου σε κάποιο πρόσωπο.
Το όνοµα του δανειζόµενου προσώπου θα επιλέγεται από κατάλληλα διαµορφωµένο πλαίσιο λίστας
διαδικασία που θα έχει ως αποτέλεσµα την εµφάνιση σε υποφόρµα των βιβλίων που έχει ήδη δανεισθεί
το συγκεκριµένο άτοµο καθώς και την ηµεροµηνία δανεισµού και επιστροφής για αυτά τα βιβλία. Η
επιλογή του βιβλίου προς δανεισµό θα γίνεται και αυτή από λίστα η οποία θα εµφανίζει µόνο εκείνα τα
βιβλία που υπάρχουν στη βιβλιοθήκη έτσι ώστε να αποκλειστεί η πιθανότητα δανεισµού ενός βιβλίου το
απόθεµα του οποίου έχει ήδη εξαντληθεί.

Να κατασκευαστεί φόρµα που θα εµφανίζει συγκεντρωτικά στοιχεία για τα βιβλία που έχουν
δανεισθεί. Πιο συγκεκριµένα ο χρήστης θα πρέπει να πληκτρολογεί µια ηµεροµηνία και πατώντας ένα
κουµπί να ενηµερώνονται δύο υποφόρµες. Από αυτές τις υποφόρµες η µία θα εµφανίζει τα βιβλία τα
οποία θα έπρεπε να είχαν ήδη επιστραφεί – αυτό σηµαίνει πως η ηµεροµηνία που καταχώρησε ο χρήστης
είναι µεταγενέστερη από την ηµεροµηνία επιστροφής – ενώ η δεύτερη θα εµφανίζει όλα τα υπόλοιπα
δανειζόµενα βιβλία – εκείνα η ηµεροµηνία επιστροφής των οποίων δεν έχει παρέλθει ακόµη. Για κάθε
βιβλίο θα εµφανίζεται ο τίτλος του, ο κωδικός ISBN, το όνοµα και το επώνυµο του προσώπου που το
δανείστηκε, και οι ηµεροµηνίες δανεισµού και επιστροφής.

Να κατασκευαστεί φόρµα που να εµφανίζει το σύνολο των βιβλίων της βιβλιοθήκης. Όταν ο χρήστης
επιλέξει κάποιο βιβλίο, θα πρέπει να έχει τη δυνατότητα – πατώντας ένα κουµπί εντολής – να εµφανίσει
την καρτέλα µε τα στοιχεία του επιλεγµένου βιβλίου.

Να κατασκευαστεί ηµερήσια αναφορά που για την τρέχουσα ηµεροµηνία να εµφανίζει τα στοιχεία των
βιβλίων (και πιο συγκεκριµένα τον τίτλο του, τον κωδικό ISBN και το ονοµατεπώνυµο του
προσώπου που το δανείστηκε) που θα πρέπει να επιστραφούν µέχρι το τέλος της ηµέρας ή έχουν ήδη
καθυστερήσει.

CASE STUDY 3: ∆ΙΑΧΕΙΡΙΣΗ ΑΠΟΘΗΚΗΣ

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

ΠΡΟΪΟΝ (Κωδικός, Όνοµα, Τιµή, Ποσότητα, Μονάδα Μέτρησης, Κωδικός Κατηγορίας Προϊόντος)
ΚΑΤΗΓΟΡΙΑ ΠΡΟΪΟΝΤΟΣ (Κωδικός Κατηγορίας, Όνοµα Κατηγορίας)
ΠΕΛΑΤΗΣ (Κωδικός, Επώνυµο, Όνοµα, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ)
ΠΡΟΜΗΘΕΥΤΗΣ (Κωδικός, Επώνυµο, Όνοµα, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ)
ΠΩΛΗΣΗ (Κωδικός Πελάτη, Κωδικός Προϊόντος, Ηµεροµηνία Αγοράς, Ποσότητα, Έκπτωση)
ΑΓΟΡΑ (Κωδικός Προµηθευτή, Κωδικός Προϊόντος, Ηµεροµηνία Αγοράς, Ποσότητα, Έκπτωση)

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 16

Με τη βοήθεια του δεδοµένου σχεσιακού σχήµατος να κατασκευάσετε το µοντέλο οντοτήτων


συσχετίσεων που αναπαριστά µε διαγραµµατικό τρόπο τη δοµή του πληροφοριακού συστήµατος
διαχείρισης αποθήκης. Το διάγραµµα θα πρέπει να αναπτυχθεί στην πλήρη του µορφή και πιο
συγκεκριµένα: (α) για κάθε τύπο οντότητας να σχεδιάσετε τα πεδία που περιλαµβάνονται σε αυτόν
και να ταυτοποιήσετε το πεδίο κλειδί (key attribute) που περιγράφει µε µοναδικό τρόπο το κάθε
στιγµιότυπο του τύπου οντότητας. (β) για κάθε τύπο συσχέτισης να καταγράψετε την τιµή της
πολλαπλότητάς της (cardinality), τα σχεδιάσετε τα πεδία που (ενδεχοµένως) περιλαµβάνονται σε
αυτή, και να ταυτοποιήσετε το βαθµό συµµετοχής του κάθε τύπου οντότητας στο δεδοµένο τύπο
συσχέτισης (υποχρεωτική ή προαιρετική συµµετοχή). Αναλυτικές λεπτοµέρειες και παραδείγµατα
κατασκευής διαγραµµάτων οντοτήτων – συσχετίσεων, µπορούν να βρεθούν στο δεύτερο κεφάλαιο των
σηµειώσεων του µαθήµατος.

Να υλοποιηθεί η βάση δεδοµένων στη Microsoft Access. Να δηµιουργηθούν οι πίνακες, να


διαµορφωθούν κατάλληλα τα πεδία τους (όσον αφορά τις τιµές των ιδιοτήτων που λαµβάνουν) και να
ταυτοποιηθεί το πρωτεύον κλειδί τους. Μετά τη δηµιουργία των πινάκων θα πρέπει να λάβει χώρα η
δηµιουργία των συσχετίσεων που υφίστανται ανάµεσά τους, µε την κάθε συσχέτιση να διαµορφώνεται
µε τον κατάλληλο τρόπο όσον αφορά την ενεργοποίηση των κανόνων ακεραιότητας καθώς και του
µηχανισµού ενηµέρωσης και διαγραφής των σχετικών εγγραφών (cascade update and delete
operations). Να καταχωρηθούν σε κάθε πίνακα µερικές ενδεικτικές εγγραφές έτσι ώστε να είναι δυνατός
ο έλεγχος της ορθότητας υλοποίησης της εφαρµογής.

Να κατασκευαστούν φόρµες καταχώρησης δεδοµένων για τα προϊόντα, τους πελάτες και τους
προµηθευτές και να υλοποιηθούν οι µηχανισµοί καταγραφής αγορών και πωλήσεων. Η αγορά ενός
προϊόντος από κάποιο προµηθευτή, θα περιλαµβάνει την εµφάνιση των στοιχείων των προϊόντων και των
προµηθευτών σε κατάλληλα διαµορφωµένα πλαίσια λίστας (list boxes) από όπου ο χρήστης θα µπορεί να
επιλέγει ποια προϊόντα θα αγορασθούν και από ποιους προµηθευτές. Με εντελώς ανάλογο τρόπο θα
λαµβάνει χώρα η καταγραφή µιας πώλησης. Το σύστηµα θα πρέπει επίσης να διαχειρίζεται τις ποσότητες
των προϊόντων εµφανίζοντας πάντοτε τις τρέχουσες τιµές τους. Πιο συγκεκριµένα, εάν λάβει χώρα
προµήθεια Ν τεµαχίων του Χ προϊόντος αυτή η τιµή θα πρέπει να προστίθεται στην υπάρχουσα
ποσότητα, έτσι ώστε κάθε φορά να γνωρίζουµε τη σωστή ποσότητα των προϊόντων της αποθήκης.
Με εντελώς ανάλογο τρόπο, η πώληση ποσότητας προϊόντος σε πελάτη θα οδηγεί στην αφαίρεση αυτής
της ποσότητας από την τρέχουσα τιµή της. Εάν διαπιστωθεί πως η ποσότητα που παράγγειλε ο πελάτης
υπερβαίνει την ποσότητα του προϊόντος στην αποθήκη, ή εάν το προϊόν αυτό έχει εξαντληθεί, η εφαρµογή
θα πρέπει να εµφανίζει ένα µήνυµα λάθους και να µην προχωρά στη διεκπεραίωση της δοσοληψίας.
Σε µία βελτιωµένη έκδοση της εφαρµογής, µπορούµε για κάθε προϊόν να ορίσουµε ένα όριο ασφαλείας,
πέραν του οποίου θα ενεργοποιείται ο µηχανισµός επαναπαραγγελίας του προϊόντος από τον
προµηθευτή.

Να κατασκευαστεί φόρµα µε όνοµα ΤΙΜΟΛΟΓΙΟ ΠΩΛΗΣΗΣ η οποία για κάθε πελάτη θα εµφανίζει
το περιεχόµενο της τρέχουσας παραγγελίας του. Πιο συγκεκριµένα, ο χρήστης θα επιλέγει το επώνυµο
του πελάτη από κατάλληλα διαµορφωµένο πλαίσιο λίστας. Η επιλογή αυτή θα έχει ως αποτέλεσµα την
πλήρωση µιας υποφόρµας µε ένα πλήθος εγγραφών κάθε µία από τις οποίες θα περιλαµβάνει τον
κωδικό και το όνοµα του εκάστοτε προϊόντος, την ποσότητα παραγγελίας για αυτό το προϊόν, το
ποσοστό έκπτωσης και τη συνολική τιµή της παραγγελίας πριν και µετά την έκπτωση. Εάν η
παραγγελία περιλαµβάνει περισσότερα από ένα προϊόντα, θα πρέπει στο τέλος της φόρµας να εµφανίζεται
µία γραµµή που να εκτυπώνει το ποσό που οφείλει ο πελάτης στην εταιρεία για το σύνολο της
παραγγελίας, πριν και µετά την έκπτωση. Εάν ο πελάτης που έχει επιλεγεί έχει πραγµατοποιήσει
περισσότερες από µία παραγγελίες, η φόρµα θα πρέπει να έχει τη δυνατότητα εµφάνισης όλων αυτών
των παραγγελιών – µια παραγγελία σε κάθε σελίδα – και ο χρήστης θα πρέπει να µπορεί να
µετακινηθεί ανάµεσα σε αυτές τις παραγγελίες χρησιµοποιώντας τα κατάλληλα πλήκτρα πλοήγησης
(navigation buttons). Σε κάθε µια από τις παραπάνω περιπτώσεις η εφαρµογή θα πρέπει να εµφανίζει και
την ηµεροµηνία της τρέχουσας παραγγελίας. Τυπικό παράδειγµα τιµολογίου – που δεν εµφανίζει
ωστόσο το σύνολο της πληροφορίας που ζητείται σε αυτή την άσκηση – παρουσιάζεται στο επόµενο
σχήµα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 17

Χρησιµοποιώντας ανάλογες τεχνικές να κατασκευάσετε τη φόρµα ΤΙΜΟΛΟΓΙΟ ΑΓΟΡΑΣ που να


εµφανίζει τις ίδιες πληροφορίες για τις αγορές προϊόντων της εταιρείας από τους προµηθευτές. Τέλος, το
ΤΙΜΟΛΟΓΙΟ ΠΩΛΗΣΗΣ και το ΤΙΜΟΛΟΓΙΟ ΑΓΟΡΑΣ θα πρέπει να κατασκευαστούν και ως
αναφορές έτσι ώστε να είναι δυνατή η προεπισκόπησή τους και η εκτύπωσή τους στον προεπιλεγµένο
εκτυπωτή του συστήµατος.

CASE STUDY 4: ΣΥΣΤΗΜΑ ΚΡΑΤΗΣΗΣ ΘΕΣΕΩΝ ΣΙ∆ΗΡΟ∆ΡΟΜΟΥ

Στόχος αυτής της εργασίας είναι η σχεδίαση και η υλοποίηση ενός πληροφοριακού συστήµατος που θα
διαχειρίζεται κρατήσεις θέσεων σε αµαξοστοιχίες του Οργανισµού Σιδηροδρόµων Ελλάδος (ΟΣΕ).
Η ανάπτυξη αυτής της εφαρµογής, θα πρέπει να λάβει χώρα θεωρώντας ότι ισχύουν οι ακόλουθες
παραδοχές:

Η κάθε αµαξοστοιχία χαρακτηρίζεται από ένα κωδικό, από κάποιο όνοµα (για παράδειγµα η αµαξοστοιχία
ΒΕΡΓΙΝΑ του Intercity χαρακτηρίζεται από τον κωδικό αριθµό 70) και περιέχει ένα συγκεκριµένο
πλήθος από βαγόνια. Για κάθε βαγόνι καταχωρούµε τον κωδικό του, το όνοµά του (εάν υπάρχει κάποιο
όνοµα), τον κωδικό της κατηγορίας στην οποία ανήκει (Α’ ή Β’ θέση) και το πλήθος των θέσεων που
περιέχει. Τέλος για κάθε θέση καταχωρούµε τον κωδικό της, τον κωδικό του βαγονιού που την περιέχει,
τη θέση της µέσα στο βαγόνι (εάν είναι δίπλα σε παράθυρο ή όχι), καθώς και το εάν είναι θέση
καπνιστών ή µη καπνιστών.

Η κάθε µία από τις θέσεις των βαγονιών κρατείται για έναν ή περισσότερους επιβάτες (η τελευταία
περίπτωση δεν αναφέρεται σε διπλοκράτηση, η οποία σαφώς θα πρέπει να αποφεύγεται: απλά όταν ένας
επιβάτης κρατήσει µία θέση για µια διαδροµή από τη Θεσσαλονίκη µέχρι την Κατερίνη, η ίδια θέση
θα πρέπει στη συνέχεια να µπορεί να χορηγηθεί σε κάποιον που ταξιδεύει από Λάρισα προς Αθήνα –
οι δύο διαδροµές δεν επικαλύπτονται). Για κάθε επιβάτη καταχωρούµε τον κωδικό του, το όνοµα και το
επώνυµό του, το τηλέφωνο και την ηλικία του καθώς και τον αριθµό του φορολογικού του µητρώου. Οι
πληροφορίες που καταχωρούνται για την κάθε κράτηση, περιλαµβάνουν ακόµη την ηµεροµηνία και ώρα
αναχώρησης της αµαξοστοιχίας, τον κωδικό των πόλεων προέλευσης και προορισµού (αυτές οι πόλεις
θα επιλέγονται από κατάλληλα διαµορφωµένα πλαίσια λίστας (list boxes)), την τιµή της θέσης, και τον
τρόπο πληρωµής του αντιτίµου του εισιτηρίου (τοις µετρητοίς, επί πιστώσει, µε αντικαταβολή, κ.λ.π.).

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 18

Το σύστηµα κράτησης σιδηροδροµικών θέσεων θα πρέπει να είναι κατάλληλα σχεδιασµένο ώστε να µην
επιτρέπει την καταχώρηση µιας θέσης σε περισσότερους από έναν επιβάτες – αυτό σηµαίνει µεταξύ
των άλλων πως αν δεν υπάρχουν ελεύθερες θέσεις, η διαδικασία κράτησης µιας θέσης δεν θα πρέπει
να είναι επιτρεπτή. Εάν ο επιβάτης ακυρώσει την κράτηση, η θέση αυτή θα πρέπει να αποδεσµεύεται
έτσι ώστε να µπορέσει να καταχωρηθεί σε άλλο επιβάτη, και ο επιβάτης θα µπορεί να λαµβάνει πίσω το
αντίτιµο του εισιτηρίου, είτε ολόκληρο, εάν η ακύρωση γίνει πέντε µέρες ή περισσότερο πριν την
πραγµατοποίηση του δροµολογίου, είτε µειωµένο (λόγω παρακράτησης ποσοστού της αξίας του
εισιτηρίου) εάν η ακύρωση γίνει σε µεταγενέστερη χρονική στιγµή. Αυτό το ποσοστό παρακράτησης
θα υπολογίζεται µε βάση τα περιεχόµενα του επόµενου πίνακα:

Αριθµός ηµερών που µεσολαβούν ανάµεσα στην Ποσοστό επί της συνολικής αξίας του εισιτη-
ηµεροµηνία ακύρωσης της κράτησης και στην ρίου που παρακρατείται λόγω της ακύρωσης
ηµεροµηνία πραγµατοποίησης του δροµολογίου κράτησης της θέσης.

Την ηµεροµηνία της αναχώρησης 90 τοις εκατό


Μία ηµέρα πριν την αναχώρηση 80 τοις εκατό
∆ύο ηµέρες πριν την αναχώρηση 60 τοις εκατό
Τρεις ηµέρες πριν την αναχώρηση 40 τοις εκατό
Τέσσερις ηµέρες πριν την αναχώρηση 20 τοις εκατό
Πέντε ηµέρες πριν την αναχώρηση 0 τοις εκατό (το αντίτιµο επιστρέφεται ολόκληρο)

Στηριζόµενοι στην παραπάνω περιγραφή να σχεδιάσετε το µοντέλο οντοτήτων συσχετίσεων που


περιγράφει τη δοµή του συστήµατος κράτησης θέσεων σιδηροδρόµου. Το διάγραµµα να αναπτυχθεί
στην πλήρη του µορφή. Αυτό σηµαίνει πως για κάθε τύπο οντότητας θα πρέπει να απεικονίσετε τα πεδία
που περιέχει και να ταυτοποιήσετε το πεδίο κλειδί του. Για κάθε τύπο συσχέτισης να σχεδιάσετε τα
πεδία του (εάν υπάρχουν) και να καταγράψετε την τιµή της πολλαπλότητάς του. Τέλος για κάθε έναν
από τους τύπους οντότητας που συµµετέχουν σε ένα τύπο συσχέτισης να απεικονίσετε µε διαγραµµατικό
τρόπο το βαθµό συµµετοχής του στον τύπο συσχέτισης (υποχρεωτική ή προαιρετική συµµετοχή).

Χρησιµοποιώντας το µοντέλο οντοτήτων συσχετίσεων να προχωρήσετε στην αναγωγή του στο


ισοδύναµο σχεσιακό σχήµα βάσης δεδοµένων, το οποίο στη συνέχεια θα πρέπει να υλοποιήσετε
χρησιµοποιώντας τη Microsoft Access. Για κάθε πίνακα να καταχωρήσετε τα πεδία του
χρησιµοποιώντας το σωστό τύπο δεδοµένων και ρυθµίζοντας κατάλληλα τις ιδιότητές του. Να
ταυτοποιήσετε τα πρωτεύοντα και ξένα κλειδιά των πινάκων και να υλοποιήσετε τις συσχετίσεις που
υφίστανται ανάµεσά τους. Για κάθε συσχέτιση να ενεργοποιήσετε το µηχανισµό ελέγχου ακεραιότητας
αναφορών και να ρυθµίσετε κατάλληλα τη συµπεριφορά της όσον αφορά τη διαδικασία διαδοχικής
ενηµέρωσης και διαγραφής των σχετικών εγγραφών. Να καταχωρήσετε 15 µε 20 ενδεικτικές εγγραφές
σε κάθε πίνακα έτσι ώστε σε µεταγενέστερο στάδιο να είναι δυνατός ο έλεγχος της ορθότητας των
αποτελεσµάτων που επιστρέφονται από τα ερωτήµατα της εφαρµογής.

Να κατασκευάσετε φόρµες καταχώρησης δεδοµένων δια της χρήσης των οποίων θα είναι δυνατή η
εισαγωγή στοιχείων για τις αµαξοστοιχίες, τα βαγόνια και τις θέσεις τους, καθώς και η διαδικασία
κράτησης θέσεως για επιβάτες. Τα στοιχεία της θέσης και του προσώπου στον οποίο αυτή αποδίδεται θα
επιλέγονται από κατάλληλα διαµορφωµένα πλαίσια λίστας ενώ µε ανάλογο τρόπο θα καταχωρούνται και
τα στοιχεία που αφορούν τα σηµεία επιβίβασης και προορισµού. Όπως έχει ήδη αναφερθεί σε
προηγούµενη παράγραφο, θα πρέπει να δοθεί ιδιαίτερη έµφαση στη διαδικασία αποτροπής καταχώρησης
της ίδιας θέσης σε διαφορετικά πρόσωπα – εκτός εάν τα µήκη διαδροµής τους δεν επικαλύπτονται. Να
υλοποιηθεί επίσης το σύστηµα ακύρωσης κράτησης θέσεως. Για κάθε τέτοια ακύρωση η εφαρµογή θα
πρέπει να έχει τη δυνατότητα να υπολογίζει το ποσό που θα παρακρατείται από το αρχικό αντίτιµο του
εισιτηρίου µε βάση τα στοιχεία του πίνακα που παρατίθεται στην προηγούµενη παράγραφο.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 19

Στηριζόµενοι στην υλοποίηση του πληροφοριακού συστήµατος κράτησης θέσεων, να υλοποιήσετε τα


επόµενα ερωτήµατα (το κάθε ερώτηµα θα παρουσιαστεί και στις τρεις προβολές στις οποίες αυτό δύναται
να βρεθεί, ήτοι, σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων και προβολή κώδικα SQL):

Να ανακτηθούν τα ονόµατα και τα επώνυµα των επιβατών που έχουν κρατήσει θέση µη καπνιστή σε
παράθυρο σε όλα τα βαγόνια Β’ θέσης της αµαξοστοιχίας Βεργίνα που θα αναχωρήσει από τη
Θεσσαλονίκη µε προορισµό την Αθήνα στις 15 Νοεµβρίου 2003 και στις 13:45 το µεσηµέρι. Πόσοι από
αυτούς τους επιβάτες πρόκειται να αποβιβασθούν στη Λάρισα;

Για τη διαδροµή της αµαξοστοιχίας Βεργίνα που θεωρήθηκε στην προηγούµενη άσκηση να ανακτήσετε για
κάθε βαγόνι τον κωδικό του, το όνοµά του (εάν υπάρχει) και τον αριθµό των κενών θέσεων που περιέχει
(δηλαδή των θέσεων για τις οποίες δεν έχει γίνει κράτηση).

Να ανακτηθεί το όνοµα και το επώνυµο των προσώπων µε τη µεγαλύτερη και τη µικρότερη ηλικία που
επιβαίνουν σε οποιοδήποτε βαγόνι της Α’ θέσης της αµαξοστοιχίας ΦΙΛΙΠΠΟΣ που ξεκίνησε από την
Αλεξανδρούπολη µε προορισµό την Αθήνα στις 20 ∆εκεµβρίου 2003 και στις 7:30 το πρωί.

Για τη διαδροµή της αµαξοστοιχίας ΦΙΛΙΠΠΟΣ που θεωρήθηκε στην προηγούµενη άσκηση να
ανακτηθούν τα ονόµατα και τα επώνυµα των επιβατών που στις 17 ∆εκεµβρίου 2003 προχώρησαν σε
ακύρωση της κράτησης της θέσης τους, καθώς και ο µέσος όρος του χρηµατικού ποσού που
παρακρατήθηκε από τον Οργανισµό επί της αρχικής αξίας του εισιτηρίου.

Για δεδοµένη ηµεροµηνία που θα καταχωρείται από το χρήστη, να κατασκευαστεί αναφορά η οποία θα
εµφανίζει κατάσταση επιβίβασης της αµαξοστοιχίας ΒΕΡΓΙΝΑ µε τα επώνυµα των επιβατών να
εµφανίζονται κατά αύξουσα ταξινόµηση οµαδοποιηµένα ως προς τον κωδικό του βαγονιού στο οποίο
επιβαίνουν. Για κάθε επιβάτη να εµφανίζεται το επώνυµο, το όνοµα και η ηλικία του, καθώς και ο αριθµός
θέσης στην οποία ταξιδεύει. Επίσης δίπλα στο όνοµα του κάθε βαγονιού να εµφανίζεται η επί τοις εκατό
πληρότητά του, δηλαδή το επί τοις εκατό ποσοστό των θέσεών του που έχουν χορηγηθεί στους επιβάτες
της αµαξοστοιχίας σε σχέση µε το συνολικό αριθµό θέσεων που περιέχει.

ΥΠΟ∆ΕΙΞΕΙΣ ΓΙΑ ΤΗ ΛΥΣΗ ΤΩΝ ΑΣΚΗΣΕΩΝ

Σε κάθε εφαρµογή µηχανογράφησης που απαιτεί την ανάπτυξη ενός πληροφοριακού συστήµατος, η
διαδικασία που ακολουθείται περιλαµβάνει τα τρία γνωστά στάδια που φέρουν τα ονόµατα ανάλυση,
σχεδιασµός και υλοποίηση. Στην προκειµένη περίπτωση ωστόσο, η διαδικασία της ανάλυσης δεν είναι
αναγκαία – αφού οι προδιαγραφές του προβλήµατος και οι απαιτήσεις των χρηστών δίδονται µαζί µε το
πρόβληµα – και το µόνο που απαιτείται είναι ο σωστός σχεδιασµός και η υλοποίηση της εφαρµογής. Εάν η
εκφώνηση του προβλήµατος περιλαµβάνει το µοντέλο οντοτήτων συσχετίσεων, η διαδικασία περιορίζεται
στην αναγωγή του µοντέλου αυτού στο ισοδύναµο σχεσιακό µοντέλο. Στην προκειµένη περίπτωση για
καθαρά εκπαιδευτικούς σκοπούς µπορεί να ζητηθεί και η αντίστροφη διαδικασία, δηλαδή στηριζόµενοι
στη δοµή του σχεσιακού µοντέλου να ζητηθεί η κατασκευή του µοντέλου οντοτήτων συσχετίσεων. Σε
κάθε περίπτωση, θα πρέπει να λάβει χώρα η δηµιουργία και διαµόρφωση των πινάκων στη Microsoft
Access, καθώς και η υλοποίηση των συσχετίσεων που υφίστανται ανάµεσά τους. Μετά την ολοκλήρωση
των παραπάνω διαδικασιών θα είναι καλό να καταχωρηθούν ενδεικτικές εγγραφές στους πίνακες έτσι ώστε
να είναι δυνατός ο έλεγχος τόσο της ορθότητας των αποτελεσµάτων που επιστρέφονται από τα ερωτήµατα
της βάσης όσο και της ισχύος των κανόνων ακεραιότητας αναφοράς στην περίπτωση εισαγωγής,
διαγραφής και τροποποίησης των σχετικών εγγραφών.

Στο σηµείο αυτό έχει τυπικά ολοκληρωθεί η σχεδίαση και η υλοποίηση της βάσης και ο χρήστης µπορεί να
περάσει στην υλοποίηση των υπόλοιπων στοιχείων όπως είναι οι φόρµες, οι εκθέσεις και τα ερωτήµατα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 20

ΕΡΓΑΣΤΗΡΙΟ 5

Μετά την ολοκλήρωση της σχεδίασης της δοµής της βάσης δεδοµένων ακολουθεί η σχεδίαση του
περιβάλλοντος αλληλεπίδρασης της εφαρµογής µε το χρήστη. Αυτό το περιβάλλον στη Microsoft Access
περιλαµβάνει την κατασκευή φορµών καταχώρησης δεδοµένων και τη δηµιουργία αναφορών δια της
χρήσης των οποίων είναι δυνατή η προεπισκόπηση και η εκτύπωση των δεδοµένων των πινάκων της
βάσης. Ας σηµειωθεί ωστόσο πως αυτά τα δεδοµένα µπορεί να προέρχονται όχι µόνο από τους πίνακες
αλλά και από κατάλληλα σχεδιασµένα ερωτήµατα. Στο εργαστήριο αυτό – καθώς και στο επόµενο – θα
ασχοληθούµε µε την κατασκευή φορµών καταχώρησης δεδοµένων ενώ στα επόµενα εργαστήρια θα
ασχοληθούµε µε την κατασκευή αναφορών που θα λαµβάνουν και θα εµφανίζουν δεδοµένα τόσο από τους
πίνακες όσο και από τα ερωτήµατα της εφαρµογής.

Η ∆ΟΜΗ ΤΟΥ ΣΧΕΣΙΑΚΟΥ ΣΧΗΜΑΤΟΣ

Το σχεσιακό σχήµα βάσης δεδοµένων που θα χρησιµοποιηθεί στα επόµενα εργαστήρια, είναι αυτό της
διαχείρισης ταινιών video που έχει ήδη παρουσιαστεί σε προηγούµενες ενότητες. Ωστόσο η δοµή της
βάσης έχει τροποποιηθεί έτσι ώστε να γίνει πιο παραµετρική και να χαρακτηρίζεται από µεγαλύτερη
ταχύτητα και ευελιξία όσον αφορά τη διαδικασία καταχώρησης και ανάκτησης δεδοµένων. Το νέο
σχεσιακό σχήµα της εφαρµογής διαχείρισης ταινιών video παρουσιάζεται στη συνέχεια (τα πεδία εκείνα
που παρουσιάζονται µε έντονη γραφή (bold) είναι τα πρωτεύοντα κλειδιά των πινάκων της βάσης).

ΟΝΟΜΑ ∆ΟΜΗ
ΠΙΝΑΚΑ ΠΙΝΑΚΑ

ΤΑΙΝΙΑ Κωδικός Ταινίας, Τίτλος Ταινίας, Απόθεµα_VHS, Απόθεµα_ΒΕΤΑ, Κωδικός


Εταιρείας Παραγωγής, Τιµή
ΤΡΑΓΟΥ∆Ι Κωδικός Τραγουδιού, Κωδικός Ερµηνευτή, Απόθεµα_CDs, Απόθεµα_Tapes,
Τιµή_CD, Τιµή_Tape, Κωδικός Εταιρείας Παραγωγής
∆ΙΑΝΟΜΕΑΣ Κωδικός ∆ιανοµέα, Επωνυµία, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ
ΕΤΑΙΡΕΙΑ Κωδικός Εταιρείας, Επωνυµία, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ
ΠΑΡΑΓΩΓΗΣ
ΕΡΜΗΝΕΥΤΗΣ Κωδικός Ερµηνευτή, Επώνυµο, Όνοµα, Ηλικία, Τηλέφωνο
ΗΘΟΠΟΙΟΣ Κωδικός Ηθοποιού, Επώνυµο, Όνοµα, Ηλικία, Τηλέφωνο
∆ΙΑΝΟΜΗ Κωδικός ∆ιανοµής, Κωδικός Ταινίας, Κωδικός ∆ιανοµέα
ΤΑΙΝΙΑΣ
∆ΙΑΝΟΜΗ Κωδικός ∆ιανοµής, Κωδικός Τραγουδιού, Κωδικός ∆ιανοµέα
ΤΡΑΓΟΥ∆ΙΟΥ
ΕΠΕΝ∆ΥΣΗ Κωδικός Επένδυσης, Κωδικός Ταινίας, Κωδικός Τραγουδιού
ΤΑΙΝΙΑΣ
ΣΥΜΜΕΤΟΧΗ Κωδικός Συµµετοχής, Κωδικός Ταινίας, Κωδικός Ηθοποιού
ΕΡΜΗΝΕΙΑ Κωδικός Ερµηνείας, Κωδικός Τραγουδιού, Κωδικός Ερµηνευτή

Να υλοποιήσετε τη βάση δεδοµένων στη Microsoft Access και να κατασκευάσετε


ΑΣΚΗΣΗ 05.01
το µοντέλο οντοτήτων συσχετίσεων.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 21

∆ΗΜΙΟΥΡΓΙΑ ΤΗΣ ΚΕΝΤΡΙΚΗΣ ΟΘΟΝΗΣ ΤΗΣ ΕΦΑΡΜΟΓΗΣ

Έχοντας ολοκληρώσει τη σχεδίαση και υλοποίηση της βάσης στη Microsoft Access µπορούµε τώρα να
περάσουµε στην υλοποίηση των φορµών αλληλεπίδρασης µε το χρήστη ξεκινώντας από την κατασκευή
της κεντρικής οθόνης. Συνήθως αυτή η οθόνη εµφανίζει κάποιο λογότυπο και επιτρέπει την
πραγµατοποίηση των βασικών µορφών διαχείρισης των δεδοµένων της εφαρµογής. Ακολουθώντας αυτή
την προσέγγιση µπορούµε να κατασκευάσουµε την κεντρική οθόνη σύµφωνα µε το πρότυπο που
παρουσιάζεται στο επόµενο σχήµα:

∆εν είναι δύσκολο να διαπιστώσει κανείς, πως η λειτουργικότητα αυτής της οθόνης χαρακτηρίζεται από
την ύπαρξη των ακόλουθων πλαισίων ελέγχου (form controls):

(α) Την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ που περιέχει τις επιλογές ΤΑΙΝΙΕΣ, ΤΡΑΓΟΥ∆ΙΑ, ΗΘΟΠΟΙΟΙ,
ΕΡΜΗΝΕΥΤΕΣ και ∆ΙΑΝΟΜΕΙΣ. Χρησιµοποιώντας αυτή την οµάδα, µπορούµε να καθορίσουµε τον
τύπο της πληροφορίας που επιθυµούµε να διαχειρισθούµε.

(β) Την οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ που περιέχει τις επιλογές ΕΙΣΑΓΩΓΗ, ∆ΙΑΓΡΑΦΗ,
ΚΑΤΑΛΟΓΟΣ, ΕΡΩΤΗΜΑΤΑ, ΕΚΤΥΠΩΣΕΙΣ. Χρησιµοποιώντας αυτή την οµάδα µπορούµε να
καθορίσουµε το είδος της επεξεργασίας που θέλουµε να πραγµατοποιήσουµε για τον επιλεγµένο τύπο
οντότητας.

Είναι προφανές πως η χρήση αυτών των δύο οµάδων επιλογών καθορίζει µε µοναδικό τρόπο το είδος της
διαδικασίας που επιθυµούµε να πραγµατοποιήσουµε. Στο παράδειγµα του προηγούµενου σχήµατος η
χρήση των επιλογών ΤΑΙΝΙΕΣ (στην οµάδα ΟΝΤΟΤΗΤΕΣ) και ΕΙΣΑΓΩΓΗ (στην οµάδα διαδικασίες)
σηµαίνει πως ο χρήστης επιθυµεί να προχωρήσει στην εισαγωγή µιας νέας ταινίας στη βάση δεδοµένων
της εφαρµογής.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 22

(γ) Το κουµπί εντολής που φέρει τον τίτλο «ΕΚΚΙΝΗΣΗ ΕΠΙΛΕΓΜΕΝΗΣ ∆ΙΑΧΕΙΡΙΣΗΣ» και το οποίο
ανοίγει την κατάλληλη σε κάθε περίπτωση φόρµα για αλληλεπίδραση µε το χρήστη. Στο παράδειγµα του
προηγούµενου σχήµατος, η χρήση αυτού του κουµπιού εντολής έχει ως αποτέλεσµα την εµφάνιση της
φόρµας καταχώρησης νέας ταινίας.

(δ) Το κουµπί εντολών που φέρει τον τίτλο «ΒΟΗΘΗΤΙΚΕΣ ΕΡΓΑΣΙΕΣ» το οποίο εάν χρησιµοποιηθεί
εµφανίζει τη φόρµα βοηθητικών εργασιών από όπου µπορούµε να καταχωρήσουµε πληροφορίες που
αφορούν τη διανοµή ταινιών και τραγουδιών, τη συµµετοχή ηθοποιών σε ταινίες, την ερµηνεία τραγουδιών
από ερµηνευτές, κ.λ.π.

Για να κατασκευάσουµε την κεντρική φόρµα θα πρέπει να επιλέξουµε τη διαδικασία νέας φόρµας σε
προβολή σχεδίασης και να ορίσουµε τα γενικά χαρακτηριστικά της χρησιµοποιώντας το φύλλο ιδιοτήτων
της. Στην προκειµένη περίπτωση η ύπαρξη του λογότυπου «Sound and Video Gallery» στην επιφάνεια της
φόρµας, καθιστά περιττή τη διαδικασία καθορισµού κάποιου τίτλου – για να αφαιρέσουµε τον τίτλο της
φόρµας πρέπει να ανοίξουµε το φύλλο ιδιοτήτων της, να µεταφερθούµε στη σελίδα «Μορφή», να
τοποθετήσουµε το δείκτη του ποντικιού στο πεδίο «Λεζάντα» και να πατήσουµε µία ή περισσότερες φορές
το πλήκτρο Space του πληκτρολογίου. Όσον αφορά τα υπόλοιπα χαρακτηριστικά εµφάνισης της φόρµας,
αυτή θα πρέπει να είναι όσο το δυνατό πιο απλή έτσι ώστε να µπορεί να χρησιµοποιηθεί εύκολα από το
χρήστη. Για το λόγο αυτό τόσο σε αυτή τη φόρµα όσο και σε όλες τις φόρµες τις εφαρµογής, έχουν
αφαιρεθεί τα πιο πολλά από τα χαρακτηριστικά εµφάνισης της φόρµας, όπως είναι οι γραµµές κύλισης, οι
δείκτες επιλογής εγγραφών και τα κουµπιά µετακίνησης (µε εξαίρεση τις φόρµες που εµφανίζουν
συγκεντρωτικά στοιχεία), οι διαχωριστικές γραµµές, το πλαίσιο ελέγχου, τα κουµπιά ελαχιστοποίησης και
µεγιστοποίησης, και το κουµπί «τι είναι». Ακόµη έχει απενεργοποιηθεί η αυτόµατη αλλαγή µεγέθους, ενώ
το στυλ περιγράµµατος έχει γίνει λεπτό έτσι ώστε να µην είναι δυνατή η αλλαγή του µεγέθους της,
διαδικασία, η οποία ίσως µπερδέψει το χρήστη. Το τµήµα του φύλλου ιδιοτήτων της φόρµας που περιέχει
τις τιµές που έχουν χρησιµοποιηθεί για όλες τις παραπάνω ιδιότητες, παρουσιάζεται στο επόµενο σχήµα:

Η τελευταία πολύ σηµαντική ιδιότητα που πρέπει να τεθεί για όλες τις φόρµες της εφαρµογής είναι ο
χαρακτηρισµός της φόρµας ως αποκλειστικής (modal) έτσι ώστε ο χρήστης να µην έχει τη δυνατότητα
χρήσης κάποιου άλλου στοιχείου της εφαρµογής, πριν τελειώσει την αλληλεπίδρασή του µαζί της (δηλαδή
ουσιαστικά πριν την κλείσει). Για να χαρακτηρίσουµε µια φόρµα ως αποκλειστική θα πρέπει να
µεταφερθούµε στη σελίδα «Άλλα (Others)» του φύλλο ιδιοτήτων της και στην ιδιότητα «Αποκλειστική» να
καταχωρήσουµε την τιµή «Ναι».

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 23

Η ∆ΙΑ∆ΙΚΑΣΙΑ ΚΑΤΑΣΚΕΥΗΣ ΤΩΝ ΟΜΑ∆ΩΝ ΕΠΙΛΟΓΩΝ

Στόχος αυτής της παραγράφου είναι η περιγραφή της διαδικασίας κατασκευής της οµάδας επιλογών που
φέρει τον τίτλο ΟΝΤΟΤΗΤΕΣ. Έχοντας κατανοήσει και εφαρµόσει αυτή τη διαδικασία, οι φοιτητές θα
πρέπει να στη συνέχεια να κατασκευάσουν µε την ίδιο τρόπο την οµάδα επιλογών για τις ∆ΙΑ∆ΙΚΑΣΙΕΣ
της εφαρµογής.

Για να κατασκευάσουµε αυτό το πλαίσιο ελέγχου, επιλέγουµε το στοιχείο «Οµάδα επιλογών» από την
εργαλειοθήκη, προσέχοντας ώστε το κουµπί του οδηγού στοιχείων ελέγχου (control wizard) να είναι
ενεργοποιηµένο (πατηµένο προς τα κάτω) . Εάν στη συνέχεια πατήσουµε µε το αριστερό πλήκτρο του
ποντικιού στο σηµείο της οθόνης στο οποίο επιθυµούµε να εµφανίσουµε την οµάδα επιλογών,
εµφανίζονται οι οθόνες του οδηγού η µία µετά την άλλη, δια της χρήσης των οποίων καθορίζουµε τα
χαρακτηριστικά αυτής της οµάδας. Οι οθόνες αυτές παρουσιάζονται συνοπτικά στα σχήµατα που
ακολουθούν:

Για να είναι δυνατή η εµφάνιση και χρήση των


παραπάνω οθονών θα πρέπει έχοντας
ενεργοποιηµένο τον οδηγό στοιχείων ελέγχου

να χρησιµοποιήσουµε από την εργαλειοθήκη το


κουµπί της οµάδας επιλογών

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 24

Η λειτουργία του οδηγού οµάδας επιλογών σε γενικές γραµµές είναι η ακόλουθη: Χρησιµοποιώντας την
πρώτη οθόνη του οδηγού καθορίζουµε τις επιλογές που θέλουµε να χρησιµοποιήσουµε καταχωρώντας
αυτές τη µία κάτω από την άλλη. Εάν κατά το άνοιγµα της φόρµας επιθυµούµε κάποια από αυτές τις
επιλογές να είναι προεπιλεγµένη, µπορούµε να ορίσουµε αυτή την επιλογή χρησιµοποιώντας τη δεύτερη
οθόνη. Βεβαίως έχουµε τη δυνατότητα να µην ορίσουµε προεπιλεγµένη επιλογή αλλά κάτι τέτοιο δεν
συνίσταται διότι ενδέχεται να οδηγήσει σε προβληµατική λειτουργία της εφαρµογής.

Στο επόµενο βήµα της διαδικασίας µας δίδεται η δυνατότητα για κάθε µια από τις επιλογές της οµάδας, να
ορίσουµε κάποια επιστρεφόµενη τιµή. Αυτή η διαδικασία είναι πολύ σηµαντική διότι επιτρέπει τη χρήση
της οµάδας επιλογών µέσα από τις φόρµες της εφαρµογής. ∆ιαπιστώνουµε πως ο οδηγός απέδωσε στις
πέντε επιλογές της οµάδες, τις διαδοχικές τιµές 1,2,3,4 και 5. Αν και µπορούµε να µεταβάλλουµε αυτές τις
τιµές ορίζοντας τις δικές µας, εν τούτοις στην προκειµένη περίπτωση δεν έχουµε κάποιο συγκεκριµένο
λόγο να το κάνουµε και για το λόγο αυτό τις αφήνουµε ως έχουν. Χρησιµοποιώντας τέλος τις δύο επόµενες
οθόνες, µπορούµε να καθορίσουµε τα χαρακτηριστικά εµφάνισης των επιλογών (εάν αυτά θα είναι
κουµπιά επιλογής πλαίσια ελέγχου ή κουµπιά εναλλαγής) και να αποδώσουµε στην οµάδα επιλογών
κάποιο όνοµα. Στην προκειµένη περίπτωση, το όνοµα που έχει αποδοθεί στην οµάδα επιλογών
ΟΝΤΟΤΗΤΕΣ είναι το ENTITY_LIST.

Οι ετικέτες ΟΝΤΟΤΗΤΕΣ και ∆ΙΑ∆ΙΚΑΣΙΕΣ που εµφανίζονται πάνω από την οµάδα επιλογών δεν είναι
παρά ετικέτες των οποίων τα χαρακτηριστικά έχουν διαµορφωθεί αναλόγως έτσι ώστε να αποκτήσουν µια
τρισδιάστατη υφή.

Εφαρµόζοντας την παραπάνω διαδικασία να κατασκευάσετε τις οµάδες επιλογών


ΟΝΤΟΤΗΤΕΣ και ∆ΙΑ∆ΙΚΑΣΙΕΣ και να αποδώσετε σε αυτές τα ονόµατα
ΑΣΚΗΣΗ 05.02
ENTITY_LIST και ACTION_LIST. Αυτά τα ονόµατα θα πρέπει να καταχωρηθούν
στην ιδιότητα «Όνοµα» που βρίσκεται στη σελίδα «Άλλα» του φύλλου ιδιοτήτων.

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

Σύµφωνα µε τα όσα έχουν αναφερθεί στις προηγούµενες παραγράφους η φόρµα της βάσης δεδοµένων που
θα ενεργοποιηθεί σε κάθε περίπτωση εξαρτάται από το ζεύγος των επιλογών του χρήστη στις δύο οµάδες
ιδιοτήτων που υλοποιήσαµε στην προηγούµενη διαδικασία. Αυτή η φόρµα θα ανοίξει χρησιµοποιώντας το
κουµπί εντολής που φέρει τον τίτλο «Εκκίνηση Επιλεγµένης ∆ιαχείρισης», και για το λόγο αυτό ο κώδικας
που θα προκαλέσει το άνοιγµα της φόρµας θα καταχωρηθεί στο συµβάν «Με το κλικ» της σελίδας
ιδιοτήτων που φέρει τον τίτλο «Συµβάν». Ο τρόπος µε τον οποίο εµφανίζεται το παράθυρο καταχώρησης
κώδικα για το συγκεκριµένο στοιχείο ελέγχου και για το συγκεκριµένο συµβάν, παρουσιάζεται στο
επόµενο σχήµα.

Στην επόµενη σελίδα θα παρουσιάσουµε τον τρόπο µε τον οποίο εµφανίζονται οι διάφορες φόρµες της
εφαρµογής για κάθε συνδυασµό επιλογών των οµάδων ΟΝΤΟΤΗΤΕΣ και ∆ΙΑ∆ΙΚΑΣΙΕΣ. Αυτές οι
φόρµες προφανώς θα πρέπει να υπάρχουν έτσι ώστε να µπορέσουν να απεικονισθούν στην οθόνη του
υπολογιστή και να χρησιµοποιηθούν από το χρήστη. Για το λόγο αυτό, πριν την υλοποίηση της
διαδικασίας που περιγράφεται στη συνέχεια θα πρέπει να υλοποιηθούν όλες οι φόρµες της εφαρµογής,
καθώς αυτές καλούνται µέσα από την παραπάνω κεντρική οθόνη. Αυτός είναι και ο λόγος για τον οποίο σε
πάρα πολλές περιπτώσεις η κεντρική οθόνη της εφαρµογής υλοποιείται συνήθως τελευταία.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 25

Όπως έχει ήδη αναφερθεί στις προηγούµενες ενότητες, κάθε φορά που επιλέγεται κάποια επιλογή από
κάποια οµάδα, λαµβάνει χώρα επιστροφή της τιµής που αντιστοιχεί σε αυτή την επιλογή. Ας θεωρήσουµε
για παράδειγµα την οµάδα επιλογών ENTITY_LIST και την ακέραια µεταβλητή currentEntity η χρήση της
οποίας απαιτεί µία δήλωση της µορφής Dim currentEntity As Integer. Εάν γράψουµε την πρόταση
currentEntity = ENTITY_LIST, τότε η τιµή που θα αποδοθεί στην εν λόγω µεταβλητή θα είναι η τιµή 1
εάν από την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ επιλέξουµε τις ΤΑΙΝΙΕΣ, η τιµή 2 εάν από την οµάδα
επιλογών επιλέξουµε τα τραγούδια, κ.ο.κ (η απόδοσης τιµής σε κάθε επιλογή γίνεται κατά τη διάρκεια
δηµιουργίας της οµάδας επιλογών όπως φαίνεται από τις οθόνες του οδηγού επιλογών που παρουσιάζονται
στην προηγούµενη σελίδα). Με εντελώς ανάλογο τρόπο µια πρότασης της µορφής currentAction =
ACTION_LIST (όπου currentAction ακέραια µεταβλητή) θα αποδώσει στη µεταβλητή currentAction την
τιµή 1 εάν από την οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ επιλέξουµε την εισαγωγή, την τιµή 2, εάν επιλέξουµε
τη διαγραφή, κ.ο.κ. Με ποιο τρόπο εποµένως θα εµφανίσουµε τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ όταν
ο χρήστης επιλέξει τις ΤΑΙΝΙΕΣ από την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ και την ΕΙΣΑΓΩΓΗ από την
οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ; Πολύ απλά. Με µία εντολή της µορφής

IF (currentEntity = 1) AND (currentAction = 1) THEN OpenForm [ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ]

Η παραπάνω εντολή παρουσιάζεται βέβαια σε µορφή ψευδοκώδικα, αποτελεί εν τούτοις ένα κλασσικό
παράδειγµα του τρόπου µε τον οποίο θα υλοποιηθεί η διαδικασία εµφάνισης της κατάλληλης φόρµας
ανάλογα µε την επιλογή του χρήστη. Στην επόµενη σελίδα παρουσιάζεται το πλήρες τµήµα κώδικα που
επιτρέπει την εµφάνιση των διαφόρων φορµών της εφαρµογής. Σε αυτόν τον κώδικα, η κλήση πολλαπλών
εντολών διακλάδωσης υλοποιείται χρησιµοποιώντας την εντολή Select Case η οποία περιλαµβάνεται στις
πιο κλασσικές γλώσσες προγραµµατισµού και εποµένως θεωρητικά θα πρέπει να είναι γνωστή. Η εντολή
που προκαλεί την εµφάνιση της φόρµας είναι η µέθοδος OpenForm του αντικειµένου DoCmd η οποία
περιγράφεται διεξοδικά στο κεφάλαιο 14 των σηµειώσεων του µαθήµατος και για το λόγο αυτό δεν
αναλύεται καθόλου. Εκείνο που κάνει ο κώδικας της επόµενης σελίδας, είναι να καθορίζει το κατάλληλο
όνοµα της φόρµας που επιθυµούµε να εµφανίσουµε για τους διάφορους συνδυασµούς επιλογών του
χρήστη, ενώ η εντολή OpenForm καλείται µία και µοναδική φορά στο τέλος της διαδικασίας για να
εµφανίσει την επιλεγµένη φόρµα στην οθόνη του υπολογιστή µας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 26

Private Sub START_MANAGEMENT_Click() Case 4


Dim currentEntity As Integer Select Case currentAction
Dim currentAction As Integer Case 1
currentEntity = ENTITY_LIST stDocName = "ΚΑΤΑΧΩΡΗΣΗ ΕΡΜΗΝΕΥΤΗ"
currentAction = ACTION_LIST Case 2
Select Case currentEntity stDocName = "∆ΙΑΓΡΑΦΗ ΕΡΜΗΝΕΥΤΗ"
Case 1 Case 3
Select Case currentAction stDocName = "ΚΑΤΑΛΟΓΟΣ ΕΡΜΗΝΕΥΤΩΝ"
Case 1 Case 4
stDocName = "ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ" stDocName = "ΕΡΩΤΗΜΑΤΑ ΕΡΜΗΝΕΥΤΩΝ"
Case 2 Case 5
stDocName = "∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ" stDocName = "ΕΚΤΥΠΩΣΕΙΣ ΕΡΜΗΝΕΥΤΩΝ"
Case 3 End Select
stDocName = "ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ" Case 5
Case 4 Select Case currentAction
stDocName = "ΕΡΩΤΗΜΑΤΑ ΤΑΙΝΙΩΝ" Case 1
Case 5 stDocName = "ΚΑΤΑΧΩΡΗΣΗ ∆ΙΑΝΟΜΕΑ"
stDocName = "ΕΚΤΥΠΩΣΕΙΣ ΤΑΙΝΙΩΝ" Case 2
End Select stDocName = "∆ΙΑΓΡΑΦΗ ∆ΙΑΝΟΜΕΑ"
Case 2 Case 3
Select Case currentAction stDocName = "ΚΑΤΑΛΟΓΟΣ ∆ΙΑΝΟΜΕΩΝ"
Case 1 Case 4
stDocName = "ΚΑΤΑΧΩΡΗΣΗ ΤΡΑΓΟΥ∆ΙΟΥ" stDocName = "ΕΡΩΤΗΜΑΤΑ ∆ΙΑΝΟΜΕΩΝ"
Case 2 Case 5
stDocName = "∆ΙΑΓΡΑΦΗ ΤΡΑΓΟΥ∆ΙΟΥ" stDocName = "ΕΚΤΥΠΩΣΕΙΣ ∆ΙΑΝΟΜΕΩΝ"
Case 3 End Select
stDocName = "ΚΑΤΑΛΟΓΟΣ ΤΡΑΓΟΥ∆ΙΩΝ" End Select
Case 4 DoCmd.OpenForm stDocName, , , stLinkCriteria
stDocName = "ΕΡΩΤΗΜΑΤΑ ΤΡΑΓΟΥ∆ΙΩΝ" End Sub
Case 5
stDocName = "ΕΚΤΥΠΩΣΕΙΣ ΤΡΑΓΟΥ∆ΙΩΝ"
End Select
Case 3
Select Case currentAction
Case 1
stDocName = "ΚΑΤΑΧΩΡΗΣΗ ΗΘΟΠΟΙΟΥ"
Case 2
stDocName = "∆ΙΑΓΡΑΦΗ ΗΘΟΠΟΙΟΥ"
Case 3
stDocName = "ΚΑΤΑΛΟΓΟΣ ΗΘΟΠΟΙΩΝ"
Case 4
stDocName = "ΕΡΩΤΗΜΑΤΑ ΗΘΟΠΟΙΩΝ"
Case 5
stDocName = "ΕΚΤΥΠΩΣΕΙΣ ΗΘΟΠΟΙΩΝ"
End Select

Η διαδικασία σχεδίασης της κεντρικής φόρµας ολοκληρώνεται µε την προσθήκη δύο ακόµη κουµπιών
εντολής εκ των οποίων το πρώτο που φέρει τον τίτλο ΒΟΗΘΗΤΙΚΕΣ ΕΡΓΑΣΙΕΣ ανοίγει την οµώνυµη
φόρµα που επιτρέπει τη συσχέτιση των εγγραφών των πινάκων ΤΑΙΝΙΑ, ΗΘΟΠΟΙΟΣ, ΤΡΑΓΟΥ∆Ι και
∆ΙΑΝΟΜΕΑΣ, ενώ το δεύτερο κουµπί που φέρει τον τίτλο ΕΞΟ∆ΟΣ ΑΠΟ ΤΗΝ ΕΦΑΡΜΟΓΗ τερµατίζει
τη λειτουργία του προγράµµατος. Ο κώδικας που πραγµατοποιεί αυτές τις διαδικασίες θα τοποθετηθεί
όπως και προηγουµένως στην ιδιότητα συµβάντος «Με το κλικ». Αυτός ο κώδικας για το κουµπί
εµφάνισης της φόρµας των βοηθητικών εργασιών θα έχει τη µορφή DoCmd.OpenForm “ΒΟΗΘΗΤΙΚΕΣ
ΕΡΓΑΣΙΕΣ” ενώ για το δεύτερο κουµπί που κλείνει την κεντρική φόρµα δεν έχουµε παρά να γράψουµε
την εντολή DoCmd.Close η οποία γενικά τερµατίζει τη λειτουργία του επιλεγµένου αντικειµένου της
βάσης δεδοµένων.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 27

ΚΑΤΑΣΚΕΥΗ ΤΩΝ ΒΑΣΙΚΩΝ ΦΟΡΜΩΝ ΚΑΤΑΧΩΡΗΣΗΣ ∆Ε∆ΟΜΕΝΩΝ

Στις επόµενες σελίδες παρουσιάζονται οι φόρµες καταχώρησης δεδοµένων για την ΤΑΙΝΙΑ, το
ΤΡΑΓΟΥ∆Ι και το ∆ΙΑΝΟΜΕΑ. Οι φόρµες αυτές µπορούν να κατασκευαστούν πάρα πολύ γρήγορα
χρησιµοποιώντας τον οδηγό φορµών (form wizard) της Microsoft Access. Εναλλακτικά µπορούµε να
κατασκευάσουµε τις φόρµες από µόνοι µας µε τον εξής τρόπο (το παράδειγµα που ακολουθεί αναφέρεται
στη φόρµα καταχώρησης τραγουδιών): από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων
µεταφερόµαστε στη σελίδα των φορµών και ξεκινούµε τη διαδικασία δηµιουργίας φόρµας σε προβολή
σχεδίασης – στην περίπτωση αυτή η Microsoft Access θα µας εµφανίσει µία κενή φόρµα. Πάνω στην
επιφάνεια της φόρµας αυτής θα πρέπει να τοποθετήσουµε ένα πλαίσιο κειµένου (edit box) για κάθε ένα
από τα πεδία του πίνακα τραγουδιού. Η τοποθέτηση των πλαισίων κειµένου θα γίνει χρησιµοποιώντας την
εργαλειοθήκη – εάν αυτή είναι κλειστή µπορούµε να την εµφανίσουµε εάν από το κεντρικό menu επιλογών
της Microsoft Access επιλέξουµε «Προβολή» και στη συνέχεια «Εργαλειοθήκη». Επειδή ο πίνακας
ΤΡΑΓΟΥ∆Ι έχει επτά πεδία θα τοποθετήσουµε ισάριθµα πλαίσια κειµένου το ένα κάτω από το άλλο, τα
οποία στη συνέχεια θα στοιχίσουµε κατακόρυφα και σε ίσες αποστάσεις µεταξύ τους χρησιµοποιώντας τις
επιλογές του menu «Μορφή» της κεντρικής γραµµής εργαλείων της εφαρµογής (οι επιλογές αυτές φέρουν
τα ονόµατα ΣΤΟΙΧΙΣΗ, ΜΕΓΕΘΟΣ, ΟΡΙΖΟΝΤΙΑ ΑΠΟΣΤΑΣΗ και ΚΑΤΑΚΟΡΥΦΗ ΑΠΟΣΤΑΣΗ).

Μετά την τοποθέτηση των επτά πεδίων και την στοίχισή τους στην επιφάνεια της φόρµας, θα πρέπει να τα
συσχετίσουµε µε τα αντίστοιχα πεδία του πίνακα ΤΡΑΓΟΥ∆Ι. Για να το κάνουµε αυτό ανοίγουµε το
φύλλο ιδιοτήτων της φόρµας, µεταφερόµαστε στη σελίδα ∆εδοµένα, και στο πεδίο ΠΡΟΕΛΕΥΣΗ
ΕΓΓΡΑΦΩΝ καταχωρούµε τον πίνακα ΤΡΑΓΟΥ∆Ι (τον πίνακα αυτό µπορούµε να τον επιλέξουµε από ένα
πλαίσιο λίστας που εµφανίζει τους πίνακες και τα ερωτήµατα της βάσης δεδοµένων). Έχοντας ορίσει την
πηγή των δεδοµένων προέλευσης για ολόκληρη τη φόρµα µπορούµε να πραγµατοποιήσουµε την ίδια
διαδικασία για κάθε ένα από τα πεδία που τοποθετήσαµε στην επιφάνειά της – στην περίπτωση αυτή το
πλαίσιο λίστας που εµφανίζεται δίπλα από την ιδιότητα «Προέλευση Στοιχείου Ελέγχου» περιέχει τα πεδία
του πίνακα ΤΡΑΓΟΥ∆Ι, και εποµένως για κάθε πεδίο της φόρµας ορίζουµε ως πηγή δεδοµένων
προέλευσης το αντίστοιχο πεδίο του πίνακα ΤΡΑΓΟΥ∆Ι.

Αν και η χρήση του οδηγού επιτρέπει την εύκολη και γρήγορη δηµιουργία φορµών µέσα από το
περιβάλλον της Microsoft Access, εν τούτοις συνίσταται η κατασκευή µερικών φορµών µε το χέρι έτσι
ώστε να εξοικειωθούν µε τη διαδικασία κατασκευής φορµών. Στο επόµενο σχήµα παρουσιάζονται οι
φόρµες καταχώρησης ταινιών και διανοµέων σε προβολή σχεδίασης. Από το σχήµα αυτό δεν είναι
δύσκολο να διαπιστωθεί πως µέσα σε κάθε πλαίσιο κειµένου που βρίσκεται στην επιφάνεια αυτών των
φορµών εµφανίζεται η προέλευση του πλαισίου κειµένου, δηλαδή το πεδίο του πίνακα από όπου το
αντίστοιχο πεδίο της φόρµας ανακτά τα δεδοµένα που εµφανίζει.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 28

Ένα ενδιαφέρον σηµείο που αξίζει να σχολιασθεί είναι η τοποθέτηση των πεδίων που συσχετίζονται µε τον
κωδικό στην ίδια ακριβώς θέση µε κάποιο από τα υπόλοιπα πεδία της φόρµας – τα δύο πεδία επικαλύπτονται
πλήρως. Στην πραγµατικότητα ο κωδικός είναι ένα κρυµµένο πεδίο, δηλαδή δεν εµφανίζεται στην επιφάνεια της
φόρµας κατά τη διάρκεια της χρήσης της (για να συµβεί αυτό θα πρέπει να µεταφερθούµε τη σελίδα «Μορφή»
του φύλλου ιδιοτήτων για αυτό το πεδίο, και στην ιδιότητα «Ορατό» να καταχωρήσουµε την τιµή «Όχι»). Ο
λόγος για τον οποίο λαµβάνει χώρα η χρήση του πεδίου µε τον τρόπο αυτό, είναι ο χαρακτηρισµός του πεδίου
Κωδικός, ως πεδίο αυτόµατης αρίθµησης (κατά τη διάρκεια της σχεδίασης των πινάκων ΤΑΙΝΙΑ και
∆ΙΑΝΟΜΕΑΣ). Αυτό σηµαίνει πως κάθε φορά που ο χρήστης προσθέτει µία νέα εγγραφή σε αυτούς τους
πίνακες, το πεδίο αυτό ενηµερώνεται αυτόµατα από την εφαρµογή λαµβάνοντας είτε συνεχόµενες είτε τυχαίες
τιµές, ανάλογα µε τις ιδιότητές του. Εφ’ όσον λοιπόν ο χρήστης δεν ασχολείται καθόλου µε αυτό το πεδίο δεν
έχουµε λόγο να το εµφανίζουµε στην επιφάνεια της φόρµας και για το λόγο αυτό το κρύβουµε. Σε άλλες βέβαια
περιπτώσεις που το πεδίο αυτό παίρνει εντελώς συγκεκριµένες τιµές – π.χ. αλφαριθµητικές συµβολοσειρές – το
πεδίο αυτό εµφανίζεται κανονικά στην επιφάνεια της φόρµας και χρησιµοποιείται µε τον ίδιο τρόπο µε τα
υπόλοιπα. Οι φόρµες ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ σε προβολή φόρµας, παρουσιάζονται στο επόµενο σχήµα. Από
το σχήµα αυτό διαπιστώνουµε την απουσία του πεδίου ΚΩ∆ΙΚΟΣ από την επιφάνειά τους – το πεδίο αυτό
ωστόσο υπάρχει και η λειτουργικότητά του είναι η ίδια µε εκείνα των υπόλοιπων πεδίων της φόρµας.

Το τελευταίο χαρακτηριστικό των φορµών καταχώρησης δεδοµένων που αξίζει να σχολιασθεί, είναι η ύπαρξη
των τριών κουµπιών εντολής στο κάτω µέρος τους. Από αυτά τα κουµπιά, τα δύο αριστερότερα επιτρέπουν την
αποθήκευση και την αναίρεσης της νέας εγγραφής, ενώ το δεξί κουµπί προκαλεί το κλείσιµο της τρέχουσας
φόρµας, τερµατίζοντας έτσι τη λειτουργία της:

Αποθήκευση Αναίρεση της Τερµατισµός της


της τρέχουσας τρέχουσας εγγραφής λειτουργίας της φόρµας
εγγραφής
Η δηµιουργία αυτών των τριών κουµπιών εντολής µπορεί να γίνει πάρα πολύ εύκολα χρησιµοποιώντας τον
οδηγό στοιχείων ελέγχου (control wizard). Εναλλακτικά µπορούµε να κατασκευάσουµε τα τρία κουµπιά µε το
χέρι, και στο συµβάν «Με τον κλικ» να τοποθετήσουµε για το κάθε κουµπί τον ακόλουθο κώδικα VBA:

ΛΕΙΤΟΥΡΓΙΑ ΚΩ∆ΙΚΑΣ VBA

Αποθήκευση Εγγραφής DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70


Αναίρεση Εγγραφής DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
Κλείσιµο Φόρµας DoCmd.Close

ΑΣΚΗΣΗ 05.03

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 29

Χρησιµοποιώντας τις τεχνικές και τις υποδείξεις της προηγούµενης ενότητας να


κατασκευάσετε φόρµες καταχώρησης δεδοµένων για τις ΤΑΙΝΙΕΣ, τα ΤΡΑΓΟΥ∆ΙΑ, τους
ΗΘΟΠΟΙΟΥΣ, τους ΕΡΜΗΝΕΥΤΕΣ και τους ∆ΙΑΝΟΜΕΙΣ.

ΚΑΤΑΣΚΕΥΗ ΤΗΣ ΦΟΡΜΑΣ ∆ΙΑΝΟΜΗΣ ΤΑΙΝΙΑΣ

Μετά την παρουσίαση του τρόπου κατασκευής των βασικών φορµών καταχώρησης δεδοµένων, ας περάσουµε
τώρα στη σχεδίαση και υλοποίηση των βοηθητικών φορµών που χρησιµοποιούνται για τη συσχέτιση των
δεδοµένων των πινάκων της βάσης. Στο παράδειγµα που ακολουθεί θα παρουσιάσουµε αναλυτικά τον τρόπο
κατασκευής της φόρµας ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ που για κάθε ταινία επιτρέπει τον καθορισµό της εταιρείας που
τη διανέµει. Έχοντας κατανοήσει τη διαδικασία κατασκευής αυτής της φόρµας, οι φοιτητές θα πρέπει να είναι σε
θέση να κατασκευάσουν και τις υπόλοιπες φόρµες της εφαρµογής – οι οποίες είναι η ∆ΙΑΝΟΜΗ
ΤΡΑΓΟΥ∆ΙΟΥ, η ΕΠΕΝ∆ΥΣΗ ΤΑΙΝΙΑΣ, η ΕΡΜΗΝΕΙΑ και η ΣΥΜΜΕΤΟΧΗ – καθώς και αυτές
χαρακτηρίζονται από τον ίδιο τρόπο λειτουργίας. Η προεπισκόπηση της φόρµας ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ σε
προβολή φόρµας (form view) παρουσιάζεται στο επόµενο σχήµα:

Είναι προφανές πως υπάρχον πολλοί τρόποι δια της χρήσης των οποίων δύναται να λάβει χώρα η συσχέτιση των
εγγραφών των πινάκων ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ και στην παραπάνω εικόνα δεν απεικονίζεται παρά ένας από
αυτούς. Πιο συγκεκριµένα η φόρµα περιλαµβάνει δύο πλαίσια λίστας τα οποία είναι έτσι διαµορφωµένα ώστε το
ένα να εµφανίζει τον κατάλογο των ταινιών ενώ το άλλο τον κατάλογο των εταιρειών διανοµής που είναι
καταχωρηµένες στη βάση δεδοµένων. Για να συσχετίσουµε µία εταιρεία µε ένα διανοµέα, επιλέγουµε τα
ονόµατά τους στα δύο πλαίσια λίστας, και στη συνέχεια πατώντας το κουµπί «Προσθήκη ∆ιανοµής»
καταχωρούµε τη νέα εγγραφή στον κατάλληλο πίνακα. Ταυτόχρονα η νέα συσχέτιση εµφανίζεται στο πλαίσιο
λίστας που ευρίσκεται στο κάτω µέρος της οθόνης. Στην περίπτωση κατά την οποία θέλουµε να καταργήσουµε
τη συσχέτιση ανάµεσα σε µια ταινία και σε ένα διανοµέα, επιλέγουµε το συνδυασµό τους από το πλαίσιο λίστας
«∆ιανοµή Ταινίας», και πατώντας το κουµπί «∆ιαγραφή ∆ιανοµής» διαγράφουµε την εγγραφή από τον
κατάλληλο πίνακα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 30

Ας ξεκινήσουµε λοιπόν την περιγραφή της διαδικασίας κατασκευής της παραπάνω φόρµας, παρουσιάζοντας τον
τρόπο δηµιουργίας του πλαισίου λίστας που εµφανίζει τα ονόµατα των ταινιών. Αυτό το πλαίσιο λίστας έχει
κατασκευαστεί µε τέτοιο τρόπο ώστε όταν ο χρήσης επιλέξει µία ταινία από τα περιεχόµενά του, να λάβει χώρα
επιστροφή του κωδικού που αντιστοιχεί στην επιλεγµένη ταινία. Με άλλα λόγια, στη διαδικασία κατασκευής
αυτού του πλαισίου, εµπλέκονται δύο πεδία, που φέρουν τα ονόµατα Κωδικός Ταινίας και Τίτλος Ταινίας, και
εποµένως, ως πηγή των δεδοµένων προέλευσης για αυτό το πλαίσιο θα ορίσουµε ένα ερώτηµα που επιστρέφει τα
δύο αυτά πεδία. Η προεπισκόπησή αυτού του ερωτήµατος – στο οποίο έχουµε δώσει το όνοµα FILM_LIST –
στις τρεις διαφορετικές προβολές στις οποίες αυτό δύναται να βρεθεί, παρουσιάζονται στο επόµενο σχήµα:

Αµέσως µετά την κατασκευή του ερωτήµατος FILM_LIST µπορούµε να κατασκευάσουµε το πλαίσιο λίστας που
θα εµφανίζει τα ονόµατα των ταινιών και θα επιστρέφει τον κωδικό της επιλεγµένης ταινίας. Η κατασκευή αυτού
του στοιχείου ελέγχου µπορεί να γίνει µε τη χρήση του οδηγού στοιχείων ελέγχου, οι διαδοχικές οθόνες του
οποίου παρουσιάζονται στα επόµενα σχήµατα:

Στο πρώτο βήµα της διαδικασίας καθορίζουµε πως τα Στο επόµενο βήµα της διαδικασίας εµφανίζουµε τον
περιεχόµενα του πλαισίου λίστας θα ανακτώνται από κατάλογο των ερωτηµάτων της βάσης και επιλέ-
ί ή ώ ώ FILM LIST

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 31

Στο επόµενο βήµα της διαδικασίας διαλέγουµε τα Στην περίπτωση αυτή ο οδηγός της Access εµφανίζει
πεδία του ερωτήµατος που θα χρησιµοποιήσουµε – τα περιεχόµενα αυτών των στηλών σε προβολή φύλ-
δηλαδή τον κωδικό και τον τίτλο ταινίας. λου δεδοµένων.

Επειδή το πλαίσιο λίστας θα εµφανίζει µόνο τους Στο στάδιο αυτό καθορίζουµε τον κωδικό ως το επι-
τίτλους των ταινιών, µηδενίζουµε το πλάτος της στή- στρεφόµενο πεδίο του στοιχείου ελέγχου – αυτό ση-
λης των κωδικών και αυξάνουµε το πλάτος της στή- µαίνει πως κάθε φορά που επιλέγεται µια ταινία θα
λης των τίτλων έτσι ώστε να χωρούν στο πλαίσιο. επιστρέφεται ο κωδικός που αντιστοιχεί σε αυτή.

Ολοκληρώνουµε τη διαδικασία αποδίδοντας στο Τα περιεχόµενα του πλαισίου λίστας που έχει δη-
πλαίσιο λίστας την ετικέτα FILM_LIST µιουργηθεί µε την παραπάνω διαδικασία.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 32

Μετά την ολοκλήρωση της παραπάνω διαδικασίας, το µόνο που έχουµε να κάνουµε είναι να αποδώσουµε
στο νέο πλαίσιο λίστας το κατάλληλο όνοµα – ως τέτοιο όνοµα διαλέγουµε το FILM_LIST – και το
καταχωρούµε ως τιµή στην ιδιότητα «Όνοµα» που βρίσκεται στη σελίδα «Άλλα» του φύλλου ιδιοτήτων
αυτού του στοιχείου ελέγχου. Εφαρµόζοντας την ίδια διαδικασία µπορούµε να κατασκευάσουµε το
πλαίσιο λίστας COMPANY_LIST που εµφανίζει τα ονόµατα των εταιρειών διανοµών ταινιών και
επιστρέφει τον κωδικό του επιλεγµένου διανοµέα.

Εφαρµόζοντας τη διαδικασία που παρουσιάστηκε στην προηγούµενη ενότητα να


υλοποιήσετε τα πλαίσια λίστας FILM_LIST και COMPANY_LIST που εµφανίζουν
ΑΣΚΗΣΗ 05.04
τους τίτλους των ταινιών και τα ονόµατα των διανοµέων και επιστρέφουν τον
κωδικό του επιλεγµένου στοιχείου.

Μετά την επιλογή του τίτλου της ταινίας και του ονόµατος του διανοµέα, µπορούµε να τα συσχετίσουµε
πατώντας το πλήκτρο «∆ιανοµή Ταινίας». Η διαδικασία αυτή έχει ως αποτέλεσµα την προσθήκη στον
πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ µιας νέας εγγραφής, η οποία περιλαµβάνει τρία πεδία: τον κωδικό της
επιλεγµένης ταινίας (που επιστρέφεται από το πλαίσιο λίστας FILM_LIST), τον κωδικό του επιλεγµένου
διανοµέα (που επιστρέφεται από το πλαίσιο λίστας COMPANY_LIST) καθώς και τον ΚΩ∆ΙΚΟ
∆ΙΑΝΟΜΗΣ που ως πεδίο αυτόµατης αρίθµησης λαµβάνει τιµή αυτόµατα από την Access και για το λόγο
αυτό δεν ασχολούµαστε µαζί του. Η διαδικασία σύνθεσης της νέας εγγραφής από τους κωδικούς των
επιλεγµένων στοιχείων στα δύο πλαίσια λίστας, παρουσιάζεται µε διαγραµµατικό τρόπο στο επόµενο
σχήµα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 33

Η καταχώρηση της νέας εγγραφής στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ θα λάβει χώρα χρησιµοποιώντας
την εντολή INSERT INTO της γλώσσας SQL. Η εντολή αυτή θα διαβιβαστεί ως όρισµα στη µέθοδο
RunSQL του αντικειµένου DoCmd της VBA, και θα δεχθεί µε τη σειρά της ως ορίσµατα τις
επιστρεφόµενες τιµές των δύο πλαισίων λίστας. Υπάρχουν δύο τρόποι µε τους οποίους µπορούµε να
ανακτήσουµε αυτές τις τιµές. Ο πρώτος τρόπος περιλαµβάνει τη δήλωση δύο µεταβλητών και την
καταχώρηση σε αυτές των εν λόγω τιµών, ενώ ο δεύτερος τρόπος περιλαµβάνει την απευθείας χρήση των
ονοµάτων των δύο πλαισίων. Ας παρουσιάσουµε αναλυτικά τις δύο αυτές µεθόδους. Σύµφωνα µε την
πρώτη µέθοδο, µπορούµε να ορίσουµε δύο ακέραιες µεταβλητές χρησιµοποιώντας δηλώσεις της µορφής
Dim currentFilm As Integer και Dim currentDistributor As Integer. Εάν στη συνέχεια γράψουµε
currentFilm = FILM_LIST και currentDistributor = COMPANY_LIST τότε οι δύο αυτές µεταβλητές θα
λάβουν τους κωδικούς της επιλεγµένης ταινίας και του επιλεγµένου διανοµέα αντίστοιχα. Στη συνέχεια η
καταχώρηση της νέας εγγραφής στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ θα λάβει χώρα µε µια εντολή της
µορφής

DoCmd.RunSQL "INSERT INTO [∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] ([Κωδικός Ταινίας], [Κωδικός ∆ιανοµέα])


VALUES (currentFilm, currentDistributor)"

Η διαδικασία καταχώρησης της νέας εγγραφής µπορεί να απλουστευθεί ακόµη περισσότερο εάν αντί να
χρησιµοποιήσουµε τις βοηθητικές µεταβλητές currentFilm και currentDistributor χρησιµοποιήσουµε στον
κώδικα SQL απευθείας τα ονόµατα των πεδίων, καλέσουµε δηλαδή την εντολή µε τη µορφή

DoCmd.RunSQL "INSERT INTO [∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] ([Κωδικός Ταινίας], [Κωδικός ∆ιανοµέα])


VALUES (FILM_LIST, COMPANY_LIST)"

Αυτή η διαδικασία ανάκτησης των επιστρεφόµενων τιµών των δύο πεδίων µπορεί να γενικευθεί για κάθε
τύπο πεδίου που επιστρέφει κάποια τιµή: η χρήση του ονόµατος του πεδίου ως όρισµα στις µεθόδους της
VBA έχει ως αποτέλεσµα τη λήψη της τιµής που επιστρέφεται από αυτό το πεδίο. Η κατάσταση αυτή είναι
εντελώς ανάλογη µε εκείνη που συσχετίζεται µε τη διαδικασία κλήσης µιας συνάρτησης: προκειµένου να
ανακτήσουµε την τιµή που επιστρέφεται από µία συνάρτηση µπορούµε να την καλέσουµε απλά µε το
όνοµά της και χρησιµοποιώντας τις κατάλληλες σε κάθε περίπτωση τιµές ορισµάτων.

Ολοκληρώνοντας την περιγραφή της διαδικασίας καταχώρησης της νέας εγγραφής στον πίνακα
∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ, θα πρέπει να αναφέρουµε πως εφ΄ όσον αυτή η διαδικασία πραγµατοποιείται
πατώντας το κουµπί «Προσθήκη ∆ιανοµής», ο κώδικας που παρουσιάσαµε στην προηγούµενη παράγραφο,
θα πρέπει να τοποθετηθεί στο συµβάν «Με το κλικ» για αυτό το στοιχείο ελέγχου. Το επόµενο σχήµα
παρουσιάζει τον κώδικα εκτέλεσης της εντολής SQL ο οποίος κατά τα γνωστά θα πρέπει να καταχωρηθεί
στο περιβάλλον ανάπτυξης κώδικα της Microsoft Access.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 34

Παρατηρώντας προσεκτικά τον παραπάνω κώδικα δεν είναι δύσκολο να διαπιστώσουµε πως εκτός από τη µέθοδο
RunSQL που προσθέτει τη νέα εγγραφή στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ υπάρχει και η εντολή
FILM_COMPANY_LIST.Requery. Το όνοµα FILM_COMPANY_LIST αναφέρεται στο µεγάλο πλαίσιο λίστας
που βρίσκεται στο κάτω µέρος της φόρµας και το οποίο εµφανίζει τις συσχετίσεις ταινιών και διανοµέων που
έχουν ήδη πραγµατοποιηθεί. Η εντολή Requery χρησιµοποιείται για την επανεκτέλεση της εντολής που γεµίζει
µε δεδοµένα το πλαίσιο λίστας, και η κλήση της µετά την εκτέλεση της µεθόδου RunSQL είναι αναγκαία έτσι
ώστε το πλαίσιο λίστας να εµφανίσει και την νέα εγγραφή. Είναι προφανές πως τα περιεχόµενα αυτού του
στοιχείου ελέγχου συσχετίζονται άµεσα µε τον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ ο οποίος περιέχει τους κωδικούς
των ταινιών και των διανοµέων από τους οποίους αυτές διανέµονται. Επειδή όµως η πληροφορία που εµφανίζεται
σε αυτό το στοιχείο ελέγχου δεν αφορά τους κωδικούς αλλά τα ονόµατα των ταινιών και των διανοµέων, είναι
προφανές πως η πηγή των δεδοµένων προέλευσης αυτού του στοιχείου είναι ένα ερώτηµα που βασίζεται στους
πίνακες ΤΑΙΝΙΑ, ∆ΙΑΝΟΜΕΑΣ και ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Το ερώτηµα αυτό φέρει το όνοµα «ΟΝΟΜΑΤΑ
ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ» και η προεπισκόπησή του σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων, και
προβολή κώδικα SQL παρουσιάζεται στη συνέχεια:

∆εν είναι δύσκολο να διαπιστώσει κανείς πως το παραπάνω ερώτηµα εµφανίζει τους τίτλους των ταινιών και τα
ονόµατα των διανοµέων για όσα ζεύγη (ταινία, διανοµέας) συσχετίζονται µεταξύ τους, δηλαδή οι κωδικοί τους
ανήκουν στην ίδια εγγραφή του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Το παραπάνω ερώτηµα επιστρέφει επίσης και τον
κωδικό εγγραφής ο οποίος θα χρησιµοποιηθεί στη συνέχεια για τη διαγραφή κάποιας διανοµής. Έχοντας
κατασκευάσει το παραπάνω ερώτηµα ας δούµε τώρα τον τρόπο µε τον οποίο κατασκευάζεται το πλαίσιο λίστας
FILM_COMPANY_LIST δια της χρήσης του οδηγού στοιχείων ελέγχου της Access. Οι διαδοχικές οθόνες αυτού
του οδηγού και το είδος της πληροφορίας που καθορίζουµε σε κάθε µία από αυτές, παρουσιάζονται στα επόµενα
σχήµατα. Σε µια συνοπτική περιγραφή οι διαδικασίες που λαµβάνουν χώρα δια της χρήσης αυτού του οδηγού,
είναι οι εξής:

Χρησιµοποιώντας τις δύο πρώτες οθόνες καθορίζουµε πως η πηγή των δεδοµένων προέλευσης για το νέο πλαίσιο
λίστας, θα είναι το ερώτηµα «ΟΝΟΜΑΤΑ ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ». Επιλέγουµε και τα τρία πεδία του
ερωτήµατος – καθώς τα χρειαζόµαστε όλα – και κατόπιν ρυθµίζουµε τα πλάτη των στηλών έτσι ώστε να
εµφανίζουν σωστά τις εγγραφές του ερωτήµατος. Η στήλη ΚΩ∆ΙΚΟΣ ∆ΙΑΝΟΜΗΣ δεν επιθυµούµε να
εµφανίζεται στο νέο πλαίσιο λίστας και για το λόγο αυτό µηδενίζουµε το πλάτος της. Ωστόσο αυτή θα πρέπει να
είναι η τιµή που επιστρέφεται από το στοιχείο ελέγχου κάθε φορά που ο χρήστης επιλέγει κάποια εγγραφή σε
αυτό – δηλαδή κάποιο συνδυασµό (τίτλος ταινίας, όνοµα διανοµέα). Την πληροφορία αυτή την καθορίζουµε
χρησιµοποιώντας την πέµπτη οθόνη του οδηγού. Η διαδικασία αυτή ολοκληρώνεται αποδίδοντας στο νέο πλαίσιο
λίστας τη λεζάντα «∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ».

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 35

Να κατασκευάσετε το πλαίσιο λίστας FILM_COMPANY_LIST στην επιφάνεια της


ΑΣΚΗΣΗ 05.05
φόρµας ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ χρησιµοποιώντας τον οδηγό στοιχείων της Access.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 36

Από την παραπάνω περιγραφή καθίσταται προφανές πως κάθε φορά που ο χρήστης επιλέγει µία εγγραφή
στο πλαίσιο λίστας FILM_COMPANY_LIST αυτό επιστρέφει τον κωδικό διανοµής για την αντίστοιχη
εγγραφή του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Η κατάσταση αυτή παρουσιάζεται µε διαγραµµατικό τρόπο
στο ακόλουθο σχήµα. Στο παράδειγµα του σχήµατος αυτού, ο χρήστης επέλεξε στο σύνθετο πλαίσιο
FILM_COMPANY_LIST το συνδυασµό (Τίτλος Ταινίας, Όνοµα ∆ιανοµέα) = (Prince of Tides, Ήχος).
Από τους πίνακες ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ διαπιστώνουµε πως οι κωδικοί αυτών των δύο εγγραφών
είναι οι αριθµοί 23 και 4 αντίστοιχα. Εποµένως η τιµή που θα επιστρέψει το πλαίσιο λίστας
FILM_COMPANY_LIST είναι ο κωδικός εγγραφής του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ για το ζεύγος
(Κωδικός Ταινίας, Κωδικός ∆ιανοµέα) = (23, 4) ο οποίος στην προκειµένη περίπτωση, είναι ο αριθµός 26.

Εάν λοιπόν θέλουµε να διαγράψουµε αυτή την εγγραφή – δηλαδή να καταργήσουµε τη διανοµή της ταινίας
PRINCE OF TIDES από την εταιρεία διανοµής ΗΧΟΣ, δεν έχουµε παρά να καλέσουµε τη µέθοδο
RunSQL του αντικειµένου DoCmd µε τη µορφή

DoCmd.RunSQL "DELETE FROM [∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] WHERE [Κωδικός Εγγραφής] = 26"

Γενικεύοντας την παραπάνω περίπτωση, µπορούµε να αντικαταστήσουµε την τιµή 26 µε το όνοµα


FILM_COMPANY_LIST του πλαισίου λίστας έτσι ώστε να διαγράφουµε κάθε φορά την εγγραφή του
πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ που αντιστοιχεί στην εκάστοτε επιλογή του χρήστη. Αυτός ο κώδικας θα
καταχωρηθεί στο συµβάν «Με το κλικ» του κουµπιού εντολής «∆ιαγραφή ∆ιανοµής» που βρίσκεται στην
επιφάνεια της φόρµας «∆ιανοµή Ταινίας» και παρουσιάζεται αναλυτικά στο επόµενο σχήµα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 37

Εκτός από τη µέθοδο RunSQL ο παραπάνω κώδικας περιλαµβάνει και την κλήση της µεθόδου Requery για
το πλαίσιο λίστας FILM_COMPANY_LIST. Αυτή η µέθοδος χρειάζεται έτσι ώστε µετά τη διαγραφή της
επιλεγµένης εγγραφής από τον πίνακα ∆ΙΑΝΟΜΗΣ ΤΑΙΝΙΑΣ να επανεκτελεστεί το ερώτηµα
«ΟΝΟΜΑΤΑ ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ» και να ενηµερωθούν τα περιεχόµενα του πλαισίου λίστας. Ας
αναφερθεί στο σηµείο αυτό, πως αυτή η διαδικασία εφαρµόζεται κάθε φορά που τροποποιούνται τα
περιεχόµενα ενός πίνακα ή ερωτήµατος από το οποίο κάποιο στοιχείο ελέγχου – συνήθως πλαίσιο λίστας
(list box) ή σύνθετο πλαίσιο (combo box) – διαβάζει δεδοµένα.

Να κατασκευαστούν τα κουµπιά εντολής Προσθήκη ∆ιανοµής και ∆ιαγραφή


ΑΣΚΗΣΗ 05.06 ∆ιανοµής που επιτρέπουν την εισαγωγή εγγραφών της µορφής (Κωδικός Ταινίας,
Κωδικός ∆ιανοµέα) στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ.

ΚΑΤΑΣΚΕΥΗ ΤΗΣ ΦΟΡΜΑΣ ∆ΙΑΓΡΑΦΗΣ ΤΑΙΝΙΑΣ

Η διαγραφή µιας ταινίας από τη βάση δεδοµένων της εφαρµογής λαµβάνει χώρα χρησιµοποιώντας τη
φόρµα του επόµενου σχήµατος. Σε πλήρη αναλογία µε τις προηγούµενες περιπτώσεις, οι τίτλοι των
ταινιών εµφανίζονται σε κατάλληλα διαµορφωµένο πλαίσιο λίστας το οποίο επιστρέφει τον κωδικό της
επιλεγµένης ταινίας µε τη βοήθεια του οποίου λαµβάνει χώρα και η διαγραφή της ταινίας από τον οµώνυµο
πίνακα χρησιµοποιώντας το κατάλληλο κουµπί εντολής.

Ιδιαίτερη έµφαση θα πρέπει να δοθεί σε περιπτώσεις ύπαρξης


σχετικών εγγραφών σε άλλους πίνακες της βάσης: εάν σε
αυτούς τους πίνακες υπάρχουν εγγραφές που αναφέρονται
στην εγγραφή της ταινίας που επιθυµούµε να διαγράψουµε,
αυτές θα πρέπει να διαµορφωθούν ανάλογα έτσι ώστε να
διασφαλισθεί η ακεραιότητα αναφοράς εγγραφών (referential
integrity) και να αποκλειστεί η πιθανότητα ύπαρξης
ασυνεπών δεδοµένων (inconsistent data). Υπάρχουν δύο
τρόποι µε τους οποίους µπορεί να πραγµατοποιηθεί αυτή η
διαδικασία. Ο πρώτος τρόπος περιλαµβάνει τη διαγραφή
αυτών των εγγραφών δια της χρήσης της µεθόδου RunSQL
του αντικειµένου DoCmd. Εναλλακτικά µπορούµε να
ενεργοποιήσουµε το µηχανισµό ελέγχου κανόνων
ακεραιότητας της Microsoft Access έτσι ώστε η διαδικασία
διαγραφής των σχετικών εγγραφών να γίνεται αυτόµατα
χωρίς την παρέµβαση του χρήστη. Στην περιγραφή που
ακολουθεί θα παρουσιαστούν και οι δύο αυτές µέθοδοι. Από
την άλλη πλευρά, η εναλλακτική λύση είναι η τροποποίηση
του περιεχοµένου των σχετικών εγγραφών, δια της απόδοσης
της τιµής NULL στο πεδίο Κωδικός Ταινίας που αναφέρεται
στις εγγραφές που επιθυµούµε να διαγράψουµε.

ΑΣΚΗΣΗ 05.07 Να υλοποιηθεί η φόρµα ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 38

Προκειµένου να χρησιµοποιήσουµε την ενσωµατωµένη λειτουργία ελέγχου ακεραιότητας εγγραφών της


Microsoft Access θα πρέπει να ανοίξουµε το παράθυρο των συσχετίσεων της βάσης δεδοµένων και να
ενεργοποιήσουµε τον οµώνυµο µηχανισµό έτσι όπως παρουσιάζεται στο επόµενο σχήµα. Υπάρχουν
πολλές επιλογές που µπορούµε να χρησιµοποιήσουµε, και οι οποίες σε γενικές γραµµές είναι οι εξής:

(α) Να µην χρησιµοποιήσουµε καθόλου τον εν λόγω µηχανισµό (δηλαδή να µην επιλέξουµε το πλαίσιο
επιλογής της παραπάνω φόρµας που φέρει τον τίτλο «Ενεργοποίηση ακεραιότητας αναφορών»). Στην
περίπτωση αυτή µπορούµε να διαγράφουµε όσες εγγραφές θέλουµε και από οποιοδήποτε πίνακα
επιθυµούµε, χωρίς να εξετάζουµε αν υπάρχουν εγγραφές σε άλλους πίνακες που να αναφέρονται στις
εγγραφές προς διαγραφή. Αυτή η επιλογή είναι σχεδόν βέβαιο πως θα οδηγήσει στη δηµιουργία ασυνεπών
δεδοµένων – εκτός εάν οι πίνακες της βάσης δεν συσχετίζονται µεταξύ τους – και θα είναι καλό να
αποφεύγεται.

(β) Να ενεργοποιήσουµε το µηχανισµό ελέγχου ακεραιότητας εγγραφών, αλλά χωρίς να ζητήσουµε από
την Access να προχωρά σε αυτόµατη διαδοχική διαγραφή των σχετικών εγγραφών (αυτό σηµαίνει πως το
οµώνυµο πλαίσιο επιλογής (check box) της παραπάνω φόρµας δεν θα πρέπει να είναι επιλεγµένο). Στην
περίπτωση αυτή και εφ’ όσον η εγγραφή που επιθυµούµε να διαγράψουµε χαρακτηρίζεται από την ύπαρξη
σχετικών εγγραφών άλλων πινάκων της βάσης που αναφέρονται σε αυτή, θα λάβει χώρα εµφάνιση ενός
ενηµερωτικού µηνύµατος από τη Microsoft Access που θα µας γνωστοποιεί πως δεν µπορούµε να
ολοκληρώσουµε αυτή τη διαδικασία, λόγω της ύπαρξης σχετικών εγγραφών σε άλλους πίνακες:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 39

Το παραπάνω µήνυµα σφάλµατος εµφανίζεται όταν ανοίξουµε τον πίνακα ΤΑΙΝΙΑ σε προβολή φύλλου
δεδοµένων και επιχειρήσουµε να διαγράψουµε κάποια ταινία η οποία συσχετίζεται µε κάποιο διανοµέα.
Αντίθετα εάν η διαγραφή της ταινία λάβει χώρα µέσα από τη φόρµα ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ θα εµφανισθεί
το επόµενο µήνυµα σφάλµατος που και αυτό µε τη σειρά του θα µας πληροφορεί πως η διαγραφή της
ταινίας δεν είναι επιτρεπτή διότι παραβιάζονται οι κανόνες ακεραιότητας της βάσης δεδοµένων.

Ο λόγος για τον οποίο η Microsoft Access εµφανίζει δύο διαφορετικά µηνύµατα τα οποία ουσιαστικά
αναφέρονται στην ίδια περίπτωση σφάλµατος, είναι πως στην πρώτη περίπτωση η διαγραφή της ταινίας
λαµβάνει χώρα µέσα από προεπισκόπηση πίνακα σε προβολή φύλλου δεδοµένων, ενώ στη δεύτερη
περίπτωση, η πράξη της διαγραφής πραγµατοποιείται δια της εκτέλεσης κάποιου ερωτήµατος ενέργειας.

(γ) Να ενεργοποιήσουµε το µηχανισµό ελέγχου ακεραιότητας εγγραφών και ταυτόχρονα να αναθέσουµε


στην Access τη διαδοχική διαγραφή των σχετικών εγγραφών των άλλων πινάκων. (αυτό σηµαίνει πως το
πλαίσιο επιλογής (check box) του παραθύρου «Επεξεργασία Σχέσεων» που φέρει τον τίτλο «∆ιαδοχική
διαγραφή των σχετικών εγγραφών» θα πρέπει να είναι επιλεγµένο). Στην περίπτωση αυτή η εφαρµογή θα
ενηµερώσει το χρήστη πως κάποιες εγγραφές πρόκειται να διαγραφούν, και θα τον ρωτήσει εάν επιθυµεί ή
όχι την ολοκλήρωση αυτής της διαδικασίας:

Στην περίπτωση κατά την οποία δεν επιθυµούµε την ενηµέρωση του χρήστη µε τον τρόπο αυτό, θα πρέπει
να µεταφερθούµε στην οµάδα επιλογών «Εργαλεία» του κεντρικού menu της Access, να ανοίξουµε το
παράθυρο «Επιλογές» και να αποµακρύνουµε τις επιλογές (check marks) από τα στοιχεία «Αλλαγές
εγγραφών», «∆ιαγραφές εγγραφών» και «Ερωτήµατα ενέργειας». Στην περίπτωση αυτή η διαγραφή των
εγγραφών θα γίνεται αυτόµατα από την εφαρµογή και χωρίς την παραµικρή παρέµβαση του χρήστη.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 40

Να ενεργοποιήσετε το µηχανισµό ελέγχου ακεραιότητας εγγραφών της Microsoft Access


ΑΣΚΗΣΗ 05.08 έτσι ώστε κάθε φορά που διαγράφεται κάποια εγγραφή του πίνακα ΤΑΙΝΙΑ να
διατηρείται η ακεραιότητα αναφορών της βάσης δεδοµένων.

Η άλλη εναλλακτική επιλογή που έχουµε στη διάθεσή µας είναι να µην ενεργοποιήσουµε το µηχανισµό
ελέγχου της ακεραιότητας αναφορών αλλά να διαγράψουµε τις σχετικές εγγραφές µε κώδικα που θα γράψουµε
µόνοι µας. Ας θεωρήσουµε ως παράδειγµα τον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ µε πεδία τον κωδικό ταινίας και
τον κωδικό διανοµέα. Εάν επιλέξουµε µια εγγραφή στο πλαίσιο λίστας της φόρµας διαγραφής ταινίας – ας
υποθέσουµε πως το όνοµα αυτού του πλαισίου είναι το FILM_LIST – αυτό κατά τα γνωστά θα επιστρέψει τον
κωδικό της ταινίας που επιλέχθηκε. Για να διαγράψουµε λοιπόν όλες τις εγγραφές του πίνακα ∆ΙΑΝΟΜΗ
ΤΑΙΝΙΑΣ που αναφέρονται σε αυτόν τον κωδικό, θα πρέπει να καλέσουµε τη µέθοδο RunSQL του
αντικειµένου DoCmd µε τη µορφή

DoCmd.RunSQL “DELETE FROM [∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] WHERE [Κωδικός Ταινίας] = FILM_LIST”

Εφαρµόζοντας παρόµοια διαδικασία, µπορούµε να διαγράψουµε τις σχετικές εγγραφές στους άλλους πίνακες
της βάσης που αναφέρονται στην ταινία που θέλουµε να διαγράψουµε. Τέλος το µόνο που έχουµε να κάνουµε
είναι να διαγράψουµε και την ίδια την εγγραφή από τον πίνακα ΤΑΙΝΙΑ γράφοντας

DoCmd.RunSQL “DELETE FROM ΤΑΙΝΙΑ WHERE Κωδικός = FILM_LIST”

Εκτός από τη διαγραφή των σχετικών εγγραφών των άλλων πινάκων της βάσης, η ακεραιότητα των δεδοµένων
διασφαλίζεται αποδίδοντας στο ξένο κλειδί που αναφέρεται στις εγγραφές προς διαγραφή, την τιµή NULL.
Στην περίπτωση αυτή η µέθοδος RunSQL θα κληθεί µε τη µορφή

DoCmd.RunSQL “UPDATE [∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ]


SET [Κωδικός Ταινίας] = NULL WHERE [Κωδικός Ταινίας] = FILM_LIST”

Η επιλογή της µεθόδου που τελικά θα χρησιµοποιήσουµε εξαρτάται από τις απαιτήσεις που υφίστανται σε
κάθε περίπτωση. Στην συγκεκριµένη εφαρµογή, δεν έχουµε λόγο να διατηρούµε εγγραφές στον πίνακα
[∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] που αναφέρονται σε εγγραφές του πίνακα ΤΑΙΝΙΑ που έχουν διαγραφεί, και για το
λόγο αυτό θα είναι καλό να τις διαγράφουµε και αυτές, είτε χρησιµοποιώντας την αυτόµατη διαδικασία
διαγραφής της Microsoft Access, είτε γράφοντας τον κατάλληλο κώδικα από µόνοι µας.

Να υλοποιήσετε τις φόρµες ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ, ∆ΙΑΓΡΑΦΗ ΤΡΑΓΟΥ∆ΙΟΥ,


∆ΙΑΓΡΑΦΗ ∆ΙΑΝΟΜΕΑ, ∆ΙΑΓΡΑΦΗ ΕΡΜΗΝΕΥΤΗ και ∆ΙΑΓΡΑΦΗ ΗΘΟΠΟΙΟΥ
ΑΣΚΗΣΗ 05.09
φροντίζοντας ώστε σε κάθε περίπτωση να διατηρείται η ακεραιότητα αναφοράς των
δεδοµένων της βάσης.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 41

ΕΡΓΑΣΤΗΡΙΟ 6

Στο έκτο εργαστήριο του µαθήµατος συνεχίζουµε την κατασκευή φορµών της εφαρµογής διαχείρισης
ταινιών video κατασκευάζοντας φόρµα συγκεντρωτικών στοιχείων που εµφανίζει τις εγγραφές του πίνακα
ταινία τη µία κάτω από την άλλη. Επιλέγοντας ο χρήστης κάποια από αυτές τις εγγραφές µπορεί στη
συνέχεια να ανοίξει την καρτέλα της συγκεκριµένης ταινίας που επέλεξε για να τροποποιήσει το
περιεχόµενό της. Επιπλέον έχει τη δυνατότητα χρησιµοποιώντας κατάλληλα κουµπιά εντολής να
καταχωρήσει νέα ταινία στη βάση δεδοµένων, ή να διαγράψει την ταινία που έχει επιλεγεί.

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

Η κατασκευή µιας φόρµας συγκεντρωτικών στοιχείων που εµφανίζει τις εγγραφές του πίνακα ΤΑΙΝΙΑ τη
µία κάτω από την άλλη, µπορεί να πραγµατοποιηθεί πάρα πολύ εύκολα, χρησιµοποιώντας τον οδηγό
φορµών (form wizard) της Microsoft Access. Τυπικό παράδειγµα µιας τέτοιας φόρµας παρουσιάζεται στο
επόµενο σχήµα:

∆εν είναι δύσκολο να διαπιστώσει κανείς πως η φόρµα αυτή περιέχει τρία κουµπιά εντολής, δια της
χρήσης των οποίων είναι δυνατή η εισαγωγή, η διαγραφή και η ενηµέρωση των εγγραφών του πίνακα
ΤΑΙΝΙΑ. Στην επόµενη σελίδα θα παρουσιάσουµε αναλυτικά τη διαδικασία κατασκευής αυτής της
φόρµας, χρησιµοποιώντας τον οδηγό φορµών της Microsoft Access.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 42

Ας µεταφερθούµε λοιπόν στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων και από τη σελίδα «Φόρµες»
ας επιλέξουµε τη διαδικασία κατασκευής της νέας φόρµας δια της χρήσης του οδηγού. Στην περίπτωση αυτή η
κατασκευή της φόρµας περιλαµβάνει µια διαδικασία τεσσάρων βηµάτων, όπως φαίνεται στα σχήµατα που
ακολουθούν:

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

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 43

Από το παραπάνω σχήµα διαπιστώνουµε πως η φόρµα έτσι όπως έχει δηµιουργηθεί επιτρέπει την
προσθήκη, διαγραφή και τροποποίηση εγγραφών, κάτι που στην προκειµένη περίπτωση δεν είναι
επιθυµητό, καθώς η µόνη λειτουργία που επιθυµούµε είναι απλά η προεπισκόπηση των εγγραφών και
τίποτε περισσότερο. Η ύπαρξη επίσης του πεδίου κωδικός δεν είναι αναγκαία, καθώς η χρήση του
συσχετίζεται µε τη δοµή της βάσης δεδοµένων και είναι κάτι που δεν ενδιαφέρει τον τελικό χρήστη.
Ωστόσο το πεδίο αυτό δεν µπορεί να διαγραφεί, καθώς χρειάζεται στη διαδικασία τροποποίησης της
επιλεγµένης εγγραφής. Για το λόγο αυτό µπορούµε να το κάνουµε αόρατο (δηλαδή να αποδώσουµε στην
ιδιότητα «Ορατό» που ευρίσκεται στη σελίδα «Μορφή» του φύλλου ιδιοτήτων του την τιµή «Όχι»), να το
µεταφέρουµε και να το κρύψουµε κάτω από κάποιο άλλο πεδίο (για παράδειγµα το πεδίο «Τίτλος
Ταινίας»), και στη συνέχεια να µικρύνουµε µε το ποντίκι το πλάτος της φόρµας έτσι ώστε το τελευταίο
ορατό από τα δεξιά πεδίο, να είναι η τιµή της ταινίας. Όσον αφορά τη ρύθµιση των άλλων ιδιοτήτων της
φόρµας, αυτές θα πρέπει να λάβουν τις τιµές που απεικονίζονται στο επόµενο σχήµα:

Μετά την κατασκευή της φόρµας των συγκεντρωτικών στοιχείων θα πρέπει να κατασκευάσουµε τα τρία
κουµπιά που ευρίσκονται στην επιφάνειά της. Από αυτά τα κουµπιά εκείνα που επιτρέπουν την εισαγωγή
νέας ταινίας καθώς και την τροποποίηση υπάρχουσας ταινίας, ανοίγουν ουσιαστικά την ίδια φόρµα,
δηλαδή τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ. Η διαφορά είναι πως στην πρώτη περίπτωση η φόρµα
ανοίγει σε θέση νέας εγγραφής – και εποµένως όλα τα πεδία της είναι κενά έτσι ώστε να καταχωρηθεί η
νέα εγγραφή – ενώ στη δεύτερη περίπτωση ανοίγει σε κατάσταση προεπισκόπησης δεδοµένων
εµφανίζοντας τα πεδία της εγγραφής πού έχει επιλεγεί από τον κατάλογο των ταινιών της τρέχουσας
φόρµας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 44

Ας αναφερθεί στο σηµείο αυτό πως η προεπιλεγµένη συµπεριφορά της φόρµας είναι να ανοίγει σε θέση
νέας εγγραφής έτσι ώστε να επιτρέπει την καταχώρηση δεδοµένων (υπενθυµίζουµε πως για να ορίσουµε
αυτόν τον τρόπο συµπεριφοράς θα πρέπει να µεταφερθούµε στη σελίδα «∆εδοµένα» του φύλλου ιδιοτήτων
της τρέχουσας φόρµας και στην ιδιότητα «Καταχώρηση ∆εδοµένων» να αποδώσουµε την τιµή «Ναι»).
Εποµένως το µόνο που έχουµε να κάνουµε για να ανοίξουµε τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ σε θέση
νέας εγγραφής, είναι να καλέσουµε τη µέθοδο OpenForm του αντικειµένου DoCmd µε την απλή µορφή

DoCmd.OpenForm “ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ”

Αυτός ο κώδικας θα πρέπει κατά τα γνωστά να καταχωρηθεί στο συµβάν «Με το κλικ» του κουµπιού
εντολής «Εισαγωγή Ταινίας» και στην πλήρη του µορφή παρουσιάζεται στο επόµενο σχήµα – στο
παράδειγµα του επόµενου σχήµατος το όνοµα του κουµπιού εντολής «Εισαγωγή Ταινίας» είναι το
ADD_MOVIE_RECORD.

Είναι προφανές πως το παραπάνω κουµπί εντολής µπορεί να κατασκευαστεί χρησιµοποιώντας τον οδηγό
στοιχείων ελέγχου (control wizard) της Microsoft Access, διαδικασία που θα οδηγήσει ακριβώς στο ίδιο
αποτέλεσµα. Άλλωστε ο κώδικας που παρουσιάζουµε στο προηγούµενο σχήµα έχει δηµιουργηθεί δια της
χρήσης αυτού του οδηγού και εποµένως οι δύο αυτές µέθοδοι είναι ουσιαστικά ισοδύναµες.

Από την άλλη πλευρά, ο κώδικας του κουµπιού εντολής που ανοίγει τη φόρµα ΚΑΤΑΧΩΡΗΣΗΣ
ΤΑΙΝΙΑΣ σε κατάσταση προεπισκόπησης δεδοµένων, έχει παρόµοια µορφή µε αυτόν της προηγούµενης
περίπτωσης. Ωστόσο, θα πρέπει να εµπλουτισθεί µε δύο επιπλέον στοιχεία. Από τα στοιχεία αυτά το πρώτο
θα γνωστοποιεί στη µέθοδο OpenForm πως η φόρµα δεν θα ανοίξει σε κατάσταση νέας εγγραφής (που
είναι η προεπιλεγµένη κατάσταση) αλλά σε κατάσταση προεπισκόπησης δεδοµένων, ενώ το δεύτερο θα
καθορίζει πως τα στοιχεία που θα εµφανισθούν σε αυτή, θα συσχετίζονται µε την εγγραφή εκείνη η οποία
έχει επιλεγεί από το χρήστη στη συγκεντρωτική φόρµα εµφάνισης εγγραφών. Η κατασκευή αυτού του
κουµπιού εντολής µπορεί να λάβει χώρα δια της χρήσης του οδηγού στοιχείων ελέγχου της Access, και
σύµφωνα µε τις οθόνες που παρουσιάζονται στα επόµενα σχήµατα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 45

Από τις παραπάνω οθόνες διαπιστώνουµε πως η πιο σηµαντική παράµετρος που θα πρέπει να καθορισθεί είναι το
είδος της συσχέτισης ανάµεσα στις φόρµες ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ και ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ έτσι ώστε η
τελευταία φόρµα να εµφανίζει πάντοτε τα στοιχεία της τρέχουσας επιλεγµένης εγγραφής. Αυτή η συσχέτιση
απαιτεί την ύπαρξη ενός κοινού πεδίου στις δύο φόρµες – αυτό µε άλλα λόγια σηµαίνει πως και οι δύο φόρµες θα
πρέπει να έχουν ένα πεδίο που να συσχετίζεται µε το ίδιο πεδίο του πίνακα ΤΑΙΝΙΑ. Στην προκειµένη περίπτωση
η φόρµα ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ διαθέτει το πεδίο FILM_CODE που ως πηγή δεδοµένων προέλευσης έχει το
πεδίο Κωδικός του πίνακα ΤΑΙΝΙΑ, ενώ η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ διαθέτει το πεδίο Κωδικός που και
αυτό χαρακτηρίζεται από την ίδια πηγή των δεδοµένων προέλευσης. Εάν τώρα συσχετίσουµε τα δύο αυτά πεδία
υπαγορεύουµε στη µέθοδο OpenForm να εµφανίσει στα πεδία της φόρµας ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ, τα στοιχεία
εκείνης της εγγραφής του πίνακα ΤΑΙΝΙΑ, της οποίας ο κωδικός έχει την ίδια τιµή µε το πεδίο FILM_CODE της
φόρµας ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ. Αλλά η τιµή αυτού του πεδίου δεν είναι άλλη από τον κωδικό της ταινίας που
έχει επιλέξει ο χρήστης στην τελευταία φόρµα. Εποµένως τελικά, η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ θα
εµφανίσει τα στοιχεία της τρέχουσας επιλεγµένης ταινίας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 46

Μετά τη δηµιουργία του κουµπιού εντολής, ας περάσουµε στη µελέτη του κώδικα που δηµιούργησε η Access για
να υλοποιήσει τη λειτουργία του. Αυτός ο κώδικας καταγεγραµµένος στο περιβάλλον ανάπτυξης κώδικα της
γλώσσας VBA παρουσιάζεται στο επόµενο σχήµα – στο παράδειγµα του σχήµατος, το όνοµα του κουµπιού
εντολής είναι το EDIT_MOVIE_RECORD:

Από το παραπάνω σχήµα διαπιστώνουµε πως η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ συσχετίζεται πράγµατι µε τη
φόρµα ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ µέσω των πεδίων Κωδικός και FILM_CODE. Το κριτήριο συσχέτισης στον
παραπάνω κώδικα (που βρίσκεται αποθηκευµένο στη συµβολοσειρά stLinkCriteria) είναι το

“[Κωδικός]=” & Me![FILM_CODE]

Στην παραπάνω σύνταξη η συµβολοσειρά Me αναφέρεται κάθε φορά στην τρέχουσα φόρµα – στην προκειµένη
περίπτωση αυτή η φόρµα είναι η ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ – ενώ η αναφορά στο πεδίο FILM_CODE γίνεται
χρησιµοποιώντας τη γνωστή σύνταξη της Microsoft Access [ΟΝΟΜΑ ΦΟΡΜΑΣ]![ΟΝΟΜΑ ΠΕ∆ΙΟΥ]. Όπως
έχουµε δει και στο προηγούµενο εργαστήριο η χρήση του ονόµατος του πεδίου σε κάποια έκφραση έχει ως
αποτέλεσµα – κατά τη διάρκεια της εκτέλεσης του κώδικα – την αντικατάσταση αυτού του ονόµατος µε την τιµή
που επιστρέφεται από το πεδίο. Εάν για παράδειγµα επιλέξουµε στον κατάλογο ταινιών την ταινία Prince Of
Tides, το πεδίο FILM_CODE θα επιστρέψει τον κωδικό αυτής της ταινίας που είναι το 23, και το κριτήριο
συσχέτισης θα λάβει τη µορφή «Κωδικός=23». Αυτό σηµαίνει πως αν ανοίξουµε τη φόρµα καταχώρησης ταινίας
πατώντας το κουµπί Ενηµέρωση Ταινίας, θα εµφανιστούν οι τιµές των πεδίων της εν λόγω εγγραφής.

Το δεύτερο χαρακτηριστικό που αξίζει να σχολιασθεί στον παραπάνω κώδικα, είναι η χρήση του ορίσµατος
acFormEdit, στην κλήση της µεθόδου OpenForm. Αυτή ακριβώς η παράµετρος είναι που υπαγορεύει στην µέθοδο
OpenForm να µην ανοίξει τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ χρησιµοποιώντας τον προεπιλεγµένο τρόπο
εµφάνισης (δηλαδή σε θέση νέας εγγραφής) αλλά σε κατάσταση προεπισκόπησης εγγραφών των πινάκων της
βάσης.

Να υλοποιηθούν οι φόρµες συγκεντρωτικής εµφάνισης εγγραφών για τους πίνακες ΤΑΙΝΙΑ,


ΑΣΚΗΣΗ 06.01
ΤΡΑΓΟΥ∆Ι, ΗΘΟΠΟΙΟΣ, ΕΡΜΗΝΕΥΤΗΣ και ∆ΙΑΝΟΜΕΑΣ.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 47

Τέλος το κουµπί εντολής που φέρει τον τίτλο ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ έχει ως αποτέλεσµα τη διαγραφή της ταινίας
που έχει επιλέξει ο χρήστης από τον κατάλογο ταινιών που εµφανίζονται στην τρέχουσα φόρµα. Ο κώδικας VBA
που θα πρέπει να καταχωρηθεί στην ιδιότητα συµβάντος «Με το κλικ» για αυτό το κουµπί, έχει τη µορφή

DoCmd.RunSQL "DELETE FROM ΤΑΙΝΙΑ WHERE Κωδικός = FILM_CODE"


Requery

όπου η µέθοδος Requery καλείται προκειµένου να ανανεώσει τα περιεχόµενα της φόρµας αποµακρύνοντας την
εγγραφή που έχει διαγραφεί (το θέµα αυτό σχολιάζεται στη συνέχεια). Ας σηµειωθεί πως αυτός ο κώδικας
διαγράφει απλά την επιλεγµένη ταινία από τον οµώνυµο πίνακα, χωρίς όµως να προχωρεί και σε διαγραφή των
σχετικών εγγραφών στους άλλους πίνακες της βάσης. Η τροποποίηση του κώδικα µε τρόπο ώστε η ισχύς των
κανόνων ακεραιότητας µετά από κάθε διαδικασία διαγραφής να εξακολουθήσει να υφίσταται, αφήνεται ως
άσκηση στους φοιτητές.

Να προστεθούν στις φόρµες συγκεντρωτικών στοιχείων που έχουν κατασκευαστεί στην


προηγούµενη άσκηση, τα κουµπιά εντολών που επιτρέπουν την εισαγωγή, τροποποίηση
και διαγραφή των κατάλληλων σε κάθε περίπτωση εγγραφών. Ειδικότερα για τις
ΑΣΚΗΣΗ 06.02
διαδικασίες της τροποποίησης και της διαγραφής να ληφθεί ιδιαίτερη µέριµνα για την
τήρηση των κανόνων ακεραιότητας αναφοράς εγγραφών της βάσης δεδοµένων της
εφαρµογής.

Ολοκληρώνουµε τη διαδικασία κατασκευής της φόρµας εµφάνισης συγκεντρωτικών στοιχείων του πίνακα
ΤΑΙΝΙΑ, κάνοντας την παρατήρηση πως εφ’ όσον οι διαδικασίες της εισαγωγής, διαγραφής, και τροποποίησης
εγγραφών έχουν ως αποτέλεσµα τη µεταβολή των περιεχοµένων της φόρµας ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ, αυτή θα
πρέπει να επανακτήσει τα δεδοµένα που εµφανίζονται σε αυτή, έτσι ώστε να εµφανίζει κάθε φορά τις πιο
πρόσφατες τιµές τους. Η ανανέωση των περιεχοµένων της φόρµας – καθώς και αρκετών στοιχείων ελέγχου όπως
είναι τα πλαίσια λίστας και τα σύνθετα πλαίσια – γίνεται όπως είναι γνωστό δια της χρήσης της µεθόδου Requery.
Αυτή η µέθοδος θα πρέπει να τοποθετηθεί στον κώδικα της ιδιότητας συµβάντος που φέρει το όνοµα «Με την
ενεργοποίηση» και βρίσκεται στη σελίδα «Συµβάν» του φύλλου ιδιοτήτων της φόρµας. Αυτό το συµβάν υφίσταται
κάθε φορά που κλείνει κάποια από τις φόρµες καταχώρησης δεδοµένων και η εστίαση (focus) του συστήµατος
επιστρέφεται στην τρέχουσα φόρµα.

Η ανανέωση των περιεχοµένων της φόρµας


ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ λαµβάνει χώρα δια της
χρήσης της µεθόδου Requery στην ιδιότητα
συµβάντος Activate() της τρέχουσας φόρµας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 48

ΚΑΤΑΣΚΕΥΗ ΦΟΡΜΑΣ ∆ΙΑΧΕΙΡΙΣΗΣ ΕΡΜΗΝΕΥΤΩΝ

Στο δεύτερο µέρος του εργαστηρίου θα ασχοληθούµε µε την κατασκευή ενός συστήµατος φόρµας –
υποφόρµας που επιτρέπει την προεπισκόπηση των τίτλων των τραγουδιών που έχουν ερµηνευθεί από τους
καλλιτέχνες που βρίσκονται καταχωρηµένοι στη βάση δεδοµένων, καθώς και των τίτλων των ταινιών στις
οποίες αυτά συµµετέχουν. Πιο συγκεκριµένα, η λειτουργία αυτής της φόρµας είναι η εξής: στο πάνω µέρος
της υπάρχει ένα πλαίσιο λίστας που εµφανίζει τα ονοµατεπώνυµα των καλλιτεχνών που είναι
καταχωρηµένοι στον πίνακα ΕΡΜΗΝΕΥΤΗΣ. Επιλέγοντας ο χρήστης κάποιο από αυτά τα ονόµατα
λαµβάνει χώρα πλήρωση µιας υποφόρµας που ευρίσκεται ακριβώς από κάτω, µε τους τίτλους των
τραγουδιών που ερµηνεύονται από τον επιλεγµένο καλλιτέχνη καθώς και µε το όνοµα της εταιρείας
παραγωγής τους. Τέλος εάν ο χρήστης επιλέξει κάποιο από αυτά τα τραγούδια, θα εµφανιστούν σε ένα
άλλο πλαίσιο λίστας οι τίτλοι των ταινιών στις οποίες ακούγεται αυτό το τραγούδι. Τυπικό παράδειγµα
µιας τέτοιας φόρµας που λειτουργεί µε τον τρόπο αυτό, παρουσιάζεται στο επόµενο σχήµα:

Στο παράδειγµα του παραπάνω σχήµατος ο χρήστης επέλεξε το όνοµα Cliff Sherwood από τη λίστα
«Κατάλογος ερµηνευτών», ενέργεια που έχει ως αποτέλεσµα την εµφάνιση στην υποφόρµα που βρίσκεται
ακριβώς από κάτω, των τραγουδιών του εν λόγω καλλιτέχνη. Στην προκειµένη περίπτωση, υπάρχει µόνο
ένα τραγούδι, µε τον τίτλο «Without you», µε εταιρεία παραγωγής τη Virgin. Εάν ο χρήστης επιλέξει αυτό
το τραγούδι, τότε στο δεύτερο πλαίσιο λίστας θα εµφανιστούν οι τίτλοι των ταινιών στις οποίες ακούγεται
το εν λόγω τραγούδι. Οι ταινίες αυτές στην προκειµένη περίπτωση, χαρακτηρίζονται από τους τίτλους
«Prince of Tides», «Το βλέµµα του Οδυσσέα», «Ο κόσµος της Έλενας» και «Ήρεµη δύναµη». Στις σελίδες
που ακολουθούν θα παρουσιάσουµε αναλυτικά τον τρόπο µε τον οποίο δύναται να κατασκευαστεί µια
τέτοια φόρµα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 49

Στο πρώτο βήµα της διαδικασίας θα πρέπει να µεταφερθούµε στο κεντρικό παράθυρο διαχείρισης της Microsoft Access
και από τη σελίδα «Φόρµες» να επιλέξουµε τη δηµιουργία φόρµας σε προβολή σχεδίασης. Στην περίπτωση αυτή θα
εµφανιστεί στην οθόνη του υπολογιστή µας µια κενή φόρµα την οποία µπορούµε να την αποθηκεύσουµε αποδίδοντάς
της το όνοµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Στην επιφάνεια αυτής της φόρµας θα κατασκευάσουµε στη συνέχεια τα
τρία στοιχεία ελέγχου µε τον ακόλουθο τρόπο:

Το πλαίσιο λίστας που εµφανίζεται στο πάνω µέρος της φόρµας έχει το όνοµα ARTIST_LISTκαι είναι έτσι
κατασκευασµένο έτσι ώστε να εµφανίζει το όνοµα και το επώνυµο για τον κάθε ερµηνευτή της βάσης δεδοµένων. Κάθε
φορά που ο χρήστης επιλέγει ένα όνοµα από τη λίστα, το πλαίσιο λίστας επιστρέφει τον κωδικό του επιλεγµένου
ερµηνευτή. Εποµένως η πηγή των δεδοµένων προέλευσης για αυτό το στοιχείο ελέγχου είναι ένα ερώτηµα – ας το
ονοµάσουµε ΚΑΤΑΛΟΓΟΣ ΕΡΜΗΝΕΥΤΩΝ – που όταν εκτελείται επιστρέφει τον κωδικό, το όνοµα και το επώνυµο
για τον κάθε ερµηνευτή που είναι καταχωρηµένο στον οµώνυµο πίνακα.

Χρησιµοποιώντας τις τεχνικές που παρουσιάσαµε στο προηγούµενο εργαστήριο, να


κατασκευάσετε το πλαίσιο λίστας ARTIST_LIST που εµφανίζει το όνοµα και το επώνυµο
ΑΣΚΗΣΗ 06.03
των ερµηνευτών της βάσης δεδοµένων, και επιστρέφει τον κωδικό του επιλεγµένου
ερµηνευτή.

Στο επόµενο βήµα της διαδικασίας θα πρέπει να κατασκευάσουµε την υποφόρµα που για τον επιλεγµένο ερµηνευτή, θα
εµφανίζει τα τραγούδια που ερµηνεύονται από αυτόν. Αυτή η φόρµα θα κατασκευαστεί ως ξεχωριστή φόρµα και έτσι
ώστε να εµφανίζει τις εγγραφές της τη µία κάτω από την άλλη. Πριν όµως κατασκευάσουµε τη φόρµα αυτή, θα πρέπει
να κατασκευάσουµε το ερώτηµα που θα τροφοδοτεί την εν λόγω φόρµα µε δεδοµένα. Η προεπισκόπηση του
ερωτήµατος αυτού σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων και προβολή κώδικα SQL παρουσιάζεται στη
συνέχεια:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 50

Θα πρέπει να σηµειωθεί ωστόσο πως σε αντίθεση µε τα υπόλοιπα ερωτήµατα που έχουµε δει µέχρι τώρα, αυτό το
ερώτηµα δεν εκτελείται πάντα αλλά µόνο όταν η φόρµα ∆ΙΑΧΕΙΡΙΣΗ ΕΡΜΗΝΕΥΤΩΝ είναι ανοικτή και ο χρήστης
έχει επιλέξει κάποιο ερµηνευτή στο πλαίσιο λίστας ARTIST_LIST. Αυτό συµβαίνει διότι το ερώτηµα επιστρέφει
εκείνες τις εγγραφές, των οποίων ο κωδικός ερµηνευτή είναι εκείνος που επιστρέφεται από το πεδίο
[Forms]![ΤΡΑΓΟΥ∆ΙΑ - ΕΡΜΗΝΕΥΤΕΣ]![ARTIST_LIST]. Για να µπορέσει όµως να λάβει χώρα η επιστροφή της
τιµής αυτού του πεδίου, θα πρέπει η φόρµα [ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ] να είναι ανοικτή έτσι ώστε να µπορέσει
ο χρήστης να χρησιµοποιήσει το πεδίο [ARTIST_LIST] για να επιλέξει κάποιο ερµηνευτή. Για το λόγο αυτό τα
ερωτήµατα αυτού του τύπου που είναι ειδικά σχεδιασµένα για να εκτελούνται µέσα από κάποια φόρµα ή υποφόρµα, δεν
έχει νόηµα να χρησιµοποιούνται απευθείας από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων και από τη
σελίδα «Ερωτήµατα», διότι πολύ απλά δεν πρόκειται να λειτουργήσουν. Πράγµατι εάν επιχειρήσουµε να εκτελέσουµε
το ερώτηµα από αυτό το παράθυρο και ταυτόχρονα η φόρµα [ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ] είναι κλειστή η
Microsoft Access θα εµφανίσει το παράθυρο «Τιµή Παραµέτρου» και θα ζητήσει από το χρήστη να καταχωρήσει την
τιµή εκείνη που είναι αναγκαία για την εκτέλεση του ερωτήµατος,.

Βέβαια εάν ο χρήστης καταχωρήσει τον κωδικό κάποιου


ερµηνευτή, το ερώτηµα πιθανόν να λειτουργήσει σωστά,
υποτίθεται όµως πως οι κωδικοί των εγγραφών των
πινάκων της βάσης είναι αύξοντες αριθµοί άγνωστοι στο
χρήστη. Για το λόγο αυτό τα ερωτήµατα αυτού του τύπου
που συσχετίζονται µε συγκεκριµένα πεδία συγκεκριµένων
φορµών της βάσης δεδοµένων θα πρέπει να εκτελούνται
µόνο µέσα από τις φόρµες για τις οποίες έχουν
κατασκευαστεί.
Το πλαίσιο διαλόγου «Τιµή Παραµέτρου»

Μετά την κατασκευή του ερωτήµατος ας προχωρήσουµε στην κατασκευή της υποφόρµας η οποία θα εµφανίζει τα
τραγούδια του επιλεγµένου ερµηνευτή. Επειδή η επιλογή ενός τραγουδιού σε αυτή τη φόρµα θα έχει ως αποτέλεσµα
την εµφάνιση των ταινιών στις οποίες ακούγεται αυτό το τραγούδι, η χρήση του πεδίου Κωδικός Τραγουδιού είναι
αναγκαία. Η υποφόρµα αυτή θα κατασκευαστεί ως ξεχωριστή φόρµα και θα παρουσιάζει τις εγγραφές που
επιστρέφονται από το παραπάνω ερώτηµα, τη µία κάτω από την άλλη,. Εποµένως θα κατασκευαστεί χρησιµοποιώντας
την ίδια διαδικασία που εφαρµόσαµε για την κατασκευή της φόρµας συγκεντρωτικών στοιχείων του πίνακα ΤΑΙΝΙΑ
που παρουσιάσαµε σε προηγούµενη ενότητα. Τυπικό παράδειγµα µιας τέτοιας υποφόρµας παρουσιάζεται στο επόµενο
σχήµα:

ΠΑΡΑΤΗΡΗΣΗ: Το πεδίο Κωδικός


Τραγουδιού είναι κρυµµένο πεδίο: αν και
δεν έχουµε λόγο να το εµφανίσουµε στην
επιφάνεια της φόρµας, εν τούτοις το
χρειαζόµαστε στη συνέχεια και για το λόγο
αυτό το κρύβουµε. Για να το κάνουµε αυτό
µεταφερόµαστε στη σελίδα «Μορφή» του
φύλλου ιδιοτήτων και αποδίδουµε στην
ιδιότητα «Ορατό» την τιµή «Όχι»

Εφαρµόζοντας τη διαδικασία δηµιουργίας φόρµας συγκεντρωτικών στοιχείων, να


κατασκευάσετε τη φόρµα ΥΠΟΦΟΡΜΑ ΤΡΑΓΟΥ∆ΙΩΝ ΕΡΜΗΝΕΥΤΗ η οποία θα εµφανίζει
ΑΣΚΗΣΗ 06.04
τις εγγραφές που επιστρέφονται από το ερώτηµα ΚΑΤΑΛΟΓΟΣ ΕΡΜΗΝΕΥΤΩΝ τη µία κάτω
από την άλλη.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 51

Μετά την κατασκευή της παραπάνω φόρµας, θα πρέπει να την εισάγουµε ως υποφόρµα στην τρέχουσα φόρµα. Αυτή η
διαδικασία µπορεί να πραγµατοποιηθεί χρησιµοποιώντας το κατάλληλο κουµπί εντολών από την εργαλειοθήκη, και
έχοντας ενεργοποιηµένο τον οδηγό της Microsoft Access. Οι διαδοχικές οθόνες του οδηγού που εµφανίζονται κατά τη
διαδικασία δηµιουργίας αυτής της υποφόρµας παρουσιάζονται στη συνέχεια:

Παρατηρούµε πως στην περίπτωση αυτή η χρήση του οδηγού είναι εξαιρετικά απλή, αφού το µόνο που έχουµε να
καθορίσουµε είναι η φόρµα που θα τοποθετηθεί ως υποφόρµα στην επιφάνεια της τρέχουσας φόρµας, καθώς και το
όνοµα µε το οποίο αυτή η υποφόρµα θα είναι γνωστή. Ας σηµειωθεί πως το όνοµα που καθορίζουµε χρησιµοποιώντας
τη δεύτερη οθόνη του οδηγού δεν είναι υποχρεωτικά το ίδιο µε το όνοµα της υποφόρµας, αν και γενικά συνίσταται η
χρήση του ιδίου ονόµατος έτσι ώστε να διευκολύνεται η ανάπτυξη της εφαρµογής – η χρήση πολλών και διαφορετικών
ονοµάτων για το ίδιο ουσιαστικά στοιχείο είναι καλό να αποφεύγεται.

Μετά την ολοκλήρωση της παραπάνω διαδικασίας, η υποφόρµα εµφανίζεται στην επιφάνεια της τρέχουσας φόρµας και
σε προβολή σχεδίασης, ως ένα επιπλέον στοιχείο ελέγχου. Θα πρέπει ωστόσο να σηµειωθεί, πως η µεταβολή των
ιδιοτήτων της, δεν µπορεί να γίνει από το σηµείο αυτό, αλλά µόνο από το κεντρικό παράθυρο διαχείρισης της βάσης
δεδοµένων και από τη σελίδα των φορµών. Ας υποθέσουµε για παράδειγµα πως επιθυµούµε να µεταβάλλουµε το
χρώµα φόντου της επιφάνειας της υποφόρµας. Για να το κάνουµε αυτό, θα πρέπει να µεταφερθούµε στη σελίδα
«Φόρµες» του κεντρικού παραθύρου διαχείριση της βάσης δεδοµένων, να ανοίξουµε τη φόρµα ΥΠΟΦΟΡΜΑ
ΤΡΑΓΟΥ∆ΙΩΝ ΕΡΜΗΝΕΥΤΗ σε προβολή σχεδίασης, και να πραγµατοποιήσουµε τις αλλαγές που θέλουµε. Εάν στη
συνέχεια αποθηκεύσουµε αυτές τις αλλαγές, κλείσουµε τη φόρµα ΥΠΟΦΟΡΜΑ ΤΡΑΓΟΥ∆ΙΩΝ ΕΡΜΗΝΕΥΤΗ και
ανοίξουµε τη φόρµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ, θα διαπιστώσουµε πως η υποφόρµα εµφανίζεται πλέον µε τα νέα
χαρακτηριστικά εµφάνισης. Αυτό σηµαίνει πως αν και έχουµε τη δυνατότητα να χρησιµοποιήσουµε µια φόρµα ως
υποφόρµα κάποιας άλλης φόρµας, εν τούτοις, η διαµόρφωση των ιδιοτήτων της θα γίνει θεωρώντας τη ως ξεχωριστό
αυτόνοµο αντικείµενο και όχι ως τµήµα κάποιου άλλου αντικειµένου.

Μετά την κατασκευή της υποφόρµας τραγουδιών ερµηνευτή, θα πρέπει να τη συσχετίσουµε µε το πλαίσιο λίστας
ARTIST_LIST έτσι ώστε κάθε φορά που ο χρήστης θα επιλέγει σε αυτό κάποιον άλλο ερµηνευτή, να ανανεώνονται τα
περιεχόµενα της υποφόρµας και να εµφανίζονται τα νέα δεδοµένα. Αυτή η ανανέωση των περιεχοµένων της υποφόρµας
θα λάβει χώρα δια της κλήσης της µεθόδου Requery, η οποία ως γνωστόν επανεκτελεί το ερώτηµα που τροφοδοτεί την
υποφόρµα µε δεδοµένα, και εµφανίζει τις νέες εγγραφές που επιστρέφονται από αυτό. Επειδή αυτή η διαδικασία θα
πρέπει να γίνεται κάθε φορά που ενηµερώνεται το πλαίσιο λίστας µε τη νέα επιλογή του χρήστη, είναι προφανές πως
αυτός ο κώδικας θα πρέπει να τοποθετηθεί στη διαδικασία συµβάντος «Μετά από ενηµέρωση» αυτού του στοιχείου
ελέγχου:

Με τον τρόπο αυτό, κάθε φορά που ο χρήστης


επιλέγει νέο ερµηνευτή θα επανεκτελείται το
ερώτηµα ΚΑΤΑΛΟΓΟΣ ΕΡΜΗΝΕΥΤΩΝ και η
υποφόρµα θα ενηµερώνεται µε τα νέα δεδοµένα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 52

Χρησιµοποιώντας τον οδηγό της Microsoft Access να δηµιουργήσετε την υποφόρµα


ΑΣΚΗΣΗ 06.05 τραγουδιών ερµηνευτή στην επιφάνεια της κύριας φόρµας και να τη συσχετίσετε µε το πλαίσιο
λίστας ARTIST_LIST έτσι ώστε να εµφανίζει τα τραγούδια του επιλεγµένου ερµηνευτή.

Με εντελώς ανάλογο τρόπο θα κατασκευάσουµε και το πλαίσιο λίστας που θα εµφανίζει τους τίτλους των ταινιών στις
οποίες ακούγεται το τραγούδι που επέλεξε ο χρήστης στην προηγούµενη υποφόρµα. Και στην περίπτωση αυτή θα
κατασκευάσουµε ένα ερώτηµα το οποίο θα επιστρέφει τους τίτλους των ταινιών των οποίων ο κωδικός µαζί µε τον
κωδικό του τραγουδιού που αντιστοιχεί στην επιλεγµένη εγγραφή της υποφόρµας τραγουδιών ερµηνευτή, ευρίσκονται
στην ίδια εγγραφή του πίνακα ΕΠΕΝ∆ΥΣΗ. Η προεπισκόπηση αυτού του ερωτήµατος σε προβολή σχεδίασης και
κώδικα SQL παρουσιάζεται στο επόµενο σχήµα:

Έχοντας κατασκευάσει το παραπάνω ερώτηµα ας υλοποιήσουµε τώρα το πλαίσιο λίστας που θα εµφανίζει τους τίτλους
των ταινιών που θα επιστρέφονται από αυτό. Η διαδικασία κατασκευής ενός τέτοιου στοιχείου έχει ήδη περιγραφεί
αναλυτικά πολλές φορές στις προηγούµενες σελίδες, και για το λόγο αυτό αφήνεται ως άσκηση στους φοιτητές. Ας
αποδώσουµε στο πλαίσιο αυτό το όνοµα MOVIE_LIST. Μετά τη δηµιουργία του πλαισίου λίστας θα πρέπει να το
συσχετίσουµε µε την υποφόρµα τραγουδιών ερµηνευτή έτσι ώστε κάθε φορά που ο χρήστης επιλέγει σε αυτή ένα νέο
τραγούδι, να ενηµερώνονται τα περιεχόµενα του πλαισίου MOVIE_LIST έτσι ώστε να εµφανίζει τους τίτλους των
τραγουδιών στους οποίους ακούγεται ένα νέο τραγούδι. Για να το κάνουµε αυτό θα πρέπει να χρησιµοποιήσουµε τη
µέθοδο Requery αυτού του πλαισίου. Αυτή η µέθοδος θα πρέπει να τοποθετηθεί στη µέθοδο «Με το κλικ» της
κεντρικής φόρµας η οποία εκτελείται κάθε φορά που ο χρήστης επιλέγει κάποιο τραγούδι από την υποφόρµα
τραγουδιών ερµηνευτή. Ο κώδικας που εκτελείται στην περίπτωση αυτή έχει τη µορφή

Εποµένως κάθε φορά που επιλέγεται ένα νέο τραγούδι


το περιεχόµενο της λίστας ανανεώνεται έτσι ώστε να
εµφανίζει κάθε φορά τα πιο πρόσφατα δεδοµένα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 53

ΕΡΓΑΣΤΗΡΙΟ 7

Μετά την κατανόηση και την υλοποίηση της δοµής της βάσης ταινιών video και των φορµών αλληλεπίδρασης µε το
χρήστη, ας περάσουµε τώρα στην παρουσίαση της διαδικασίας δηµιουργίας αναφορών ή εκθέσεων, οι οποίες
επιτρέπουν την προεπισκόπηση και την εκτύπωση των δεδοµένων των πινάκων της βάσης. Στις επόµενες σελίδες θα
δοθούν τυπικά παραδείγµατα δηµιουργίας αναφορών που καλύπτουν όλες τις περιπτώσεις από τις πιο απλές έως τις πιο
δύσκολες έτσι ώστε οι φοιτητές να κατανοήσουν τη διαδικασία δηµιουργίας τους και να είναι σε θέση να
κατασκευάσουν τις δικές τους αναφορές.

Μια αναφορά µπορεί να στηρίζεται τόσο σε ένα πίνακα όσο και σε ένα ερώτηµα. Στην πρώτη περίπτωση που είναι και
η πιο απλή η αναφορά εµφανίζει τις εγγραφές ενός και µοναδικού πίνακα, ενώ στη δεύτερη περίπτωση τα δεδοµένα
που εµφανίζονται ανήκουν – γενικά – σε περισσότερους από έναν πίνακες. Στην περίπτωση αυτή είναι δυνατή η
ταξινόµηση και η οµαδοποίηση των δεδοµένων έτσι ώστε η προεπισκόπησή τους στον υπολογιστή να είναι εύκολη και
γρήγορη.

Η διαδικασία δηµιουργίας αναφορών µπορεί πάρα πολύ εύκολα να πραγµατοποιηθεί δια της χρήσης του οδηγού της
Microsoft Access. Στα επόµενα σχήµατα παρουσιάζονται οι διαδοχικές οθόνες αυτού του οδηγού κατά τη διαδικασία
δηµιουργίας µιας αναφοράς η οποία εµφανίζει τις εγγραφές του πίνακα ΤΑΙΝΙΑ.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 54

Οι πιο σηµαντικές από τις παραπάνω οθόνες είναι η δεύτερη και η τρίτη που καθορίζουν τα χαρακτηριστικά της
ταξινόµησης και της οµαδοποίησης των δεδοµένων, καθώς και η τέταρτη που καθορίζει τη διάταξη των πεδίων και τον
προσανατολισµό της σελίδας. Η αναφορά που κατασκευάστηκε µε τον τρόπο αυτό σε προβολή προεπισκόπησης,
παρουσιάζεται στο επόµενο σχήµα:

Παρατηρούµε πως στο τέλος της σελίδες εµφανίζονται η τρέχουσα ηµέρα, ηµεροµηνία και ώρα (και πιο συγκεκριµένα
οι τιµές αυτών των στοιχείων κατά τη στιγµή εκτύπωσης της αναφοράς), ο τρέχων αριθµός σελίδας, και το συνολικό
πλήθος σελίδων. Εάν µεταφερθούµε στην προβολή σχεδίασης αυτής της αναφοράς, θα διαπιστώσουµε πως οι εντολές
που εµφανίζουν αυτές τις πληροφορίες είναι οι συνάρτηση Now() (για την τρέχουσα ηµεροµηνία και ώρα), και οι
παράµετροι [Page] και [Pages] για την τρέχουσα σελίδα και το συνολικό πλήθος των σελίδων αντίστοιχα. Οι
πληροφορίες αυτές εµφανίζονται στο υποσέλιδο της σελίδας, και εποµένως θα εκτυπώνονται στο τέλος της κάθε
σελίδας. Ας σηµειωθεί πως η εµφάνιση αυτών των παραµέτρων ρυθµίζεται αυτόµατα από την Access και χωρίς την
παρέµβαση του χρήστη.

Χρησιµοποιώντας τον οδηγό της Microsoft Access να κατασκευάσετε αναφορές που να


ΑΣΚΗΣΗ 07.01 εµφανίζουν τα περιεχόµενα των πινάκων ΤΑΙΝΙΑ, ΗΘΟΠΟΙΟΣ, ΕΡΜΗΝΕΥΤΗΣ, ΤΡΑΓΟΥ∆Ι
και ∆ΙΑΝΟΜΕΑΣ.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 55

Ας περάσουµε τώρα σε ένα πιο σύνθετο παράδειγµα κατασκευής µιας αναφοράς, η οποία θα καλείται µέσα από τη
φόρµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτή η αναφορά θα εµφανίζει για τον καλλιτέχνη που έχει επιλέξει ο χρήστης
στο πλαίσιο λίστας ARTIST_LIST, τα ονόµατα των τραγουδιών που ερµηνεύει και τους τίτλους των ταινιών στις
οποίες ακούγονται αυτά τα τραγούδια. Οι εγγραφές τις αναφοράς θα εµφανίζονται οµαδοποιηµένες ως προς τον τίτλο
του τραγουδιού και ταξινοµηµένες κατά αύξουσα σειρά ως προς τον τίτλο της σελίδας. Η διαδικασία δηµιουργίας αυτής
της αναφοράς είναι η εξής:

Στο πρώτο βήµα της διαδικασίας, θα κατασκευάσουµε το ερώτηµα από το οποίο η αναφορά θα διαβάζει δεδοµένα
(δηλαδή το ερώτηµα που θα ορισθεί ως η πηγή των δεδοµένων προέλευσης της αναφοράς). Αυτό το ερώτηµα θα
επιστρέφει το όνοµα και το επώνυµο του ερµηνευτή από τον πίνακα ΕΡΜΗΝΕΥΤΗΣ, τον τίτλο του τραγουδιού από τον
πίνακα ΤΡΑΓΟΥ∆Ι και τον τίτλο της ταινίας από τον πίνακα ΤΑΙΝΙΑ. Εκτός από αυτά τα πεδία, στην κατασκευή του
ερωτήµατος θα χρησιµοποιηθεί και το πεδίο Κωδικός Ερµηνευτή από τον πίνακα ΕΡΜΗΝΕΥΤΗΣ. Αυτό το πεδίο αν
και δεν εµφανίζεται στο τελικό αποτέλεσµα, εν τούτοις είναι αναγκαίο για τη σωστή λειτουργία του ερωτήµατος, και
για το λόγο αυτό χρησιµοποιείται. Η προεπισκόπηση του ερωτήµατος αυτού – στο οποίο θα αποδώσουµε το όνοµα
ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ – σε προβολή σχεδίασης, φύλλου δεδοµένων και κώδικα SQL,
παρουσιάζεται στα επόµενα σχήµατα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 56

∆εν είναι δύσκολο να διαπιστώσουµε πως το κριτήριο που έχουµε θέσει για το πεδίο Κωδικός Ερµηνευτή του
παραπάνω ερωτήµατος, συσχετίζεται µε το πεδίο ARTIST_LIST της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτό
σηµαίνει πως το εν λόγω ερώτηµα θα εκτελεστεί µε επιτυχία όταν το εν λόγω πεδίο έχει κάποια τιµή, δηλαδή όταν η
φόρµα είναι ανοικτή και ο χρήστης έχει επιλέξει κάποιο ερµηνευτή στο πλαίσιο λίστας ARTIST_LIST. Αυτό είναι
ακόµη ένα παράδειγµα ερωτήµατος που δεν έχει νόηµα να εκτελεστεί από την κεντρική σελίδα διαχείρισης της βάσης
δεδοµένων και από τη σελίδα των ερωτηµάτων, αφού η λειτουργία του αποτελεί τµήµα της λειτουργίας κάποιας από τις
φόρµες της εφαρµογής.

Μετά την κατασκευή του ερωτήµατος από το οποίο η αναφορά θα παίρνει δεδοµένα, ας περάσουµε τώρα στην
κατασκευή της ίδιας της αναφοράς, χρησιµοποιώντας τον οδηγό αναφορών της Microsoft Access. Η διαδικασία αυτή
είναι παρόµοια µε την προηγούµενη και οι οθόνες του οδηγού που χρησιµοποιούνται για τον καθορισµό των ιδιοτήτων
της αναφοράς, παρουσιάζονται στα επόµενα σχήµατα:

Στην πρώτη οθόνη του οδηγού επιλέγουµε κατά τα γνωστά τον πίνακα ή το ερώτηµα από το οποίο η αναφορά παίρνει
δεδοµένα, και µεταφέρουµε τα πεδία που θέλουµε να χρησιµοποιήσουµε στο δεξιό πλαίσιο λίστας του πλαισίου
διαλόγου. Στην προκειµένη περίπτωση επιλέγουµε το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ και
δηλώνουµε πως θέλουµε να χρησιµοποιήσουµε όλα τα πεδία του. Στη συνέχεια ορίζουµε τα επίπεδα οµαδοποίησης,
δηλαδή το πλήθος και το είδος των πεδίων ως προς τα οποία θα λάβει χώρα η οµαδοποίηση των δεδοµένων. Εδώ η
οµαδοποίηση γίνεται πρώτα ως προς το επώνυµο και το όνοµα του καλλιτέχνη, και στη συνέχεια ως προς τον τίτλο του
τραγουδιού που ερµηνεύεται από αυτόν. Το µόνο πεδίο που αποµένει µετά από αυτή τη διαδικασία, είναι το πεδίο
Τίτλος Ταινίας. Το πεδίο αυτό χρησιµοποιείται για την ταξινόµηση των εγγραφών. Στο παράδειγµά µας επιλέγουµε την
αύξουσα ταξινόµηση, και εποµένως οι εγγραφές θα εµφανίζονται κατά αύξουσα σειρά ως προς τον τίτλο της ταινίας.
Οι τελευταίες παράµετροι που θα πρέπει να ορίσουµε, αφορούν το είδος της διάταξης των πεδίων στην επιφάνεια της
αναφοράς, και το style εµφάνισης της τελευταίας. Η διαδικασία κατασκευής της αναφοράς ολοκληρώνεται µε την
απόδοση σε αυτή ενός τίτλου ο οποίος θα εµφανίζεται στο επάνω µέρος της κατά τη διαδικασία προεπισκόπησης και
εκτύπωσης του περιεχοµένου της.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 57

Μετά την ολοκλήρωση της διαδικασίας µπορούµε να ανοίξουµε την αναφορά σε προβολή προεπισκόπησης και στη
συνέχεια να εκτυπώσουµε το περιεχόµενό της στον προεπιλεγµένο εκτυπωτή του συστήµατος. Εάν διαπιστώσουµε πως
κάποιες ετικέτες δεν εµφανίζονται ολόκληρες, είτε γιατί χρησιµοποιείται πολύ µεγάλο µέγεθος γραµµατοσειράς είτε
γιατί το κείµενο της ετικέτας είναι αρκετά µεγάλο, µπορούµε να επεξεργαστούµε τα χαρακτηριστικά εµφάνισης της
αναφοράς έτσι ώστε αυτή να εµφανίζεται σωστά. Στην προκειµένη περίπτωση διαπιστώνουµε πως ο τίτλος της
αναφοράς δεν χωρά στο πλάτος της σελίδας, ενώ κάποιες ετικέτες δεν εµφανίζονται ολόκληρες. Για το λόγο αυτό
εµφανίζουµε την αναφορά σε προβολή σχεδίασης και διορθώνουµε τις ατέλειες που χαρακτηρίζουν την εµφάνισή της.
Το τελικό αποτέλεσµα που προκύπτει µετά την πραγµατοποίηση όλων αυτών των διαδικασιών, παρουσιάζεται στο
επόµενο σχήµα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 58

Από το παραπάνω σχήµα διαπιστώνουµε πως τα χαρακτηριστικά εµφάνισης της αναφοράς είναι εκείνα που είχαµε
καθορίσει κατά το στάδιο της σχεδίασής της: τα δεδοµένα οµαδοποιούνται ως προς το ονοµατεπώνυµο του καλλιτέχνη
και ως προς τον τίτλο του τραγουδιού, ενώ οι εγγραφές χαρακτηρίζονται από αύξουσα ταξινόµηση ως προς τον τίτλο
της ταινίας. Βέβαια στην προκειµένη περίπτωση η αναφορά εµφανίζει µόνο τα τραγούδια του καλλιτέχνη που έχει
επιλεγεί από το χρήστη στο πλαίσιο λίστας ARTIST_LIST της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Εάν όµως
τροποποιήσουµε το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ αφαιρώντας το κριτήριο από το πεδίο
κωδικός ερµηνευτή και ανοίξουµε εκ νέου την αναφορά, θα διαπιστώσουµε πως στην προκειµένη περίπτωση εµφανίζει
τα τραγούδια όλων των ερµηνευτών, οµαδοποιηµένα ως προς το επώνυµο και το όνοµα του εκάστοτε ερµηνευτή.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 59

Από το παραπάνω σχήµα παρατηρούµε πως η τρέχουσα ηµεροµηνία – ώρα καθώς και ο τρέχων αριθµός σελίδας,
εµφανίζονται στο τέλος της κάθε σελίδας της αναφοράς. Αυτό συµβαίνει επειδή οι εν λόγω πληροφορίες έχουν
τοποθετηθεί στο υποσέλιδο της σελίδας. Μιλώντας γενικά, εάν κάποια πληροφορία θέλουµε να εµφανίζεται στην αρχή
και στο τέλος της κάθε σελίδας, θα την τοποθετήσουµε στην κεφαλίδα και στο υποσέλιδο της σελίδας, αντίστοιχα.
Αντίθετα, εάν η πληροφορία θέλουµε να εµφανίζεται µόνο µια φορά στην αρχή ή στο τέλος της αναφοράς θα την
τοποθετήσουµε στην κεφαλίδα ή στο υποσέλιδο της αναφοράς. Εάν για παράδειγµα η αναφορά εµφανίζει στήλες µε
αριθµητικές τιµές οι οποίες εκτείνονται σε περισσότερες από µία σελίδες, µπορούµε να τοποθετήσουµε στο υποσέλιδο
της σελίδας ένα πεδίο που να εµφανίζει το άθροισµα των τιµών που εκτυπώνονται στη συγκεκριµένη σελίδα, και στο
υποσέλιδο της αναφοράς ένα πεδίο που να εκτυπώνει το άθροισµα όλων των τιµών της αναφοράς. Η προεπισκόπηση
της τρέχουσας αναφοράς σε προβολή σχεδίασης, παρουσιάζεται στο επόµενο σχήµα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 60

Από το σχήµα αυτό διαπιστώνουµε πως ο τίτλος της αναφοράς ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ
περιλαµβάνεται στην κεφαλίδα της αναφοράς και για το λόγο αυτό εµφανίζεται µία και µοναδική φορά στο πάνω µέρος
της. Αντίθετα η συνάρτηση Now() και οι παράµετροι [Page] και [Pages] περιλαµβάνονται στο υποσέλιδο της σελίδας,
και για το λόγο αυτό η τρέχουσα ηµεροµηνία – ώρα και ο τρέχων αριθµός σελίδας εµφανίζονται στο τέλος της κάθε
σελίδας. Παρατηρούµε ακόµη πως για κάθε επίπεδο οµαδοποίησης υπάρχει και µία ξεχωριστή κεφαλίδα στην οποία
αναγράφεται το κατάλληλο σε κάθε περίπτωση κείµενο. Στην προκειµένη περίπτωση υπάρχουν τρεις τέτοιες κεφαλίδες
που αναφέρονται στο επώνυµο του ερµηνευτή, στο όνοµα του ερµηνευτή και στον τίτλο του τραγουδιού. Αντίθετα τα
πεδία τα οποία εµφανίζονται ταξινοµηµένα, περιλαµβάνονται στην ενότητα της αναφοράς που φέρει το όνοµα
«Λεπτοµέρεια». Στην προκειµένη περίπτωση υπάρχει µόνο ένα τέτοιο πεδίο, που κατά την προεπισκόπηση της
αναφοράς εµφανίζει τον τίτλο της ταινίας, για όσες ταινίες περιέχουν το κάθε τραγούδι και για τον κάθε ερµηνευτή.

Ολοκληρώνουµε την παρουσίαση της κατασκευής της τρέχουσας αναφοράς µε την περιγραφή της διαδικασίας
προσθήκης ενός κουµπιού εντολής στην επιφάνεια της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτό το κουµπί
εντολής θα ανοίγει σε προεπισκόπηση εκτύπωσης την αναφορά που κατασκευάσαµε, η οποία θα εµφανίζει τους τίτλους
των τραγουδιών και των ταινιών που επιστρέφονται από το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ για
τον καλλιτέχνη που έχει επιλέξει ο χρήστης στο πλαίσιο λίστας ARTIST_LIST. Η κατασκευή αυτού του κουµπιού
εντολής γίνεται δια της χρήσης του οδηγού στοιχείων ελέγχου της Access, οι διαδοχικές οθόνες του οποίου
παρουσιάζονται στα επόµενα σχήµατα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 61

Να κατασκευάσετε αναφορά που για κάθε διανοµέα να εµφανίζει το πλήθος των ταινιών που
ΑΣΚΗΣΗ 07.02 διανέµονται από αυτόν και το µέσο όρο του αποθέµατος VHS, του αποθέµατος BETA και της
τιµής για αυτές τις ταινίες.

Να κατασκευάσετε φόρµα που να εµφανίζει ένα πλαίσιο λίστας το οποίο θα περιέχει τους
τίτλους των ταινιών που είναι καταχωρηµένοι στον πίνακα ΤΑΙΝΙΑ. Στη συνέχεια να
κατασκευάσετε ένα κουµπί εντολής που όταν χρησιµοποιείται από το χρήστη θα εµφανίζει τους
ΑΣΚΗΣΗ 07.03 τίτλους των τραγουδιών που ακούγονται στην ταινία που έχει επιλέξει ο χρήστης καθώς και τα
ονόµατα των καλλιτεχνών που ερµήνευσαν αυτά τα τραγούδια. Τα στοιχεία αυτά θα
εµφανίζονται στην επιφάνεια της αναφοράς οµαδοποιηµένα ως προς τα ονόµατα των
τραγουδιών και ταξινοµηµένα κατά αύξουσα σειρά ως προς το επώνυµο του ερµηνευτή.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 62

ΕΡΓΑΣΤΗΡΙΟ 8

Το εργαστήριο αυτό είναι το τελευταίο της σειράς των εργαστηριακών µαθηµάτων που αφορούν τη χρήση
και λειτουργία της Microsoft Access. Στα επόµενα δύο εργαστήρια θα περάσουµε στη µελέτη του SQL
Server ο οποίος ως εφαρµογή προσφέρει περισσότερες δυνατότητες σε σχέση µε την Access τόσο ως προς
τον όγκο των δεδοµένων που βρίσκονται αποθηκευµένα στη βάση, όσο και ως προς την ταχύτητα
προσπέλασής τους.

Το αντικείµενο αυτού του εργαστηρίου είναι η µελέτη µερικών χαρακτηριστικών λειτουργιών της
Microsoft Access όπως είναι η ασφάλεια της βάσης δεδοµένων και η τεκµηρίωση του περιεχοµένου της.
Αυτές οι λειτουργίες επιτρέπουν την καλύτερη διαχείριση της βάσης και της πληροφορίας που βρίσκεται
αποθηκευµένη σε αυτή. Η συνοπτική περιγραφή αυτών των διαδικασιών αποτελούν το αντικείµενο των
σελίδων που ακολουθούν.

ΑΝΑΛΥΣΗ ΒΑΣΗΣ ∆Ε∆ΟΜΕΝΩΝ

Αυτό το εργαλείο της Microsoft Access επιτρέπει την ανάλυση και τεκµηρίωση της βάσης δεδοµένων
βοηθώντας έτσι τον προγραµµατιστή να βελτιστοποιήσει τη δοµή της και να δηµιουργήσει εύκολα και
γρήγορα αναφορές τεκµηρίωσης που περιγράφουν τα χαρακτηριστικά των αντικειµένων που
περιλαµβάνονται σε αυτή. Σε µια πιο λεπτοµερή περιγραφή, η λειτουργία αυτή, επιτρέπει την
πραγµατοποίηση τριών διαφορετικών διαδικασιών: (α) τη διάσπαση των πινάκων της βάσης σε
µικρότερους πίνακες – όπου και όταν είναι αναγκαίο – µε τέτοιο τρόπο ώστε να αποµακρυνθεί κάθε
πιθανότητα καταχώρησης διπλοεγγραφών, οι οποίες όπως έχουµε αναφέρει οδηγεί στη δηµιουργία
ασυνεπών δεδοµένων. (β) την ανάλυση της απόδοσης της βάσης και την υπόδειξη πιθανών τρόπων
βελτιστοποίησης οι οποίοι θα αυξήσουν την αποδοτικότητά της και (γ) τη δηµιουργία αναφορών
τεκµηρίωσης για τα αντικείµενα της βάσης δεδοµένων, αναφορές οι οποίες περιγράφουν τη φύση και τα
χαρακτηριστικά της κάθε ιδιότητας αυτών των αντικειµένων. Οι τρεις βασικές λειτουργίες του εργαλείου
ανάλυσης της Microsoft Access, παρουσιάζονται στο επόµενο σχήµα:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 63

Ο οδηγός ανάλυσης πινάκων δεν χρειάζεται να χρησιµοποιηθεί στη συγκεκριµένη βάση δεδοµένων, γιατί η
βάση έχει σχεδιαστεί µε τέτοιο τρόπο ώστε να µην είναι δυνατή η ύπαρξη διπλοεγγραφών στους πίνακες
που περιλαµβάνονται σε αυτή. Ωστόσο σε περιπτώσεις βάσεων η σχεδίαση των οποίων είναι
προβληµατική, η Microsoft Access έχει τη δυνατότητα βελτιστοποίησης της δοµής της βάσης. Ας
θεωρήσουµε για παράδειγµα τον πίνακα ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ του 2ου εργαστηρίου ο οποίος
περιλαµβάνει τόσο τα στοιχεία των ταινιών όσο και των ηθοποιών που συµµετέχουν σε αυτές:

∆εν είναι δύσκολο να διαπιστώσει κανείς πως η περίπτωση αυτή χαρακτηρίζεται από την ύπαρξη
επαναλαµβανόµενων πεδίων, κάτι που οφείλεται στο γεγονός πως στον πίνακα αυτό υπάρχουν πεδία που
ανήκουν σε δύο διαφορετικές οντότητες – την ΤΑΙΝΙΑ και τον ΗΘΟΠΟΙΟ. Αυτό σηµαίνει πως θα πρέπει
να λάβει χώρα διάσπαση των πινάκων σε µικρότερους πίνακες. Αν και το είδος της διάσπασης που θα
πραγµατοποιηθεί στην περίπτωση αυτή είναι προφανές, ας δούµε πώς αυτή η διαδικασία µπορεί να
πραγµατοποιηθεί χρησιµοποιώντας τον οδηγό βελτιστοποίησης της Microsoft Access. Ας µεταφερθούµε
λοιπόν στο κεντρικό menu επιλογών της εφαρµογής, και από τη γραµµή «Εργαλεία» ας επιλέξουµε
«Ανάλυση» και στη συνέχεια «Πίνακας». Στην περίπτωση αυτή θα λάβει χώρα η ενεργοποίηση του
οδηγού βελτιστοποίησης πινάκων της Microsoft Access, οι διαδοχικές οθόνες του οποίου παρουσιάζονται
στη συνέχεια:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 64

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 65

Από τις οκτώ οθόνες που εµφανίζονται δια της χρήσης του παραπάνω οδηγού, οι δύο πρώτες δεν εµφανίζουν παρά
ενηµερωτικές πληροφορίες σχετικά µε τη λειτουργία που πρόκειται να πραγµατοποιηθεί και τα προβλήµατα που
πρόκειται να επιλύσει, και για το λόγο αυτό δεν σχολιάζονται καθόλου. Η τρίτη οθόνη εµφανίζει ένα κατάλογο µε τους
πίνακες της βάσης, από όπου ο χρήστης επιλέγει τον πίνακα που επιθυµεί να βελτιστοποιήσει. Στο παράδειγµα αυτό ο
πίνακας που θα χρησιµοποιήσουµε φέρει το όνοµα ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ. Ακολουθεί στη συνέχεια ο καθορισµός
του τρόπου µε τον οποίο θα λάβει χώρα ο διαχωρισµός του επιλεγµένου πίνακα. Υπάρχουν δύο εναλλακτικές λύσεις
που µπορούµε να χρησιµοποιήσουµε: η πρώτη λύση είναι να προχωρήσουµε µόνοι µας στο διαχωρισµό των πινάκων,
ενώ η δεύτερη λύση είναι να αφήσουµε τον οδηγό της Access να πραγµατοποιήσει αυτό το διαχωρισµό.

Επιλέγοντας την πραγµατοποίηση του διαχωρισµού δια της χρήσης του οδηγού, εµφανίζεται η πέµπτη οθόνη στην
οποία η εφαρµογή µας προτείνει ένα τρόπο διάσπασης του πίνακα. Παρατηρούµε πως η Access έχει χωρίσει τον πίνακα
σε δύο µικρότερους πίνακες εκ των οποίων ο ένας περιέχει µόνο τα πεδία που αφορούν τις ταινίες, ενώ ο δεύτερος
περιέχει τα υπόλοιπα πεδία που αφορούν τους ηθοποιούς. Οι δύο αυτοί πίνακες συνδέονται µε ένα κοινό πεδίο, δια της
χρήσης του οποίου είναι δυνατή η πραγµατοποίηση της πράξης της σύζευξης ανάµεσά τους. Στην τρέχουσα έκδοσή
τους, οι πίνακες φέρουν τα ονόµατα Πίνακας 1 και Πίνακας 2, αλλά µπορούµε να αποδώσουµε τα δικά µας ονόµατα
εάν κάνουµε double click µε το ποντίκι πάνω στη γραµµή τίτλου του κάθε πίνακα και καταχωρήσουµε το νέο όνοµα
του πίνακα στο πλαίσιο διαλόγου που εµφανίζεται. Εάν δεν υπάρχει κάποιο πεδίο που να χαρακτηρίζεται από την
ύπαρξη µοναδικών τιµών για κάθε εγγραφή, ο οδηγός µπορεί να προσθέσει ένα τεχνητό µοναδικό αναγνωριστικό που
χρησιµοποιείται ως το πρωτεύον κλειδί του πίνακα, ενώ στην αντίθετη περίπτωση ορίζουµε κάποιο από τα υπάρχοντα
πεδία του.

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

Να κατασκευάσετε τον πίνακα ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ, να καταχωρήσετε τις εγγραφές που


περιλαµβάνονται σε αυτόν, και στη συνέχεια χρησιµοποιώντας τον οδηγό ανάλυσης πινάκων να
ΑΣΚΗΣΗ 08.01 τον διασπάσετε σε µικρότερους πίνακες µε τρόπο ώστε να µην υπάρχουν επαναλαµβανόµενα
δεδοµένα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 66

Το δεύτερο εργαλείο της ανάλυσης της βάσης δεδοµένων που υποστηρίζεται από τη Microsoft Access
αφορά την ανάλυση της απόδοσης της βάσης σύµφωνα µε την τρέχουσα δοµή της, και την εµφάνιση
προτάσεων που αν υλοποιηθούν θα οδηγήσουν σε αύξηση της απόδοσης της βάσης δεδοµένων. Για να
χρησιµοποιήσουµε αυτό το εργαλείο, θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της
εφαρµογής και από τη γραµµή «Εργαλεία» να επιλέξουµε «Ανάλυση» και στη συνέχεια «Απόδοση». Στην
περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο διαλόγου:

Αυτό το πλαίσιο διαλόγου περιλαµβάνει ένα πλήθος σελίδων κάθε µία από τις οποίες αναφέρεται και σε
ένα ξεχωριστό τύπο αντικειµένου. Για κάθε έναν από αυτούς τους τύπους η εφαρµογή εµφανίζει ένα
κατάλογο µε τα αντικείµενα που ανήκουν σε αυτόν, δίδοντας έτσι τη δυνατότητα στο χρήστη να επιλέξει
τα αντικείµενα που θα χρησιµοποιηθούν στην ανάλυση της απόδοσης. Στο παράδειγµα του παραπάνω
σχήµατος η ανάλυση αυτή θα πραγµατοποιηθεί πάνω σε όλα τα αντικείµενα της βάσης. Αν και έχουµε τη
δυνατότητα να ανοίξουµε µια – µια τις σελίδες του παραπάνω διαλόγου και σε κάθε µια από αυτές να
επιλέξουµε όλα τα αντικείµενα, µπορούµε να το κάνουµε πολύ πιο απλά, εµφανίζοντας τη σελίδα µε τίτλο
«Όλοι οι τύποι αντικειµένων», και χρησιµοποιώντας το κουµπί «Επιλογή όλων». Η πραγµατοποίηση αυτής
της διαδικασίας ολοκληρώνεται πατώντας το κουµπί OK.

Στο επόµενο βήµα της διαδικασίας η Microsoft Access προχωρεί στην ανάλυση της βάσης δεδοµένων, και
µετά από ένα µικρό ή µεγάλο χρονικό διάστηµα που εξαρτάται από την πολυπλοκότητα και τη δοµή της
βάσης, εµφανίζει το επόµενο πλαίσιο διαλόγου που περιλαµβάνει τα αποτελέσµατα της ανάλυσης που
πραγµατοποιήθηκε στο προηγούµενο στάδιο.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 67

Από το παραπάνω σχήµα δεν είναι δύσκολο να γίνει αντιληπτό πως τα αποτελέσµατα της ανάλυσης
εµφανίζονται σε τρεις διαφορετικές µορφές: Σύσταση, Εισήγηση και Ιδέα. Επιλέγοντας µε το ποντίκι
κάποιο από αυτά τα αποτελέσµατα στο πλαίσιο «Σηµειώσεις Ανάλυσης» που βρίσκεται ακριβώς από κάτω,
εµφανίζονται πληροφορίες σχετικά µε την προτεινόµενη βελτιστοποίηση. Ας αναφερθεί στο σηµείο αυτό,
πως οι βελτιστοποιήσεις εισήγησης χαρακτηρίζονται από ορισµένα µειονεκτήµατα τα οποία θα πρέπει να
ληφθούν υπ’ όψιν πριν προχωρήσουµε στην πραγµατοποίησή της. Τα µειονεκτήµατα αυτά παρουσιάζονται
στο πλαίσιο «Σηµειώσεις Ανάλυσης». Οι βελτιστοποιήσεις σύστασης και εισήγησης πραγµατοποιούνται
αυτόµατα από την Access, ενώ οι βελτιστοποιήσεις ιδέας πραγµατοποιούνται από το χρήστη και
ακολουθώντας τις οδηγίες που αντιστοιχούν σε αυτές τις προτάσεις. Για το λόγο αυτό, το κουµπί εντολής
που φέρει τον τίτλο «Βελτιστοποίηση» είναι απενεργοποιηµένο (disabled) κάθε φορά που ο χρήστης
επιλέγει κάποια από τις βελτιστοποιήσεις ιδέας.

Η τελευταία επιλογή του περιλαµβάνεται στα εργαλεία ανάλυσης της Microsoft Access είναι η
τεκµηρίωση της βάσης δεδοµένων. Αυτή η λειτουργία πραγµατοποιείται από την οµώνυµη επιλογή του
menu της ανάλυσης και συνίσταται στη δηµιουργία αναφορών που περιέχουν την αναλυτική περιγραφή
του κάθε ενός από τα αντικείµενα της βάσης δεδοµένων. Η επιλογή των αντικειµένων για τα οποία θα
λάβει χώρα η δηµιουργία της τεκµηρίωσης, πραγµατοποιείται από το ίδιο πλαίσιο διαλόγου από το οποίο
επιλέγουµε τα αντικείµενα των οποίων την απόδοση επιθυµούµε να αναλύσουµε. Όσον αφορά το είδος της
τεκµηρίωσης και το βαθµό λεπτοµέρειας στον οποίο αυτή θα πραγµατοποιηθεί, αυτό καθορίζεται από το
κουµπί εντολής που φέρει τον τίτλο «Επιλογές» και ευρίσκεται στο κάτω µέρος του πλαισίου διαλόγου.
Πιο συγκεκριµένα, οι πληροφορίες που µπορούµε να συλλέξουµε για τους πίνακες αφορούν τις ιδιότητές
τους, τις συσχετίσεις που υφίστανται ανάµεσά τους και τα δικαιώµατα πρόσβασης των χρηστών της βάσης
σε αυτούς, για τα πεδία των πινάκων µπορούµε να καταγράψουµε το όνοµά τους, τον τύπο των δεδοµένων
τους, το µέγεθος και τις ιδιότητές τους, ενώ παρόµοια στοιχεία µπορούν να αποθηκευτούν και για τα
ευρετήρια που µπορούµε να κατασκευάσουµε για τα διάφορα πεδία των πινάκων της βάσης, και κάθε φορά
που αυτό είναι αναγκαίο.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 68

Να εξοικειωθείτε µε το περιβάλλον ανάλυσης της Microsoft Access και να καταγράψετε τις


προτεινόµενες βελτιώσεις της εφαρµογής για επιλεγµένα αντικείµενα της βάσης. Να σχολιάσετε
ΑΣΚΗΣΗ 08.02 αυτές τις βελτιώσεις και χρησιµοποιώντας το σύστηµα βοήθεια της Access (Online Help) να
ανακτήσετε λεπτοµέρειες σχετικά µε τις ενέργειες που πρέπει να γίνουν προσπαθώντας έτσι να
κατανοήσετε τον τρόπο λειτουργίας τους.

Να δηµιουργήσετε αναφορές τεκµηρίωσης της Microsoft Access για όλους τους πίνακες της
βάσης δεδοµένων. Η τεκµηρίωση να αναπτυχθεί στην πλήρη της µορφή περιλαµβάνοντας για
ΑΣΚΗΣΗ 08.03 κάθε πίνακα τις ιδιότητές του, τις συσχετίσεις του µε τους άλλους πίνακες της βάσης και τα
δικαιώµατα χρηστών και οµάδων, και για κάθε πεδίο πίνακα τα ονόµατα, τους τύπους
δεδοµένων, τα µεγέθη τους και τις ιδιότητές τους.

ΑΣΦΑΛΕΙΑ ΒΑΣΗΣ ∆Ε∆ΟΜΕΝΩΝ

Η δεύτερη οµάδα λειτουργιών που µπορούν να χρησιµοποιηθούν για τη διαχείριση της βάσης δεδοµένων µέσα από το
περιβάλλον της Microsoft Access, συσχετίζεται µε την ασφάλεια της βάσης, δηλαδή µε την προστασία της από
προσπελάσεις µη εξουσιοδοτηµένων χρηστών. Στις επόµενες σελίδες θα µελετήσουµε αναλυτικά τις πιο
χαρακτηριστικές από τις δυνατότητες που µας προσφέρει η εφαρµογή και θα τις εφαρµόσουµε στην τρέχουσα βάση
δεδοµένων έτσι ώστε να κατανοήσουµε τον τρόπο χρήσης τους.

Η πιο χαρακτηριστική από τις ενέργειες που µπορούµε να κάνουµε για να προστατέψουµε τη βάση δεδοµένων, είναι να
ορίσουµε ένα κωδικό πρόσβασης δια της χρήσης του οποίου θα είναι δυνατό το άνοιγµα του αρχείου µέσα από τη
Microsoft Access. Για να ορίσουµε ένα τέτοιο κωδικό θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της
εφαρµογής και από το menu «Εργαλεία» να επιλέξουµε «Ασφάλεια» και στη συνέχεια «Ορισµός κωδικού πρόσβασης
στη βάση δεδοµένων…». Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο
διαλόγου:

Παρατηρούµε πως σε πλήρη αναλογία µε


παρόµοιες διαδικασίες άλλων εφαρµογών,
ο χρήστης θα πρέπει να καταχωρήσει τον
κωδικό δύο φορές έτσι ώστε να
αποκλεισθεί η παραµικρή πιθανότητα
λάθους. Ας σηµειωθεί πως στους κωδικούς
πρόσβασης γίνεται διάκριση πεζών –
κεφαλαίων γραµµάτων και για το λόγο
αυτό η όλη διαδικασία θα πρέπει να
Έχοντας καθορίσει τον κωδικό πρόσβασης την επόµενη φορά που θα γίνεται µε µεγάλη προσοχή – εάν ο
επιχειρήσουµε να ανοίξουµε το αρχείο, θα πρέπει να καθορίσουµε χρήστης ξεχάσει τον κωδικό πρόσβασης
αυτόν τον κωδικό προκειµένου η όλη προσπάθεια να ολοκληρωθεί µε δεν είναι δυνατή η προσπέλαση του
επιτυχία. αρχείου µε κανένα τρόπο.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 69

Ας σηµειωθεί πως για να είναι δυνατός ο καθορισµός κωδικού πρόσβασης θα πρέπει η βάση να ανοίξει σε κατάσταση
αποκλειστικής χρήσης – στην αντίθετη περίπτωση, θα εµφανιστεί το επόµενο µήνυµα σφάλµατος:

Σύµφωνα µε το παραπάνω µήνυµα για να ανοίξουµε τη βάση σε κατάσταση αποκλειστικής χρήσης θα πρέπει να την
κλείσουµε και στη συνέχεια να την ξανανοίξουµε χρησιµοποιώντας την εντολή «Άνοιγµα» από το menu «Αρχείο».
Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το οµώνυµο πλαίσιο διαλόγου στο οποίο θα
επιλέξουµε το όνοµα της βάσης και στη συνέχεια θα καθορίσουµε ότι θέλουµε να την ανοίξουµε για αποκλειστική
χρήση χρησιµοποιώντας αυτή την επιλογή από το πλαίσιο λίστας που εµφανίζεται δίπλα από το κουµπί «Άνοιγµα» του
πλαισίου διαλόγου:

Σχόλιο: Το άνοιγµα µιας βάσης δεδοµένων σε κατάσταση αποκλειστικής χρήσης προστατεύει τα δεδοµένα µιας
κοινόχρηστης βάσης δεδοµένων η οποία µπορεί να προσπελαστεί µέσω ενός δικτύου: όταν ανοίγει µια βάση σε αυτή
την κατάσταση δεν είναι δυνατή η προσπέλαση των δεδοµένων της από τους υπόλοιπους χρήστες του δικτύου αλλά
µόνο από το χρήστη που την άνοιξε.

Για να ακυρώσουµε τον κωδικό πρόσβασης που έχουµε ορίσει για την τρέχουσα βάση δεδοµένων θα πρέπει να
µεταφερθούµε ξανά στο κεντρικό menu επιλογών και από το menu «Εργαλεία» να επιλέξουµε «Ασφάλεια» και στη
συνέχεια όπως και πρώτα «Ορισµός κωδικού πρόσβασης στη βάση δεδοµένων…». Στην περίπτωση αυτή η Access θα
εµφανίσει το πλαίσιο διαλόγου που απεικονίζεται στο δεξί µέρος του παραπάνω σχήµατος, στο οποίο δίδουµε τον
κωδικό πρόσβασης της βάσης, ο οποίος ακυρώνεται. Είναι προφανές πως η ακύρωση του κωδικού πρόσβασης είναι
δυνατή µόνο όταν ο εν λόγω κωδικός είναι γνωστός στο χρήστη της εφαρµογής.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 70

Η δεύτερη µέθοδος ασφάλειας µιας βάσης δεδοµένων της Microsoft Access, είναι η ασφάλειά της σε
επίπεδο χρήστη, οι βασικές αρχές της οποίας ταυτίζονται µε τις αρχές ασφαλείας που χρησιµοποιούνται σε
ένα δίκτυο υπολογιστών. Οι βασικοί στόχοι αυτής της µεθόδου είναι: (α) η προστασία των αντικειµένων
της βάσης (πίνακες, φόρµες, ερωτήµατα, αναφορές και µακροεντολές) από απόπειρες µη
εξουσιοδοτηµένης προσπέλασης και τροποποίησης του περιεχοµένου τους και (β) η προστασία των
ευαίσθητων δεδοµένων της εφαρµογής.

Η χρήση αυτής της µεθόδου προστασίας περιλαµβάνει τη δηµιουργία και διαχείριση χρηστών και οµάδων
χρηστών. Υπάρχουν δύο βασικές οµάδες αυτού του είδους – αυτές φέρουν τα ονόµατα «∆ιαχειριστές» και
«Χρήστες». Είναι προφανές πως τα µέλη της πρώτης οµάδας έχουν πολύ περισσότερα δικαιώµατα
πρόσβασης σε σχέση µε τα µέλη της δεύτερης οµάδας. Εάν οι δύο αυτές οµάδες δεν είναι αρκετές,
µπορούµε να κατασκευάσουµε όσες οµάδες θέλουµε, να αποδώσουµε σε αυτές τα κατάλληλα δικαιώµατα
πρόσβασης, και στη συνέχεια να καταχωρήσουµε σε αυτή τους χρήστες που επιθυµούµε. Ο κάθε χρήστης
κατά την είσοδό του στο σύστηµα θα πρέπει να καταχωρήσει το όνοµα και τον κωδικό του. Στη συνέχεια η
αλληλεπίδρασή του µε τη βάση θα πραγµατοποιηθεί σύµφωνα µε τα δικαιώµατα πρόσβασης που του έχουν
αποδοθεί.

Ας περάσουµε τώρα στην αναλυτική περιγραφή της διαδικασίας καθορισµού χρηστών και οµάδων
χρηστών έτσι όπως αυτή πραγµατοποιείται µέσα από τη Microsoft Access. Προκειµένου να ορίσουµε
αυτές τις πληροφορίες θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της εφαρµογής και από
εκεί να επιλέξουµε «Εργαλεία», «Ασφάλεια» και «Λογαριασµοί χρηστών και οµάδων…». Στην
περίπτωση αυτή εµφανίζεται στην οθόνη µας ένα φύλλο ιδιοτήτων, οι πιο σηµαντικές σελίδες του οποίου
παρουσιάζονται στη συνέχεια:

Από το παραπάνω σχήµα είναι προφανές πως αυτές οι δύο σελίδες επιτρέπουν την προσθήκη και διαγραφή
χρηστών και οµάδων χρηστών καθώς και την τοποθέτηση των χρηστών στις κατάλληλες σε κάθε
περίπτωση οµάδες. Η δηµιουργία ενός χρήστη ή µιας νέας οµάδας γίνεται χρησιµοποιώντας το οµώνυµο
κουµπί εντολής από την κατάλληλη σελίδα ιδιοτήτων και καταχωρώντας στο επόµενο πλαίσιο διαλόγου το
όνοµα και το προσωπικό αναγνωριστικό (PID) του χρήστη ή της οµάδας.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 71

Στην παραπάνω διαδικασία, το προσωπικό


αναγνωριστικό ορίζεται ως µια αλφαριθµητική
συµβολοσειρά µε µήκος 4 έως 20 χαρακτήρες την
οποία η Microsoft Access συνδυάζει µε ένα όνοµα
λογαριασµού χρήστη προκειµένου να
προσδιορίσει την ταυτότητα ενός χρήστη ή µιας
οµάδας σε µια οµάδα εργασίας. Η χρήση αυτού
του αναγνωριστικού χαρακτηρίζεται από τη
διάκριση πεζών – κεφαλαίων γραµµάτων.

Χρησιµοποιώντας την παραπάνω διαδικασία να δηµιουργήσετε τους χρήστες (strDoc, A125),


(ansTrc, 7742) και (mcFunny, 0BC3) και να τους τοποθετήσετε στην οµάδα «Χρήστες» - όπως
εύκολα µπορεί να διαπιστωθεί αυτή είναι και η προεπιλεγµένη οµάδα στην οποία
τοποθετούνται όλοι οι χρήστες της εφαρµογής. Στη συνέχεια να δηµιουργήσετε το χρήστη
ΑΣΚΗΣΗ 08.04 (admin03, 7G12) και να τον τοποθετήσετε στις οµάδες «∆ιαχειριστές» και «Χρήστες». Τέλος
να δηµιουργήσετε την οµάδα (stuff, 9998) και να προσθέσετε σε αυτή τους χρήστες (strDoc,
A215), (usDate, 4FGA) και (zDag, 4F72). Στην παραπάνω περιγραφή ο λογαριασµό του χρήστη
συµβολίζεται ως (userName, PID), όπου userName το όνοµα του χρήστη, και PID ο
προσωπικός κωδικός του.

Η τρίτη σελίδα του φύλλου ιδιοτήτων «Λογαριασµοί χρηστών και οµάδων» επιτρέπει την αλλαγή του κωδικού
πρόσβασης του επιλεγµένου χρήστη – δηλαδή αυτού που εµφανίζεται στο πλαίσιο λίστας «Όνοµα χρήστη» της σελίδας
των χρηστών. Όπως συµβαίνει σε όλες τις εφαρµογές αυτού του είδους, ο χρήστης θα πρέπει να καταχωρήσει τον
παλαιό κωδικό πρόσβασης και στη συνέχεια δύο φορές το νέο κωδικό πρόσβασης, έτσι ώστε να αποκλεισθεί κάθε
πιθανότητα εσφαλµένης πληκτρολόγησης.

Η τελευταία διαδικασία µε την οποία θα ασχοληθούµε σε αυτό το εργαστήριο, αφορά την απόδοση των κατάλληλων
δικαιωµάτων πρόσβασης στους χρήστες του συστήµατος. Αυτή η λειτουργία επιτυγχάνεται από την κεντρική γραµµή
εργαλείων της εφαρµογής, εάν µεταφερθούµε στο menu «Εργαλεία» και στη συνέχεια επιλέξουµε «Ασφάλεια» και
«∆ικαιώµατα χρηστών και οµάδων…». Στην περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το φύλλο
ιδιοτήτων µε τον οµώνυµο τίτλο, οι δύο σελίδες του οποίου παρουσιάζονται στη συνέχεια:

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Εργαστήριο Βάσεων ∆εδοµένων Ι – Εργαστηριακές Ασκήσεις 72

Ας µελετήσουµε τη λειτουργία αυτού του πλαισίου ξεκινώντας από την πρώτη σελίδα του. Στο πάνω µέρος του
πλαισίου διαλόγου εµφανίζονται δύο πλαίσια λίστας εκ των οποίων το αριστερό πλαίσιο περιλαµβάνει τα ονόµατα των
χρηστών του συστήµατος – αυτά που είχαν δηµιουργηθεί χρησιµοποιώντας την προηγούµενη διαδικασία – ενώ το δεξί
πλαίσιο εµφανίζει ένα κατάλογο των αντικειµένων της βάσης. Επιλέγοντας κάποιο χρήστη και κάποιο αντικείµενο,
µπορούµε στη συνέχεια χρησιµοποιώντας τα κατάλληλα πλαίσια επιλογής (check boxes) να ορίσουµε τα κατάλληλα
δικαιώµατα πρόσβασης που θα έχει ο επιλεγµένος χρήστης πάνω στο επιλεγµένο αντικείµενο. Αυτά τα δικαιώµατα
χαρακτηρίζονται από τα ονόµατα «Άνοιγµα / Εκτέλεση», «Ανάγνωση σχεδίασης», «Τροποποίηση σχεδίασης»,
«∆ιαχείριση», «Ανάγνωση δεδοµένων», «Ενηµέρωση δεδοµένων», «Εισαγωγή δεδοµένων» και «∆ιαγραφή
δεδοµένων». Στο παράδειγµα του προηγούµενου σχήµατος, ο χρήστης mcFunny, έχει πάνω στον πίνακα ΕΠΕΝ∆ΥΣΗ
τα δικαιώµατα της ανάγνωσης σχεδίασης, της ανάγνωσης δεδοµένων και της εισαγωγής δεδοµένων, ενώ δεν µπορεί να
πραγµατοποιήσει άλλες διαδικασίες, για παράδειγµα να διαγράψει ή να τροποποιήσει τις εγγραφές του συγκεκριµένου
πίνακα.

Με εντελώς ανάλογο τρόπο λαµβάνει χώρα και η απόδοση δικαιωµάτων στις οµάδες χρηστών. Είναι προφανές πως τα
δικαιώµατα πρόσβασης που καθορίζονται για µια οµάδα, µεταφέρονται αυτόµατα σε όλους τους χρήστες που ανήκουν
σε αυτή την οµάδα.

Χρησιµοποιώντας τη σελίδα ιδιοτήτων που παρουσιάσαµε στην προηγούµενη ενότητα, να


ορίσετε για την βάση ταινιών video τα ακόλουθα δικαιώµατα πρόσβασης: (α) στους χρήστες
ansTrc, strDoc και usDate να ορίσετε για τους πίνακες ΤΑΙΝΙΑ, ΤΡΑΓΟΥ∆Ι, ΕΡΜΗΝΕΥΤΗΣ
και ∆ΙΑΝΟΜΕΑΣ τα δικαιώµατα «Ανάγνωση σχεδίασης» και «Ανάγνωση δεδοµένων» και για
ΑΣΚΗΣΗ 08.05
τους πίνακες ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ, ΕΠΕΝ∆ΥΣΗ, ΕΡΜΗΝΕΙΑ και ΣΥΜΜΕΤΟΧΗ τα
δικαιώµατα «Ανάγνωση σχεδίασης», «Ανάγνωση δεδοµένων» και «Εισαγωγή δεδοµένων». (β)
να αποδώσετε όλα τα δικαιώµατα πρόσβασης για τους παραπάνω πίνακες της βάσης στο
χρήστη zDag.

Η δεύτερη σελίδα ιδιοτήτων του παραπάνω πλαισίου διαλόγου επιτρέπει την αλλαγή του κατόχου για τα διάφορα
αντικείµενα της βάσης. Αυτή η διαδικασία είναι πολύ εύκολο να πραγµατοποιηθεί, καθώς το µόνο που έχουµε να
κάνουµε είναι να επιλέξουµε το αντικείµενο από τον κατάλληλο σε κάθε περίπτωση κατάλογο αντικειµένων, και στη
συνέχεια να ορίσουµε το νέο κάτοχο του αντικειµένου χρησιµοποιώντας το οµώνυµο πλαίσιο λίστας. Σε πλήρη
αναλογία µε ανάλογα περιβάλλοντα διαχείρισης πολλών χρηστών, ο κάτοχος του αντικειµένου (owner) ορίζεται ως ο
χρήστης που δηµιούργησε αυτό το αντικείµενο και έχει πλήρη δικαιώµατα πάνω σε αυτό. Είναι προφανές πως εάν τα
δικαιώµατα του κατόχου ενός αντικειµένου µεταβιβαστούν σε κάποιο άλλο χρήστη, αυτός θα έχει πλήρη πρόσβαση
πάνω στο αντικείµενο αυτό, και θα µπορεί να προχωρήσει σε τροποποίηση της δοµής του και του περιεχοµένου του, ή
ακόµη και στη διαγραφή του από τη βάση δεδοµένων της εφαρµογής. Για το λόγο αυτό η διαδικασία µεταβίβασης
δικαιωµάτων των αντικειµένων της βάσης, θα πρέπει να γίνεται µε πολύ µεγάλη προσοχή.

Να εξοικειωθείτε µε τη διαδικασία µεταβίβασης δικαιωµάτων και αλλαγής κατόχου των


αντικειµένων της βάσης δεδοµένων, επιλέγοντας τα αντικείµενα που επιθυµείτε (πίνακες,
ΑΣΚΗΣΗ 08.06
φόρµες, αναφορές, ερωτήµατα και µακροεντολές) και µεταβιβάζοντάς τα σε κάποιον από τους
χρήστες που έχετε δηµιουργήσει στις προηγούµενες ασκήσεις του εργαστηρίου.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


ΚΑΤΑΣΚΕΥΗ ΦΟΡΜΑΣ ΚΑΤΑΧΩΡΗΣΗΣ ∆Ε∆ΟΜΕΝΩΝ ΣΕ
ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ (∆ΗΛΑ∆Η ΧΩΡΙΣ ΤΗ ΧΡΗΣΗ του
Ο∆ΗΓΟΥ ΦΟΡΜΩΝ (FORM WIZARD))
Στο παράδειγµα που ακολουθεί θα κατασκευάσουµε τη φόρµα καταχώρησης
στοιχείων βιβλίων που συσχετίζεται µε τη βάση δεδοµένων της βιβλιοθήκης.
Προκειµένου να κατασκευάσουµε µια τέτοια φόρµα σε προβολή σχεδίασης,
µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, και
από εκεί επιλέγουµε Φόρµες Æ ∆ηµιουργία. Στην περίπτωση αυτή εµφανίζεται στην
οθόνη του υπολογιστή µας το επόµενο πλαίσιο διαλόγου.

Αν και έχουµε τη δυνατότητα στο σηµείο αυτό να επιλέξουµε τον πίνακα ή το


ερώτηµα από το οποίο η φόρµα παίρνει δεδοµένα, εν τούτοις δεν θα καθορίσουµε
στο σηµείο αυτό την εν λόγω πληροφορία, αλλά θα ορίσουµε την πηγή
δεδοµένων της φόρµας από το φύλλο ιδιοτήτων της. Για το λόγω αυτό θα
αφήσουµε κενό το πλαίσιο λίστας (combo box) που βρίσκεται στο κάτω µέρος του
παραθύρου και απλά θα πατήσουµε το πλήκτρο OK προκειµένου να προχωρήσουµε
στο επόµενο στάδιο. Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη µας το πρότυπο
της κενής φόρµας που παρουσιάζεται στο επόµενο σχήµα.
Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 2

Στο σχήµα αυτό παρουσιάζεται η βασική περιοχή µιας φόρµας στη


Microsoft Access που φέρει το όνοµα «Λεπτοµέρεια (Details)». Οι άλλες δύο
περιοχές που επίσης χρησιµοποιούνται κατά το στάδιο δηµιουργίας µιας φόρµας είναι
η «Κεφαλίδα (Header)» και το «Υποσέλιδο (Footer)» που περιέχουν πληροφορίες
κοινές για όλες τις εγγραφές. Η αναλυτική περιγραφή των ενοτήτων µιας φόρµας
καθώς και όλων των άλλων στοιχείων που συσχετίζονται µε τη διαδικασία
κατασκευής της, παρουσιάζονται στο Κεφάλαιο 10 των σηµειώσεων του µαθήµατος
που µπορεί να βρεθεί στη διεύθυνση www.neural.uom.gr/databases/chapter10.pdf.

Στο πρώτο βήµα της διαδικασίας θα πρέπει να ορίσουµε τον πίνακα ή το


ερώτηµα µε το οποίο θα συσχετίσουµε την τρέχουσα φόρµα. Για να το κάνουµε
αυτό θα πρέπει να κάνουµε double click µε το ποντίκι στο µικρό τετράγωνο που
βρίσκεται στην πάνω αριστερή γωνία της φόρµας (αυτό που στο προηγούµενο
σχήµα υποδεικνύεται µε το βέλος). Εναλλακτικά µπορούµε να εµφανίσουµε αυτό το
παράθυρο, εάν από το κεντρικό menu της Access επιλέξουµε Προβολή (View) και
στη συνέχεια Ιδιότητες (Properties). Σε κάθε περίπτωση εµφανίζεται στην οθόνη
του υπολογιστή µας το παράθυρο των ιδιοτήτων της φόρµας, από το οποίο
επιλέγουµε τη σελίδα µε τον τίτλο «∆εδοµένα (Data Properties)».

Από το σύνολο των ιδιοτήτων που εµφανίζονται σε αυτό το παράθυρο,


εκείνη που µας ενδιαφέρει είναι η πρώτη που φέρει το όνοµα «Προέλευση
Εγγραφών (Record Source)». Η ιδιότητα αυτή επιτρέπει τον καθορισµό του
αντικειµένου της βάσης (πίνακα ή ερώτηµα) από το οποίο η φόρµα θα παίρνει
δεδοµένα. Στην προκειµένη περίπτωση το αντικείµενο αυτό είναι ο πίνακας BOOK,
τον οποίο καθορίζουµε, επιλέγοντάς τον από το πλαίσιο λίστας (combo box) που
εµφανίζεται κάνοντας click µε το ποντίκι πάνω στο κουµπί που υποδεικνύεται από το
βέλος στο παραπάνω σχήµα. Η διαδικασία αυτή έχει ως αποτέλεσµα την εµφάνιση
του καταλόγου των πινάκων και των ερωτηµάτων της βάσης δεδοµένων. Από τη
λίστα των πινάκων που εµφανίζεται, επιλέγουµε τον πίνακα BOOK ως την πηγή των
δεδοµένων προέλευσης για την τρέχουσα φόρµα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 3

Ολοκληρώνοντας την παραπάνω διαδικασία έχουµε ορίσει την προέλευση


των εγγραφών για τα αντικείµενα της φόρµας. Στο επόµενο βήµα θα πρέπει να
τοποθετήσουµε στη φόρµα τα κατάλληλα πεδία και να συσχετίσουµε αυτά τα
πεδία µε αντίστοιχα πεδία του πίνακα BOOK. Σύµφωνα µε το σενάριο της
άσκησης ο πίνακας BOOK περιέχει τα πεδία BookId (Αυτόµατη αρίθµηση), Title
(Text), Language (Text), Pages (Number), ISBN (Text), Topic (Text), Science
(Text) και EditorId (Number). Για κάθε ένα από αυτά τα πεδία του πίνακα BOOK
θα πρέπει να δηµιουργήσουµε ένα αντίστοιχο πεδίο στην επιφάνεια της φόρµας
και στη συνέχεια να το συσχετίσουµε µε το πεδίο του πίνακα στο οποίο
αντιστοιχεί. Η δηµιουργία αυτών των πεδίων µπορεί να γίνει χρησιµοποιώντας την
εργαλειοθήκη (Toolbox) η οποία εµφανίζεται εάν µεταφερθούµε στο κεντρικό menu
επιλογών της Access και από εκεί επιλέξουµε Προβολή (View) Æ Εργαλειοθήκη
(Toolbox).

Από όλα τα πλαίσια ελέγχου που περιλαµβάνονται στην εργαλειοθήκη,


εκείνο που θα χρησιµοποιήσουµε είναι το πλαίσιο κειµένου που στο προηγούµενο
σχήµα βρίσκεται κλεισµένο µέσα σε κύκλο. Για να τοποθετήσουµε ένα πλαίσιο
κειµένου πάνω στην επιφάνεια της φόρµας, το επιλέγουµε µε το ποντίκι και στη
συνέχεια κάνουµε click πάνω στο σηµείο της επιφάνειας της φόρµας στο οποίο
θέλουµε να τοποθετήσουµε το νέο πλαίσιο κειµένου. Κατά την εφαρµογή αυτής της
διαδικασίας προσέχουµε ώστε το κουµπί που υποδεικνύεται µε το βέλος στο
Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)
Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 4

παραπάνω σχήµα (control wizard) να µην είναι ενεργοποιηµένο. Στην περίπτωση


αυτή το νέο πεδίο εµφανίζεται πάνω στην επιφάνεια της φόρµας. Επειδή αυτό το
πεδίο δεν έχει ακόµη συσχετιστεί µε κάποιο από τα πεδία του πίνακα BOOK
αναγράφεται στο εσωτερικό του η ετικέτα «Μη ∆εσµευµένο (Unbounded)».

Προκειµένου να συσχετίσουµε το νέο πεδίο µε κάποιο πεδίο του πίνακα


BOOK (που έχει ήδη καθοριστεί στο προηγούµενο στάδιο ως η πηγή δεδοµένων για
τη νέα φόρµα), ακολουθούµε παρόµοια διαδικασία µε εκείνη που εφαρµόσαµε στην
προηγούµενη περίπτωση. Πιο συγκεκριµένα, επιλέγουµε το πεδίο της φόρµας µε το
ποντίκι, και στη συνέχεια, χρησιµοποιώντας το δεξί πλήκτρο του ποντικιού
εµφανίζουµε το menu επιλογών του πεδίου, και από εκεί ενεργοποιούµε την επιλογή
«Ιδιότητες».

Η διαδικασία αυτή έχει ως αποτέλεσµα την εµφάνιση του φύλλου


ιδιοτήτων του εν λόγω πεδίου, από το οποίο χρησιµοποιούµε τη σελίδα
«∆εδοµένα» και στο πεδίο «Προέλευση Στοιχείου Ελέγχου (Control Source
Property)» επιλέγουµε το πεδίο Title (η διαδικασία αυτή παρουσιάζεται στο επόµενο
σχήµα). Με τον τρόπο αυτό έχουµε καθορίσει πως το νέο πεδίο της επιφάνειας της
φόρµας θα συσχετίζεται µε το πεδίο Title του πίνακα BOOK. Μία άλλη
ενδιαφέρουσα ιδιότητα που µπορούµε να καθορίσουµε είναι η λεζάντα που θα
αναγράφεται δίπλα στο νέο πεδίο. Στο παράδειγµά µας η προεπιλεγµένη λεζάντα
που δηµιούργησε η Microsoft Access για το νέο πεδίο είναι η λέξη «Κείµενο0». Για
να αλλάξουµε αυτή τη λεζάντα, επιλέγουµε την ετικέτα του νέου πεδίου, εµφανίζουµε
το φύλλο ιδιοτήτων της, µεταφερόµαστε στη σελίδα «Μορφή» και στο πεδίο
«Λεζάντα» καταχωρούµε την ετικέτα που θέλουµε. Στην προκειµένη περίπτωση και

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 5

επειδή το νέο πεδίο συσχετίστηκε µε το πεδίο Title του πίνακα BOOK µπορούµε ως
λεζάντα για το νέο πεδίο τη φράση «Τίτλος Βιβλίου».

ΣΗΜΕΙΩΣH: Είναι προφανές πως επειδή το αντικείµενο προέλευσης


εγγραφών της φόρµας είναι ο πίνακας BOOK η λίστα των πεδίων από τα οποία
επιλέγουµε το αντικείµενο προέλευσης των διαφόρων πεδίων της φόρµας,
περιλαµβάνει µόνο τα πεδία του πίνακα BOOK και τίποτε περισσότερο.

ΑΣΚΗΣΗ: Χρησιµοποιώντας την παραπάνω διαδικασία, να


κατασκευαστούν πεδία στην επιφάνεια της φόρµας για όλα τα
πεδία του πίνακα BOOK.

ΜΕΤΑΚΙΝΗΣΗ ΠΕ∆ΙΩΝ ΣΤΗΝ ΕΠΙΦΑΝΕΙΑ ΤΗΣ ΦΟΡΜΑΣ

Από τα όσα αναφέρθηκαν στην προηγούµενη ανάλυση είναι προφανές πως


κάθε φορά που τοποθετούµε ένα πεδίο στην επιφάνεια της φόρµας δια της χρήσης
του πλαισίου διαλόγου που είναι γνωστό ως «Εργαλειοθήκη» , αυτό δεν εµφανίζεται
από µόνο του, αλλά συνοδεύεται από µία ετικέτα, το κείµενο της οποίας
χαρακτηρίζει και το ρόλο του πεδίου µέσα στη φόρµα. Εάν ο χρήστης επιλέξει µε
το ποντίκι το στοιχείο ελέγχου, λαµβάνει χώρα αυτόµατη επιλογή και της ετικέτας
που το περιγράφει – ενώ φυσικά ισχύει και το αντίστροφο. Μετά την επιλογή του εν
λόγω στοιχείου, η µεταφορά του δροµέα του ποντικιού πάνω από αυτό (η την
αντίστοιχη ετικέτα) προκαλεί τη µεταβολή του σχήµατος του δροµέα, και στη
συνέχεια η µετακίνηση του πλαισίου ελέγχου (µαζί µε την ετικέτα που το
περιγράφει) είναι δυνατή µέσω µιας διαδικασίας drag and drop.

Εάν επιθυµούµε να µετακινήσουµε µόνο το πλαίσιο ελέγχου (ή εναλλακτικά


µόνο την ετικέτα που το συνοδεύει), θα πρέπει να µεταφέρουµε τον δείκτη του
ποντικιού πάνω στην άνω αριστερή γωνία του επιλεγµένου αντικειµένου (αυτή που
στην επόµενη εικόνα υποδεικνύεται µε το βέλος), και στη συνέχεια να το
µεταφέρουµε στη νέα του θέση µέσω µιας διαδικασίας drag and drop. Στην
περίπτωση αυτή λαµβάνει χώρα µετακίνηση του επιλεγµένου αντικειµένου, ενώ το
άλλο αντικείµενο παραµένει στην αρχική του θέση.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 6

Τέλος εάν επιθυµούµε να µεταφέρουµε ταυτόχρονα περισσότερα από ένα


αντικείµενα, επιλέγουµε το πρώτο από αυτά και στη συνέχεια επιλέγουµε και τα
υπόλοιπα αντικείµενα χρησιµοποιώντας το αριστερό πλήκτρο του ποντικιού και
κρατώντας πατηµένο το πλήκτρο Shift. Εναλλακτικά µπορούµε να επιλέξουµε τα
αντικείµενα µε µία διαδικασία drag and drop ανάµεσα σε δύο σηµεία (σαν τα
σηµεία Α και Β του σχήµατος που ακολουθεί) τέτοια ώστε το παραλληλόγραµµο που
ορίζουν να περιέχει όλα τα αντικείµενα που θέλουµε να επιλέξουµε. Παράδειγµα
οµάδας επιλεγµένων αντικειµένων παρουσιάζεται στο επόµενο σχήµα.

ΣΗΜΕΙΩΣΗ: Η µετακίνηση των πεδίων µιας φόρµας µπορεί να γίνει και δια της
χρήσης του πληκτρολογίου. Για να το κάνουµε αυτό επιλέγουµε το πεδίο µε το
ποντίκι και στη συνέχεια το µετακινούµε προς τα πάνω, προς τα κάτω, προς τα
αριστερά ή προς τα δεξιά, χρησιµοποιώντας τα αντίστοιχα πλήκτρα του
πληκτρολογίου (δηλαδή τα ↑, ↓, ←, →) και κρατώντας ταυτόχρονα πατηµένο το
πλήκτρο Ctrl. Αυτός ο τρόπος της µετακίνησης είναι ιδιαίτερα χρήσιµος σε
περιπτώσεις κατά τις οποίες επιθυµούµε να µετακινήσουµε το αντικείµενο σε πάρα
πολύ µικρή απόσταση σε σχέση µε την αρχική του θέση. Σε κάθε περίπτωση
µπορούµε να ορίσουµε πλήρως τη θέση του αντικειµένου επί της επιφάνειας της
φόρµας, χρησιµοποιώντας τη σελίδα Μορφή του φύλλου ιδιοτήτων του
αντικειµένου και αποδίδοντας τις κατάλληλες τιµές στα πεδία Αριστερά (Left)
και Πάνω (Top).

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 7

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

Η µεταβολή του µεγέθους των διαφόρων πεδίων που υπάρχουν στην


επιφάνεια µιας φόρµας µπορεί να γίνει τόσο µε το πληκτρολόγιο όσο και µε το
ποντίκι. Στο πρώτο βήµα της διαδικασίας θα πρέπει να λάβει χώρα η επιλογή του
αντικειµένου. Στη συνέχεια και εάν θέλουµε να µεταβάλλουµε το µέγεθος του
αντικειµένου χρησιµοποιώντας το ποντίκι, θα πρέπει να µεταφέρουµε τον δείκτη
του ποντικιού σε κάποιο από τα µικρά µαύρα τετράγωνα που χαρακτηρίζουν ένα
επιλεγµένο αντικείµενο (αυτά που υποδεικνύονται µε τις µαύρες γραµµές στο
επόµενο σχήµα). Ανάλογα µε τη θέση αυτού του τετραγώνου (το οποίο µπορεί να
βρίσκεται επί οριζόντιας ή επί κάθετης πλευράς, ή εναλλακτικά σε κάποια από τις
γωνίες του επιλεγµένου αντικειµένου), ο δείκτης του ποντικιού µετασχηµατίζεται
σε ένα οριζόντιο, κατακόρυφο ή διαγώνιο διπλό βέλος. Στη συνέχεια µε µια
διαδικασία drag and drop αυξοµειώνουµε το µέγεθος του επιλεγµένου προς την
οριζόντια, κατακόρυφη ή διαγώνια διεύθυνση.

Από την άλλη πλευρά, η µεταβολή του µεγέθους του αντικειµένου δια της
χρήσης του πληκτρολογίου, γίνεται χρησιµοποιώντας τα πλήκτρα κίνησης του
δροµέα (δηλαδή τα ↑, ↓, ←, →) και κρατώντας πατηµένο το πλήκτρο Shift.
Ανάλογα µε το πλήκτρο που χρησιµοποιούµε, µπορούµε να µεγαλώσουµε ή να
συρρικνώσουµε το επιλεγµένο σε κάθε περίπτωση αντικείµενο, τόσο κατά την
οριζόντια όσο και κατά την κατακόρυφη διεύθυνση. Τέλος, ο καθορισµός του
µεγέθους του αντικειµένου µπορεί να πραγµατοποιηθεί καταχωρώντας τις
κατάλληλες τιµές στα πεδία «Πλάτος» και «Ύψος» που βρίσκονται στη σελίδα
«Μορφή (Layout)» του φύλλου ιδιοτήτων του αντικειµένου.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 8

ΣΤΟΙΧΙΣΗ ΤΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΣΤΗΝ ΕΠΙΦΑΝΕΙΑ ΤΗΣ ΦΟΡΜΑΣ

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


πρέπει πρώτα να τα επιλέξουµε χρησιµοποιώντας το πληκτρολόγιο ή το ποντίκι, και
στη συνέχεια να καθορίσουµε το είδος της στοίχισης χρησιµοποιώντας το οµώνυµο
menu επιλογών που παρουσιάζεται στο επόµενο σχήµα.

Από το παραπάνω σχήµα είναι προφανές πως η στοίχιση των πεδίων µπορεί
να γίνει προς τα αριστερά, προς τα δεξιά, προς τα πάνω ή προς τα κάτω.
Επιπλέον, εάν έχουµε ενεργοποιήσει την επιλογή «Συγκράτηση στο πλέγµα (Snap
to Grid)» που βρίσκεται στο ίδιο menu επιλογών, έχουµε τη δυνατότητα στοίχισης
των αντικειµένων της φόρµας χρησιµοποιώντας το πλέγµα που ορίζεται πάνω στην
επιφάνειά της.

Μία άλλη σηµαντική παράµετρος που χρησιµοποιείται κατά τη σχεδίαση µιας


φόρµας, είναι η οριζόντια και η κατακόρυφη απόσταση των στοιχείων µιας
φόρµας. Στις πιο συνηθισµένες περιπτώσεις τα πεδία µιας φόρµας διατάσσονται σε
κατακόρυφη διάταξη το ένα κάτω από το άλλο και σε ίσες αποστάσεις.
Προκειµένου να επιτύχουµε αυτό το είδος διάταξης, θα πρέπει να επιλέξουµε τα
πεδία που θέλουµε να διατάξουµε χρησιµοποιώντας το πληκτρολόγιο ή το ποντίκι,
και στη συνέχεια να ορίσουµε ίσες κατακόρυφες αποστάσεις χρησιµοποιώντας το
οµώνυµο menu επιλογών το οποίο παρουσιάζεται στο επόµενο σχήµα.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 9

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

Μετά τη διαµόρφωση της επιφάνειας της φόρµας ανάλογα µε τις απαιτήσεις


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

Προκειµένου να τοποθετήσουµε ένα κουµπί εντολής πάνω στην επιφάνεια


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

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 10

δηµιουργία του. Στην αντίθετη περίπτωση, θα πρέπει να γράψουµε µε το χέρι τον


κώδικα που εκτελείται κάθε φορά που χρησιµοποιείται το νέο κουµπί. Και στις
δύο περιπτώσεις, αυτός ο κώδικας αντιστοιχεί στο συµβάν Click που ευρίσκεται στη
σελίδα «Συµβάν (Event Properties)» του φύλλου ιδιοτήτων του νέου κουµπιού
εντολής.

Η διαδικασία ορισµού του εν λόγω συµβάντος µπορεί να λάβει χώρα


χρησιµοποιώντας το πλήκτρο που υποδεικνύεται στο προηγούµενο σχήµα. Πατώντας
αυτό το πλήκτρο εµφανίζεται το επόµενο πλαίσιο διαλόγου από το οποίο µπορούµε
να καθορίσουµε εάν αυτό που θα εκτελεστεί κάθε φορά που θα χρησιµοποιείται αυτό
το πλήκτρο θα είναι µακροεντολή ή κώδικας σε Visual Basic. Στο παράδειγµά µας
θα παραθέσουµε τον κώδικα σε Visual Basic που υλοποιεί τη λειτουργικότητα
των δύο κουµπιών εντολής, και σε επόµενο µάθηµα θα µελετήσουµε αναλυτικά τον
τρόπο ανάπτυξης και χρήσης αυτού του κώδικα.

Προκειµένου να γράψουµε κώδικα σε γλώσσα Visual Basic που να υλοποιεί


τη λειτουργικότητα του κάθε κουµπιού εντολής επιλέγουµε από το παραπάνω
παράθυρο τη φράση «Λειτουργία ∆όµησης Κώδικα» και πατάµε το πλήκτρο OK.
Στην περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το παράθυρο
ανάπτυξης κώδικα της Microsoft Access.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)


Κατασκευή Φόρµας Καταχώρησης ∆εδοµένων σε Προβολή Σχεδίασης 11

Στο παραπάνω παράδειγµα το κουµπί που δηµιουργήσαµε έλαβε από την


Access το όνοµα Εντολή59 (αυτό το όνοµα φυσικά µεταβάλλεται κατά βούληση) και
για το λόγο αυτό η διαδικασία συµβάντος που αντιστοιχεί στο click event φέρει το
όνοµα Εντολή59_Click(). Όσον αφορά τον κώδικα που θα εκτελείται κάθε φορά που
θα χρησιµοποιείται αυτό το κουµπί, αυτός αναγράφεται ανάµεσα στο ζεύγος των
δεσµευµένων προτάσεων Private Sub Procedure_Name και End Sub όπου
Procedure_Name είναι το όνοµα της διαδικασίας που χρησιµοποιείται σε κάθε
περίπτωση. Στο παράδειγµά µας, ο κώδικας που θα τοποθετηθεί στο κουµπί που θα
κλείνει τη φόρµα θα είναι ο

DoCmd.Close
ενώ ο κώδικας που θα τοποθετηθεί στο κουµπί που θα αποθηκεύει την τρέχουσα
εγγραφή θα είναι ο

DoCmd.DoMenuItem acFormBar, acRecordsMenu,


acSaveRecord, , acMenuVer70
Περισσότερες λεπτοµέρειες σχετικά µε τη διαδικασία συγγραφής κώδικα
µπορούν να βρεθούν στο Κεφάλαιο 14 των σηµειώσεων που υπάρχουν στη σελίδα
του µαθήµατος.

ΑΣΚΗΣΗ: Χρησιµοποιώντας τις τεχνικές που παρουσιάστηκαν στις


προηγούµενες σελίδες να κατασκευαστούν φόρµες καταχώρησης στοιχείων
βιβλίων, συγγραφέων και εκδοτών, χωρίς τη χρήση του οδηγού κατασκευής
φορµών. Σε κάθε φόρµα να τοποθετηθούν τα δύο κουµπιά εκ των οποίων το
πρώτο θα κλείνει τη φόρµα ενώ το δεύτερο θα αποθηκεύει την τρέχουσα
εγγραφή.

Επιµέλεια: Αθανάσιος Ι. Μάργαρης (amarg@uom.gr)

You might also like