Повезивање табела у базама података

Претпоставимо да имамо табелу са именима корисника и градовима у којима живе:

users
id name city
1 user1 city1
2 user2 city1
3 user3 city2
4 user4 city1
5 user5 city3
6 user6 city2

Недостатак ове табеле је у томе што се исти град понавља више пута за различите кориснике. То доводи до одређених проблема.

Прво, константно понављање доводи до тога да база података заузима много више простора.

Друго, прилично је незгодно обављати операције са градовима. На пример, желимо да прикажемо на екрану списак свих градова. Не може се то урадити тако једноставно. Мораћемо да добијемо све кориснике заједно са њиховим градовима, затим да уклонимо дупликате из добијених градова и тек тада ћемо добити тај списак.

А сада замислимо да у бази има 10000 корисника из 10 градова - због тих 10 градова мораћемо да извучемо целу табелу са огромним бројем редова - добићемо се веома спора операција са бесмисленом потрошњом ресурса.

Решавање проблема

Потребно је да поделимо нашу табелу на две: у једној ће се чувати градови, а у другој - корисници. При томе ће у табели са корисницима бити колона city_id, која ће реферисати на град корисника.

Дакле, направићемо две табеле. Табела са градовима:

cities
id name
1 city1
2 city2
3 city3

Табела са корисницима:

users
id name city_id
1 user1 1
2 user2 1
3 user3 2
4 user4 1
5 user5 3
6 user6 2
Задание 1

Претпоставимо да треба да чувате производе (назив, цена, количина) и категорије тих производа. Опишите структуру чувања.

Задание 2

Претпоставимо да треба да чувате реке и мора у која се оне уливају. Опишите структуру чувања.

Задание 3

Претпоставимо да треба да чувате градове и државе у којима се они налазе. Опишите структуру чувања.