Taulukoiden linkittäminen tietokannoissa
Oletetaan, että meillä on taulukko 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 taulukon haittana on, että sama kaupunki toistuu useaan kertaan 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, kaupungeilla suoritettavien toimintojen suorittaminen on melko hankalaa. Esimerkiksi haluamme tulostaa ruudulle listan kaikista kaupungeista. Sen tekeminen näin ei ole yksinkertaista. Meidän on saatava kaikki käyttäjät heidän kaupunkineen, poistettava sitten saatujen kaupunkien duplikaatit ja vasta sitten saamme tämän listan.
Kuvittele nyt, että tietokannassa on 10000
käyttäjää 10 kaupungista - näiden 10
kaupungin takia meidän on haettava koko taulukko
valtavasta määrästä rivejä - tuloksena on
erittäin hidas toimenpide, joka kuluttaa turhaan resursseja.
Ongelman ratkaisu
Meidän on jaettava taulukkomme kahteen osaan: toiseen
talletetaan kaupungit ja toiseen - käyttäjät.
Samalla käyttäjätaulukossa on sarake
city_id, joka viittaa
käyttäjän kaupunkiin.
Joten, tehdään kaksi taulukkoa. Taulukko kaupungeilla:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Taulukko käyttäjillä:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Oletetaan, että sinun täytyy tallentaa tuotteet (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.