|
2 weeks ago | |
---|---|---|
.. | ||
README.md | 2 weeks ago | |
assignment.md | 3 weeks 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, μπορούμε να χρησιμοποιήσουμε μια γλώσσα που ονομάζεται Δομημένη Γλώσσα Ερωτημάτων ή SQL. Η SQL (μερικές φορές προφέρεται "σίκουελ") είναι μια τυποποιημένη γλώσσα που χρησιμοποιείται για την ανάκτηση και τροποποίηση δεδομένων σε μια σχεσιακή βάση δεδομένων.
Για να ανακτήσετε δεδομένα, χρησιμοποιείτε την εντολή 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 στον πίνακα πόλεις. Αυτό θα αντιστοιχίσει την τιμή της βροχόπτωσης με την αντίστοιχη πόλη. Ο τύπος συνένωσης που θα εκτελέσουμε ονομάζεται εσωτερική συνένωση, που σημαίνει ότι αν οποιαδήποτε γραμμή δεν αντιστοιχεί με τίποτα από τον άλλο πίνακα, δεν θα εμφανιστεί. Στην περίπτωσή μας, κάθε πόλη έχει δεδομένα βροχόπτωσης, οπότε όλα θα εμφανιστούν.
Ας ανακτήσουμε τη βροχόπτωση για το 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
Εργασία
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.