Σύνδεση πινάκων σε βάσεις δεδομένων στην Python
Ας υποθέσουμε ότι έχουμε έναν πίνακα με τα ονόματα των χρηστών και τις πόλεις στις οποίες ζουν:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Το μειονέκτημα αυτού του πίνακα είναι ότι η ίδια πόλη επαναλαμβάνεται πολλές φορές για διαφορετικούς χρήστες. Αυτό οδηγεί σε ορισμένα προβλήματα.
Πρώτον, η συνεχής επανάληψη οδηγεί στο ότι η βάση δεδομένων αρχίζει να καταλαμβάνει πολύ περισσότερο χώρο.
Δεύτερον, είναι αρκετά άβολο να εκτελούνται λειτουργίες με τις πόλεις. Για παράδειγμα, θέλουμε να εμφανίσουμε στην οθόνη μια λίστα όλων των πόλεων. Δεν θα είναι τόσο απλό να γίνει αυτό. Θα πρέπει να λάβουμε όλους τους χρήστες μαζί με τις πόλεις τους, στη συνέχεια να αφαιρέσουμε τα διπλά από τις ληφθείσες πόλεις και μόνο τότε θα λάβουμε αυτήν τη λίστα.
Και τώρα ας φανταστούμε ότι στη βάση 10000
χρηστών από 10 πόλεις - για αυτές τις
10 πόλεις θα πρέπει να ανακτήσουμε ολόκληρο τον
πίνακα από έναν τεράστιο αριθμό σειρών -
θα προκύψει μια πολύ αργή λειτουργία με
ανώφθαλη σπατάλη πόρων.
Επίλυση του προβλήματος
Πρέπει να χωρίσουμε τον πίνακά μας σε δύο: στη μία
θα αποθηκεύονται οι πόλεις, και στη δεύτερη - οι χρήστες.
Στην περίπτωση αυτή, στον πίνακα με τους χρήστες θα υπάρχει μια στήλη
city_id, η οποία θα αναφέρεται
στην πόλη του χρήστη.
Λοιπόν, ας δημιουργήσουμε δύο πίνακες. Πίνακας με πόλεις:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Πίνακας με χρήστες:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Πρακτικές ασκήσεις
Ας υποθέσουμε ότι πρέπει να αποθηκεύετε προϊόντα (όνομα, τιμή, ποσότητα) και κατηγορίες αυτών των προϊόντων. Αναφέρετε τη δομή αποθήκευσης.
Ας υποθέσουμε ότι πρέπει να αποθηκεύετε ποτάμια και θάλασσες, στις οποίες εκβάλλουν αυτοί οι ποτάμιες. Αναφέρετε τη δομή αποθήκευσης.
Ας υποθέσουμε ότι πρέπει να αποθηκεύετε πόλεις και χώρες, στις οποίες βρίσκονται. Αναφέρετε τη δομή αποθήκευσης.