Σύνδεση πινάκων σε βάσεις δεδομένων
Ας υποθέσουμε ότι έχουμε έναν πίνακα με τα ονόματα των χρηστών και τις πόλεις στις οποίες ζουν:
| 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 |
Ας υποθέσουμε ότι χρειάζεται να αποθηκεύετε προϊόντα (όνομα, τιμή, ποσότητα) και κατηγορίες αυτών των προϊόντων. Περιγράψτε τη δομή αποθήκευσης.
Ας υποθέσουμε ότι χρειάζεται να αποθηκεύετε ποτάμια και θάλασσες, στις οποίες εκβάλλουν αυτοί οι ποτάμια. Περιγράψτε τη δομή αποθήκευσης.
Ας υποθέσουμε ότι χρειάζεται να αποθηκεύετε πόλεις και χώρες, στις οποίες βρίσκονται. Περιγράψτε τη δομή αποθήκευσης.