Povezivanje tabela u bazama podataka u Pythonu
Pretpostavimo da imamo tabelu sa imenima korisnika i gradovima u kojima žive:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Nedostatak ove tabele je što se isti grad ponavlja nekoliko puta za različite korisnike. To dovodí do određenih problema.
Prvo, stalno ponavljanje dovodí do toga da baza podataka počinje da zauzima mnogo više prostora.
Drugo, prilično je nezgodno izvršavati operacije sa gradovima. Na primer, želimo da prikažemo na ekranu spisak svih gradova. To nećemo moći jednostavno da uradimo. Moraćemo da dobijemo sve korisnike zajedno sa njihovim gradovima, zatim da uklonimo duplikate iz dobijenih gradova i tek tada ćemo dobiti taj spisak.
A sada zamislite da u bazi ima 10000
korisnika iz 10 gradova - radi ovih
10 gradova moraćemo da izvučemo celu
tabelu sa ogromnim brojem redova -
dobićemo veoma sporu operaciju sa
besmislenim trošenjem resursa.
Rešenje problema
Potrebno je da podelimo našu tabelu na dve: u jednoj
će se čuvati gradovi, a u drugoj - korisnici.
Pritom će u tabeli sa korisnicima postojati kolona
city_id, koja će se odnositi
na grad korisnika.
Dakle, napravićemo dve tabele. Tabela sa gradovima:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabela sa korisnicima:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktični zadaci
Pretpostavimo da treba da čuvate proizvode (naziv, cena, količina) i kategorije tih proizvoda. Opišite strukturu skladištenja.
Pretpostavimo da treba da čuvate reke i mora u koja se ove reke ulivaju. Opišite strukturu skladištenja.
Pretpostavimo da treba da čuvate gradove i zemlje u kojima se oni nalaze. Opišite strukturu skladištenja.