Povezovanje tabel v podatkovnih bazah
Recimo, da imamo tabelo z imeni uporabnikov in mesti, v katerih živijo:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Pomanjkljivost te tabele je, da se isto mesto večkrat ponovi za različne uporabnike. To povzroča nekatere težave.
Prvič, stalno ponavljanje vodi v to, da podatkovna baza začne zasedati veliko več prostora.
Drugič, dokaj neprijetno je izvajati operacije z mesti. Na primer, želimo prikazati seznam vseh mest. Tako preprosto tega ne moremo narediti. Morali bomo pridobiti vse uporabnike skupaj z njihovimi mesti, nato odstraniti dvojnike iz pridobljenih mest in šele takrat bomo dobili ta seznam.
Zdaj pa si predstavljajmo, da je v bazi 10000
uporabnikov iz 10
mest - za teh 10
mest bomo morali pridobiti celotno tabelo
iz ogromnega števila vrstic - to bo
zelo počasna operacija s nesmiselno
izgubo virov.
Rešitev problema
Našo tabelo je treba razdeliti na dve: v eni
se bodo shranjevala mesta, v drugi pa - uporabniki.
Pri tem bo v tabeli z uporabniki stolpec
city_id, ki se bo skliceval
na mesto uporabnika.
Torej, naredimo dve tabeli. Tabela z mesti:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabela z uporabniki:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Recimo, da morate shranjevati izdelke (naziv, cena, količina) in kategorije teh izdelkov. Opišite strukturo shranjevanja.
Recimo, da morate shranjevati reke in morja, v katere te te reke izlivajo. Opišite strukturo shranjevanja.
Recimo, da morate shranjevati mesta in države, v katerih se nahajajo. Opišite strukturo shranjevanja.