Tabelsammenknytning i databaser i Python
Lad os antage, at vi har en tabel med brugernavne og byer, hvor de bor:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Ulempen ved denne tabel er, at den samme by gentages flere gange for forskellige brugere. Dette fører til nogle problemer.
For det første fører den konstante gentagelse til, at databasen begynder at optage meget mere plads.
For det andet er det ret ubelejligt at udføre operationer med byer. For eksempel, hvis vi vil vise en liste over alle byer på skærmen. Så enkelt kan det ikke gøres. Vi bliver nødt til at hente alle brugere sammen med deres byer, derefter fjerne dubletter fra de hentede byer og først derefter får vi denne liste.
Og lad os forestille os, at databasen indeholder 10000
brugere fra 10 byer - for at få disse
10 byer bliver vi nødt til at hente hele
tabellen med et enormt antal rækker -
det bliver en meget langsom operation med
meningsløs spild af ressourcer.
Løsning på problemet
Vi er nødt til at opdele vores tabel i to: i den ene
vil byer blive gemt, og i den anden - brugere.
Samtidig vil der i tabellen med brugere være en kolonne
city_id, som vil referere
til brugerens by.
Så lad os lave to tabeller. Tabel med byer:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabel med brugere:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktiske opgaver
Lad os antage, du skal gemme varer (navn, pris, antal) og kategorier for disse varer. Beskriv lagringsstrukturen.
Lad os antage, du skal gemme floder og have, som disse floder løber ud i. Beskriv lagringsstrukturen.
Lad os antage, du skal gemme byer og lande, som de befinder sig i. Beskriv lagringsstrukturen.