Tabelite seostamine andmebaasides Pythonis
Oletame, et meil on tabel kasutajate nimede ja linnadega, kus nad elavad:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Selle tabeli puuduseks on see, et sama linn kordub mitu korda erinevate kasutajate puhul. See viib mõningate probleemideni.
Esiteks, pidev kordamine viib selleni, et andmebaas hakkab hõivama palju rohkem ruumi.
Teiseks on linnadega toimingute tegemine piisavalt ebamugav. Näiteks tahame kuvada ekraanil kõikide linnade nimekirja. Nii lihtsalt seda teha ei õnnestu. Me peame saama kõik kasutajad koos nende linnadega, seejärel eemaldama saadud linnadest dubleerivad kirjed ja alles siis saame selle nimekirja.
Ja nüüd kujutlegem, et andmebaasis on 10000
kasutajat 10 linnast - nende
10 linna pärast peame välja võtma kogu
tabeli, mis koosneb tohutust arvust ridadest -
see on väga aeglane toiming, mis
kulutab ressursse mõttetult.
Probleemi lahendus
Peame oma tabeli jagama kaheks: ühes
hoitakse linnu ja teises - kasutajaid.
Samal ajal on kasutajate tabelis veerg
city_id, mis viitab
kasutaja linnale.
Niisiis, teeme kaks tabelit. Linnade tabel:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Kasutajate tabel:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktilised ülesanded
Oletame, et peate hoidma kaupu (nimi, hind, kogus) ja nende kaupade kategooriaid. Kirjeldage hoidmise struktuur.
Oletame, et peate hoidma jõgesid ja meresid, kuhu need jõed suubuvad. Kirjeldage hoidmise struktuur.
Oletame, et peate hoidma linnu ja riike, milles nad asuvad. Kirjeldage hoidmise struktuur.