|
|
3 months ago | |
|---|---|---|
| .. | ||
| README.md | 3 months ago | |
| assignment.md | 3 months ago | |
README.md
Εργασία με Δεδομένα: Σχεσιακές Βάσεις Δεδομένων
![]() |
|---|
| Εργασία με Δεδομένα: Σχεσιακές Βάσεις Δεδομένων - Σχεδιαστικό από @nitya |
Πιθανότατα έχετε χρησιμοποιήσει στο παρελθόν ένα υπολογιστικό φύλλο για να αποθηκεύσετε πληροφορίες. Είχατε ένα σύνολο γραμμών και στηλών, όπου οι γραμμές περιείχαν τις πληροφορίες (ή δεδομένα), και οι στήλες περιέγραφαν τις πληροφορίες (μερικές φορές ονομάζονται μεταδεδομένα). Μια σχεσιακή βάση δεδομένων βασίζεται σε αυτή την βασική αρχή των στηλών και γραμμών σε πίνακες, επιτρέποντάς σας να έχετε πληροφορίες διασκορπισμένες σε πολλούς πίνακες. Αυτό σας επιτρέπει να εργάζεστε με πιο σύνθετα δεδομένα, να αποφεύγετε την επανάληψη και να έχετε ευελιξία στον τρόπο που εξερευνάτε τα δεδομένα. Ας εξερευνήσουμε τις έννοιες μιας σχεσιακής βάσης δεδομένων.
Προ-διάλεξη κουίζ
Όλα ξεκινούν με πίνακες
Μια σχεσιακή βάση δεδομένων έχει στον πυρήνα της πίνακες. Όπως και με το υπολογιστικό φύλλο, ένας πίνακας είναι μια συλλογή στηλών και γραμμών. Η γραμμή περιέχει τα δεδομένα ή τις πληροφορίες με τις οποίες θέλουμε να εργαστούμε, όπως το όνομα μιας πόλης ή η ποσότητα βροχόπτωσης. Οι στήλες περιγράφουν τα δεδομένα που αποθηκεύουν.
Ας ξεκινήσουμε την εξερεύνησή μας δημιουργώντας έναν πίνακα για να αποθηκεύσουμε πληροφορίες για πόλεις. Μπορεί να ξεκινήσουμε με το όνομά τους και τη χώρα. Μπορείτε να το αποθηκεύσετε σε έναν πίνακα ως εξής:
| Πόλη | Χώρα |
|---|---|
| Τόκιο | Ιαπωνία |
| Ατλάντα | Ηνωμένες Πολιτείες |
| Όκλαντ | Νέα Ζηλανδία |
Παρατηρήστε τα ονόματα των στηλών πόλη, χώρα και πληθυσμός που περιγράφουν τα δεδομένα που αποθηκεύονται, και κάθε γραμμή έχει πληροφορίες για μία πόλη.
Οι αδυναμίες της προσέγγισης με έναν μόνο πίνακα
Πιθανότατα ο παραπάνω πίνακας σας φαίνεται σχετικά οικείος. Ας προσθέσουμε κάποια επιπλέον δεδομένα στη αναπτυσσόμενη βάση δεδομένων μας - ετήσια βροχόπτωση (σε χιλιοστά). Θα εστιάσουμε στα έτη 2018, 2019 και 2020. Αν το προσθέταμε για το Τόκιο, θα μπορούσε να μοιάζει κάπως έτσι:
| Πόλη | Χώρα | Έτος | Ποσότητα |
|---|---|---|---|
| Τόκιο | Ιαπωνία | 2020 | 1690 |
| Τόκιο | Ιαπωνία | 2019 | 1874 |
| Τόκιο | Ιαπωνία | 2018 | 1445 |
Τι παρατηρείτε για τον πίνακά μας; Μπορεί να παρατηρήσετε ότι επαναλαμβάνουμε το όνομα και τη χώρα της πόλης ξανά και ξανά. Αυτό θα μπορούσε να καταλαμβάνει αρκετό χώρο αποθήκευσης και είναι σε μεγάλο βαθμό περιττό να έχουμε πολλαπλά αντίγραφα. Άλλωστε, το Τόκιο έχει μόνο ένα όνομα που μας ενδιαφέρει.
Εντάξει, ας δοκιμάσουμε κάτι άλλο. Ας προσθέσουμε νέες στήλες για κάθε έτος:
| Πόλη | Χώρα | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| Τόκιο | Ιαπωνία | 1445 | 1874 | 1690 |
| Ατλάντα | Ηνωμένες Πολιτείες | 1779 | 1111 | 1683 |
| Όκλαντ | Νέα Ζηλανδία | 1386 | 942 | 1176 |
Ενώ αυτό αποφεύγει την επανάληψη γραμμών, προσθέτει μερικές άλλες προκλήσεις. Θα χρειαστεί να τροποποιούμε τη δομή του πίνακα κάθε φορά που υπάρχει ένα νέο έτος. Επιπλέον, καθώς τα δεδομένα μας μεγαλώνουν, το να έχουμε τα έτη ως στήλες θα κάνει πιο δύσκολη την ανάκτηση και τον υπολογισμό τιμών.
Γι' αυτό χρειαζόμαστε πολλούς πίνακες και σχέσεις. Με το να διαχωρίζουμε τα δεδομένα μας μπορούμε να αποφύγουμε την επανάληψη και να έχουμε περισσότερη ευελιξία στον τρόπο που εργαζόμαστε με τα δεδομένα μας.
Οι έννοιες των σχέσεων
Ας επιστρέψουμε στα δεδομένα μας και να αποφασίσουμε πώς θέλουμε να τα χωρίσουμε. Ξέρουμε ότι θέλουμε να αποθηκεύσουμε το όνομα και τη χώρα για τις πόλεις μας, οπότε αυτό πιθανότατα θα λειτουργήσει καλύτερα σε έναν πίνακα.
| Πόλη | Χώρα |
|---|---|
| Τόκιο | Ιαπωνία |
| Ατλάντα | Ηνωμένες Πολιτείες |
| Όκλαντ | Νέα Ζηλανδία |
Αλλά πριν δημιουργήσουμε τον επόμενο πίνακα, πρέπει να βρούμε πώς θα αναφερόμαστε σε κάθε πόλη. Χρειαζόμαστε κάποια μορφή αναγνωριστικού, ID ή (σε τεχνικούς όρους βάσεων δεδομένων) πρωτεύον κλειδί. Ένα πρωτεύον κλειδί είναι μια τιμή που χρησιμοποιείται για να ταυτοποιήσει μια συγκεκριμένη γραμμή σε έναν πίνακα. Αν και αυτό θα μπορούσε να βασίζεται σε μια τιμή (θα μπορούσαμε να χρησιμοποιήσουμε το όνομα της πόλης, για παράδειγμα), θα πρέπει σχεδόν πάντα να είναι ένας αριθμός ή άλλο αναγνωριστικό. Δεν θέλουμε το id να αλλάζει ποτέ καθώς θα έσπαγε τη σχέση. Θα βρείτε στις περισσότερες περιπτώσεις ότι το πρωτεύον κλειδί ή το id θα είναι ένας αυτόματα δημιουργημένος αριθμός.
✅ Το πρωτεύον κλειδί συχνά συντομεύεται ως PK
πόλεις
| city_id | Πόλη | Χώρα |
|---|---|---|
| 1 | Τόκιο | Ιαπωνία |
| 2 | Ατλάντα | Ηνωμένες Πολιτείες |
| 3 | Όκλαντ | Νέα Ζηλανδία |
✅ Θα παρατηρήσετε ότι χρησιμοποιούμε τους όρους "id" και "πρωτεύον κλειδί" εναλλακτικά κατά τη διάρκεια αυτού του μαθήματος. Οι έννοιες εδώ εφαρμόζονται και στα DataFrames, τα οποία θα εξερευνήσετε αργότερα. Τα DataFrames δεν χρησιμοποιούν τον όρο "πρωτεύον κλειδί", ωστόσο θα παρατηρήσετε ότι συμπεριφέρονται με παρόμοιο τρόπο.
Με τον πίνακα πόλεων δημιουργημένο, ας αποθηκεύσουμε τη βροχόπτωση. Αντί να επαναλαμβάνουμε τις πλήρεις πληροφορίες για την πόλη, μπορούμε να χρησιμοποιήσουμε το id. Πρέπει επίσης να διασφαλίσουμε ότι ο νεοδημιουργημένος πίνακας έχει επίσης μια στήλη id, καθώς όλοι οι πίνακες πρέπει να έχουν ένα id ή πρωτεύον κλειδί.
βροχόπτωση
| rainfall_id | city_id | Έτος | Ποσότητα |
|---|---|---|---|
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
Παρατηρήστε τη στήλη city_id μέσα στον νεοδημιουργημένο πίνακα βροχόπτωση. Αυτή η στήλη περιέχει τιμές που αναφέρονται στα IDs στον πίνακα πόλεις. Σε τεχνικούς όρους σχεσιακών δεδομένων, αυτό ονομάζεται ξένο κλειδί· είναι ένα πρωτεύον κλειδί από άλλον πίνακα. Μπορείτε απλά να το σκεφτείτε ως μια αναφορά ή δείκτη. Το city_id 1 αναφέρεται στο Τόκιο.
[!NOTE] Το ξένο κλειδί συχνά συντομεύεται ως FK
Ανάκτηση των δεδομένων
Με τα δεδομένα μας χωρισμένα σε δύο πίνακες, ίσως αναρωτιέστε πώς τα ανακτούμε. Αν χρησιμοποιούμε μια σχεσιακή βάση δεδομένων όπως MySQL, SQL Server ή Oracle, μπορούμε να χρησιμοποιήσουμε μια γλώσσα που ονομάζεται Structured Query Language ή SQL. Η SQL (που μερικές φορές προφέρεται sequel) είναι μια τυπική γλώσσα που χρησιμοποιείται για την ανάκτηση και τροποποίηση δεδομένων σε μια σχεσιακή βάση δεδομένων.
Για να ανακτήσετε δεδομένα χρησιμοποιείτε την εντολή SELECT. Στον πυρήνα της, επιλέγετε τις στήλες που θέλετε να δείτε από τον πίνακα στον οποίο ανήκουν. Αν θέλατε να εμφανίσετε μόνο τα ονόματα των πόλεων, θα μπορούσατε να χρησιμοποιήσετε το εξής:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
SELECT είναι όπου απαριθμείτε τις στήλες, και FROM είναι όπου απαριθμείτε τους πίνακες.
[!NOTE] Η σύνταξη SQL δεν κάνει διάκριση πεζών-κεφαλαίων, που σημαίνει ότι
selectκαιSELECTσημαίνουν το ίδιο. Ωστόσο, ανάλογα με τον τύπο της βάσης δεδομένων που χρησιμοποιείτε, οι στήλες και οι πίνακες μπορεί να είναι ευαίσθητοι σε πεζά-κεφαλαία. Ως αποτέλεσμα, είναι καλή πρακτική να αντιμετωπίζετε τα πάντα στον προγραμματισμό σαν να είναι ευαίσθητα σε πεζά-κεφαλαία. Όταν γράφετε ερωτήματα SQL, η κοινή σύμβαση είναι να βάζετε τις λέξεις-κλειδιά με κεφαλαία γράμματα.
Το παραπάνω ερώτημα θα εμφανίσει όλες τις πόλεις. Ας φανταστούμε ότι θέλουμε να εμφανίσουμε μόνο τις πόλεις στη Νέα Ζηλανδία. Χρειαζόμαστε κάποιο είδος φίλτρου. Η λέξη-κλειδί SQL για αυτό είναι WHERE, ή "όπου κάτι είναι αληθές".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
Συνένωση δεδομένων
Μέχρι τώρα έχουμε ανακτήσει δεδομένα από έναν μόνο πίνακα. Τώρα θέλουμε να φέρουμε τα δεδομένα μαζί και από τους πίνακες πόλεις και βροχόπτωση. Αυτό γίνεται με το να τους ενώνουμε μαζί. Ουσιαστικά θα δημιουργήσετε μια ραφή μεταξύ των δύο πινάκων και θα ταιριάξετε τις τιμές από μια στήλη κάθε πίνακα.
Στο παράδειγμά μας, θα ταιριάξουμε τη στήλη city_id στον πίνακα βροχόπτωση με τη στήλη city_id στον πίνακα πόλεις. Αυτό θα ταιριάξει την τιμή της βροχόπτωσης με την αντίστοιχη πόλη. Ο τύπος της ένωσης που θα εκτελέσουμε ονομάζεται inner join, που σημαίνει ότι αν κάποιες γραμμές δεν ταιριάζουν με τίποτα από τον άλλο πίνακα, δεν θα εμφανιστούν. Στην περίπτωσή μας, κάθε πόλη έχει βροχόπτωση, οπότε όλα θα εμφανιστούν.
Ας ανακτήσουμε τη βροχόπτωση για το 2019 για όλες τις πόλεις μας.
Θα το κάνουμε σε βήματα. Το πρώτο βήμα είναι να ενώσουμε τα δεδομένα μαζί υποδεικνύοντας τις στήλες για τη ραφή - city_id όπως επισημάνθηκε πριν.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
Έχουμε επισημάνει τις δύο στήλες που θέλουμε, και το γεγονός ότι θέλουμε να ενώσουμε τους πίνακες με βάση το city_id. Τώρα μπορούμε να προσθέσουμε την εντολή WHERE για να φιλτράρουμε μόνο το έτος 2019.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
Περίληψη
Οι σχεσιακές βάσεις δεδομένων βασίζονται στον διαχωρισμό των πληροφοριών σε πολλούς πίνακες που στη συνέχεια επανενώνονται για εμφάνιση και ανάλυση. Αυτό παρέχει υψηλό βαθμό ευελιξίας για την εκτέλεση υπολογισμών και άλλων χειρισμών δεδομένων. Έχετε δει τις βασικές έννοιες μιας σχεσιακής βάσης δεδομένων και πώς να εκτελέσετε μια ένωση μεταξύ δύο πινάκων.
🚀 Πρόκληση
Υπάρχουν πολλές σχεσιακές βάσεις δεδομένων διαθέσιμες στο διαδίκτυο. Μπορείτε να εξερευνήσετε τα δεδομένα χρησιμοποιώντας τις δεξιότητες που μάθατε παραπάνω.
Κουίζ μετά τη διάλεξη
Κουίζ μετά τη διάλεξη
Ανασκόπηση & Αυτομελέτη
Υπάρχουν αρκετοί πόροι διαθέσιμοι στο Microsoft Learn για να συνεχίσετε την εξερεύνησή σας στις έννοιες της SQL και των σχεσιακών βάσεων δεδομένων
- Περιγράψτε τις έννοιες των σχεσιακών δεδομένων
- Ξεκινήστε να κάνετε ερωτήματα με Transact-SQL (Το Transact-SQL είναι μια έκδοση της SQL)
- Περιεχόμενο SQL στο Microsoft Learn
Ανάθεση
Εμφάνιση δεδομένων αεροδρομίου
Αποποίηση ευθυνών:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
