Tabelkoppeling in databases in Python
Stel we hebben een tabel met gebruikersnamen en de steden waar ze wonen:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Het nadeel van deze tabel is dat dezelfde stad meerdere keren wordt herhaald voor verschillende gebruikers. Dit leidt tot enkele problemen.
Ten eerste leidt het constante herhalen ertoe dat de database veel meer ruimte gaat innemen.
Ten tweede is het behoorlijk onhandig om bewerkingen met steden uit te voeren. Stel, we willen een lijst met alle steden op het scherm tonen. Zo eenvoudig is dat niet te doen. We zullen alle gebruikers samen met hun steden moeten ophalen, dan duplicaten verwijderen uit de verkregen steden en pas dan krijgen we deze lijst.
Stel je nu voor dat er in de database 10000
gebruikers zijn uit 10 steden - voor deze
10 steden moeten we de hele
tabel met een enorm aantal rijen ophalen -
het wordt een erg trage operatie met
zinloze verspilling van resources.
Oplossing voor het probleem
We moeten onze tabel splitsen in twee: in de ene
worden steden opgeslagen, en in de tweede - gebruikers.
Tegelijkertijd zal er in de tabel met gebruikers een kolom
city_id zijn, die zal verwijzen
naar de stad van de gebruiker.
Laten we dus twee tabellen maken. Tabel met steden:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabel met gebruikers:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktische opdrachten
Stel dat je producten moet opslaan (naam, prijs, hoeveelheid) en de categorieën van deze producten. Beschrijf de opslagstructuur.
Stel dat je rivieren en de zeeën moet opslaan waarin deze rivieren uitmonden. Beschrijf de opslagstructuur.
Stel dat je steden en landen moet opslaan waarin ze zich bevinden. Beschrijf de opslagstructuur.