Tabulu saistīšana datu bāzēs
Pieņemsim, ka mums ir tabula ar lietotāju vārdiem un pilsētām, kurās viņi dzīvo:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Šīs tabulas trūkums ir tas, ka viena un tā pati pilsēta atkārtojas vairākas reizes dažādiem lietotājiem. Tas rada dažas problēmas.
Pirmkārt, pastāvīgā atkārtošanās noved pie tā, ka datu bāze sāk aizņemt daudz vairāk vietas.
Otrkārt, ir diezgan neērti veikt darbības ar pilsētām. Piemēram, mēs vēlamies izvadīt uz ekrānu visu pilsētu sarakstu. Tik vienkārši to izdarīt neizdosies. Mums būs jāiegūst visi lietotāji kopā ar to pilsētām, pēc tam jāizdzēš dublikāti no iegūtajām pilsētām un tikai tad mēs iegūsim šo sarakstu.
Un tagad iedomājieties, ka datu bāzē ir 10000
lietotāju no 10
pilsētām - šo 10
pilsētu dēļ mums būs jāizvelk visa tabula
no milzīga daudzuma rindām - izradīsies
ļoti lēna darbība ar bezjēdzīgu
resursu izmantošanu.
Problēmas risinājums
Mūsu tabula ir jāsadala divās: vienā
tiks glabātas pilsētas, bet otrajā - lietotāji.
Šajā gadījumā lietotāju tabulā būs kolonna
city_id, kas atsaucas
uz lietotāja pilsētu.
Tātad, izveidosim divas tabulas. Tabula ar pilsētām:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabula ar lietotājiem:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Pieņemsim, ka jums ir jāglabā preces (nosaukums, cena, daudzums) un šo preču kategorijas. Aprakstiet uzglabāšanas struktūru.
Pieņemsim, ka jums ir jāglabā upes un jūras, kurās šīs upes ietek. Aprakstiet uzglabāšanas struktūru.
Pieņemsim, ka jums ir jāglabā pilsētas un valstis, kurās tās atrodas. Aprakstiet uzglabāšanas struktūru.