Povezivanje tabela u bazama podataka
Recimo 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 u tome što se isti grad ponavlja više puta za različite korisnike. To dovodi do određenih problema.
Prvo, stalno ponavljanje dovodi 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. Tako jednostavno to neće uspeti. Moraćemo da dobijemo sve korisnike zajedno sa njihovim gradovima, zatim da uklonimo duplikate iz dobijenih gradova i tek tada ćemo dobiti ovaj spisak.
A sada zamislite da u bazi ima 10000
korisnika iz 10
gradova - radi ovih 10
gradova moraćemo da izvučemo celu tabelu
iz ogromnog broja redova - ispastaće
vrlo spora operacija 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, hajde da napravimo 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 |
Recimo da vam je potrebno da čuvate proizvode (naziv, cena, količina) i kategorije tih proizvoda. Opišite strukturu čuvanja.
Recimo da vam je potrebno da čuvate reke i mora u koja se ove reke ulivaju. Opišite strukturu čuvanja.
Recimo da vam je potrebno da čuvate gradove i države u kojima se oni nalaze. Opišite strukturu čuvanja.