Lentelių susiejimas duomenų bazėse

Tarkime, kad turime lentelę su vartotojų vardais ir miestais, kuriuose jie gyvena:

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

Šios lentelės trūkumas yra tas, kad tas pats miestas kartojasi kelis kartus skirtingiems vartotojams. Tai sukelia kai kurias problemas.

Pirma, nuolatinis kartojimas sukelia tai, kad duomenų bazė pradeda užimti žymiai daugiau vietos.

Antra, pakankamai nepatogu atlikti operacijas su miestais. Pavyzdžiui, mes norime atvaizduoti ekrane visų miestų sąrašą. Taip tiesiog tai padaryti nepavyks. Mums teks gauti visus vartotojus kartu su jų miestais, po to pašalinti dublikatus iš gautų miestų ir tik tada mes gausime šį sąrašą.

O dabar įsivaizduokime, kad duomenų bazėje 10000 vartotojų iš 10 miestų - dėl šių 10 miestų mums teks išgauti visą lentelę iš didžiulio eilučių kiekio - gausis labai lėta operacija su beprasme išteklių švaistymu.

Problemos sprendimas

Reikia padalinti mūsų lentelę į dvi: vienoje bus saugomi miestai, o kitoje - vartotojai. Be to, vartotojų lentelėje bus stulpelis city_id, kuris nuorodos į vartotojo miestą.

Taigi, sukurkime dvi lenteles. Lentelė su miestais:

cities
id name
1 city1
2 city2
3 city3

Lentelė su vartotojais:

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

Tarkime, jums reikia saugoti prekes (pavadinimas, kaina, kiekis) ir šių prekių kategorijas. Aprašykite saugojimo struktūrą.

Задание 2

Tarkime, jums reikia saugoti upes ir jūras, į kurias įteka šios upės. Aprašykite saugojimo struktūrą.

Задание 3

Tarkime, jums reikia saugoti miestus ir šalis, kuriose jie yra. Aprašykite saugojimo struktūrą.