Lentelių susiejimas duomenų bazėse Python
Tarkime, kad turime lentelę su vartotojų vardais ir miestais, kuriuose jie gyvena:
| 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 tam tikrų problemų.
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 paprastai to padaryti nepavyks. Mums teks gauti visus vartotojus kartu su jų miestais, tada pašalinti dublikatus iš gautų miestų ir tik tada mes gausime šį sąrašą.
O dabar įsivaizduokime, kad duomenų bazėje yra 10000
vartotojų iš 10
miestų - dėl šių
10 miestų mums teks išgauti visą
lentelę iš didžiulio kiekio eilučių -
gausis labai lėta operacija su
beprasme resursų švaistymu.
Problemos sprendimas
Reikia padalinti mūsų lentelę į dvi: vienoje
bus saugomi miestai, o antroje - vartotojai.
Be to, vartotojų lentelėje bus stulpelis
city_id, kuris bus nuoroda
į vartotojo miestą.
Taigi, sukurkime dvi lenteles. Lentelė su miestais:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Lentelė su vartotojais:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktinės užduotys
Tarkime, jums reikia saugoti prekes (pavadinimas, kaina, kiekis) ir šių prekių kategorijas. Aprašykite saugojimo struktūrą.
Tarkime, jums reikia saugoti upes ir jūras, į kurias šios upės įteka. Aprašykite saugojimo struktūrą.
Tarkime, jums reikia saugoti miestus ir šalis, kuriose jie yra. Aprašykite saugojimo struktūrą.