Povezovanje tabel v bazah podatkov v Pythonu
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 vodi do določenih težav.
Prvič, stalno ponavljanje vodi do tega, da baza podatkov začne zasedati veliko več prostora.
Drugič, je precej neprijetno izvajati operacije z mesti. Na primer, želimo prikazati na zaslon seznam vseh mest. Tako preprosto tega ne moremo narediti. Morali bomo dobiti vse uporabnike skupaj z njihovimi mesti, nato odstraniti dvojnike iz dobljenih mest in šele takrat bomo dobili ta seznam.
In zdaj si predstavljajmo, da je v bazi 10000
uporabnikov iz 10 mest - za teh
10 mest bomo morali pridobiti celotno
tabelo iz ogromnega števila vrstic -
izkazala se bo zelo počasna operacija z
brezsmensko porabo virov.
Rešitev problema
Potrebno je razdeliti našo tabelo 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 |
Praktične naloge
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 katera se te reke izlivajo. Opišite strukturo shranjevanja.
Recimo, da morate shranjevati mesta in države, v katerih se nahajajo. Opišite strukturo shranjevanja.