Lentelių susiejimas duomenų bazėse
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 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:
| 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 |
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 įteka šios upės. Aprašykite saugojimo struktūrą.
Tarkime, jums reikia saugoti miestus ir šalis, kuriose jie yra. Aprašykite saugojimo struktūrą.