Sammenlinkning af tabeller i databaser
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 megget mere plads.
For det andet er det ret ubelejligt at udføre operationer med byer. For eksempel ønsker vi at vise en liste over alle byer på skærmen. Så simpelt kan det ikke gøres. Vi bliver nødt til at hente alle brugere sammen med deres byer, derefter fjerne dubletter fra de modtagne 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øst
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 henvise
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 |
Lad os antage, at du skal opbevare varer (navn, pris, antal) og kategorier for disse varer. Beskriv lagringsstrukturen.
Lad os antage, at du skal opbevare floder og have, som disse floder løber ud i. Beskriv lagringsstrukturen.
Lad os antage, at du skal opbevare byer og lande, som de befinder sig i. Beskriv lagringsstrukturen.