Taulujen linkittäminen tietokannoissa Pythonissa
Oletetaan, että meillä on taulu käyttäjien nimistä ja kaupungeista, joissa he asuvat:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Tämän taulun haittana on, että sama kaupunki toistuu useita kertoja eri käyttäjille. Tämä johtaa joihinkin ongelmiin.
Ensinnäkin, jatkuva toistuminen johtaa siihen, että tietokanta alkaa käyttää paljon enemmän tilaa.
Toiseksi, on melko hankalaa suorittaa toimintoja kaupungeilla. Esimerkiksi haluamme näyttää ruudulla listan kaikista kaupungeista. Näin yksinkertaisesti sitä ei voida tehdä. Meidän täytyy hankkia kaikki käyttäjät yhdessä heidän kaupunkiensa kanssa, poistaa sitten kaksoiskappaleet hankituista kaupungeista ja vasta sitten saamme tämän listan.
Entä jos tietokannassa on 10000
käyttäjää 10 kaupungista - näiden
10 kaupungin takia meidän täytyy hankkia koko
taulu valtavasta määrästä rivejä -
siitä tulee erittäin hidas toimenpide, joka
tuhlaa resursseja turhaan.
Ongelman ratkaisu
Meidän täytyy jakaa taulumme kahteen: toiseen
tallennetaan kaupungit ja toiseen - käyttäjät.
Samaan aikaan käyttäjätaulussa on sarake
city_id, joka viittaa
käyttäjän kaupunkiin.
Joten, tehdään kaksi taulua. Taulu kaupungeista:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Taulu käyttäjistä:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Käytännön tehtävät
Oletetaan, että sinun täytyy tallentaa tuotteita (nimi, hinta, määrä) ja näiden tuotteiden kategoriat. Kuvaile tallennusrakenne.
Oletetaan, että sinun täytyy tallentaa joet ja meret, joihin nämä joet laskevat. Kuvaile tallennusrakenne.
Oletetaan, että sinun täytyy tallentaa kaupungit ja maat, joissa ne sijaitsevat. Kuvaile tallennusrakenne.