![]() |
|---|
| Työskentely datan kanssa: Relaatiotietokannat - Sketchnote by @nitya |
Todennäköisesti olet aiemmin käyttänyt taulukkolaskentaohjelmaa tietojen tallentamiseen. Sinulla oli joukko rivejä ja sarakkeita, joissa rivit sisälsivät tiedot (tai datan) ja sarakkeet kuvasivat tietoja (joskus kutsutaan metatiedoiksi). Relaatiotietokanta perustuu tähän perusperiaatteeseen sarakkeista ja riveistä tauluissa, jolloin voit jakaa tiedot useisiin tauluihin. Tämä mahdollistaa monimutkaisemman datan käsittelyn, päällekkäisyyden välttämisen ja joustavuuden datan tutkimisessa. Tutkitaanpa relaatiotietokannan käsitteitä.
Relaatiotietokannan ytimessä ovat taulut. Kuten taulukkolaskennassa, taulu on sarakkeiden ja rivien kokoelma. Rivi sisältää datan tai tiedon, jonka kanssa haluamme työskennellä, kuten kaupungin nimen tai sademäärän. Sarakkeet kuvaavat tallennettua dataa.
Aloitetaan tutkimus luomalla taulu kaupungeista. Voisimme aloittaa niiden nimellä ja maalla. Voisit tallentaa tämän tauluun seuraavasti:
| Kaupunki | Maa |
|---|---|
| Tokio | Japani |
| Atlanta | Yhdysvallat |
| Auckland | Uusi-Seelanti |
Huomaa sarakkeiden nimet kaupunki, maa ja väestö kuvaavat tallennettua dataa, ja jokaisella rivillä on tieto yhdestä kaupungista.
Todennäköisesti yllä oleva taulu näyttää sinulle melko tutulta. Lisätään tietokantaamme lisää dataa – vuotuinen sademäärä (millimetreinä). Keskitymme vuosiin 2018, 2019 ja 2020. Jos lisäisimme sen Tokion osalta, se voisi näyttää tältä:
| Kaupunki | Maa | Vuosi | Määrä |
|---|---|---|---|
| Tokio | Japani | 2020 | 1690 |
| Tokio | Japani | 2019 | 1874 |
| Tokio | Japani | 2018 | 1445 |
Mitä huomaat taulustamme? Saatat huomata, että toistamme kaupungin nimen ja maan yhä uudelleen. Se voi viedä paljon tallennustilaa, ja on suurelta osin tarpeetonta pitää useita kopioita. Tokion nimi on kuitenkin vain yksi, joka kiinnostaa meitä.
Kokeillaanpa jotain muuta. Lisätään uudet sarakkeet jokaiselle vuodelle:
| Kaupunki | Maa | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| Tokio | Japani | 1445 | 1874 | 1690 |
| Atlanta | Yhdysvallat | 1779 | 1111 | 1683 |
| Auckland | Uusi-Seelanti | 1386 | 942 | 1176 |
Vaikka tämä välttää rivien toistamisen, se tuo mukanaan muutamia muita haasteita. Meidän pitäisi muuttaa taulun rakennetta aina, kun tulee uusi vuosi. Lisäksi, kun datamme kasvaa, vuosien pitäminen sarakkeina tekee arvojen hakemisesta ja laskemisesta hankalampaa.
Siksi tarvitsemme useita tauluja ja suhteita. Jakamalla datamme voimme välttää päällekkäisyyttä ja saada enemmän joustavuutta datan käsittelyyn.
Palataan dataamme ja päätetään, miten haluamme jakaa asiat. Tiedämme, että haluamme tallentaa kaupunkien nimet ja maat, joten tämä toimii parhaiten yhdessä taulussa.
| Kaupunki | Maa |
|---|---|
| Tokio | Japani |
| Atlanta | Yhdysvallat |
| Auckland | Uusi-Seelanti |
Mutta ennen kuin luomme seuraavan taulun, meidän täytyy selvittää, miten viitata kuhunkin kaupunkiin. Tarvitsemme jonkinlaisen tunnisteen, ID:n tai (teknisissä tietokantatermeissä) ensisijaisen avaimen. Ensisijainen avain on arvo, jota käytetään tunnistamaan yksi tietty rivi taulussa. Vaikka se voisi perustua itse arvoon (voisimme käyttää esimerkiksi kaupungin nimeä), sen tulisi lähes aina olla numero tai muu tunniste. Emme halua, että id koskaan muuttuu, koska se rikkoisi suhteen. Useimmissa tapauksissa ensisijainen avain tai id on automaattisesti luotu numero.
✅ Ensisijainen avain lyhennetään usein PK:ksi
| city_id | Kaupunki | Maa |
|---|---|---|
| 1 | Tokio | Japani |
| 2 | Atlanta | Yhdysvallat |
| 3 | Auckland | Uusi-Seelanti |
✅ Huomaat, että käytämme tässä oppitunnissa termejä "id" ja "ensisijainen avain" vaihdellen. Nämä käsitteet pätevät myös DataFrameihin, joita tutkit myöhemmin. DataFramet eivät kuitenkaan käytä termiä "ensisijainen avain", mutta käyttäytyvät hyvin samankaltaisesti.
Kun kaupunkitaulu on luotu, tallennetaan sademäärät. Sen sijaan, että toistaisimme koko kaupungin tiedot, voimme käyttää id:tä. Meidän tulisi myös varmistaa, että uudessa taulussa on id-sarake, sillä kaikilla tauluilla tulisi olla id tai ensisijainen avain.
| rainfall_id | city_id | Vuosi | Määrä |
|---|---|---|---|
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
Huomaa city_id-sarake uudessa rainfall-taulussa. Tämä sarake sisältää arvoja, jotka viittaavat cities-taulun ID-arvoihin. Teknisten relaatiotietojen termein tätä kutsutaan vierasavaimeksi; se on ensisijainen avain toisesta taulusta. Voit ajatella sitä viittauksena tai osoittimena. city_id 1 viittaa Tokioon.
Note
Vierasavain lyhennetään usein FK:ksi
Kun data on jaettu kahteen tauluun, saatat miettiä, miten sitä haetaan. Jos käytämme relaatiotietokantaa kuten MySQL, SQL Server tai Oracle, voimme käyttää kieltä nimeltä Structured Query Language eli SQL. SQL (joskus lausutaan sequel) on standardikieli, jolla haetaan ja muokataan dataa relaatiotietokannassa.
Datan hakemiseen käytetään komentoa SELECT. Periaatteessa valitset sarakkeet, jotka haluat nähdä, taulusta, jossa ne sijaitsevat. Jos haluat näyttää vain kaupunkien nimet, voit käyttää seuraavaa:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- AucklandSELECT on kohta, jossa luetellaan sarakkeet, ja FROM on kohta, jossa luetellaan taulut.
Note
SQL-syntaksi ei ole kirjainkoon herkkä, eli select ja SELECT tarkoittavat samaa. Kuitenkin tietokannan tyypistä riippuen sarakkeet ja taulut voivat olla kirjainkoon herkkiä. Siksi on hyvä käytäntö käsitellä kaikkea ohjelmoinnissa kuin se olisi kirjainkoon herkkää. SQL-kyselyissä on yleinen käytäntö kirjoittaa avainsanat kokonaan isoilla kirjaimilla.
Yllä oleva kysely näyttää kaikki kaupungit. Kuvitellaan, että haluamme näyttää vain Uuden-Seelannin kaupungit. Tarvitsemme jonkinlaisen suodattimen. SQL:n avainsana tähän on WHERE, eli "missä jokin ehto on tosi".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- AucklandTähän asti olemme hakeneet dataa yhdestä taulusta. Nyt haluamme yhdistää datan sekä cities- että rainfall-tauluista. Tämä tehdään liittämällä ne yhteen. Luot käytännössä saumakohdan kahden taulun välille ja yhdistät sarakkeiden arvot.
Esimerkissämme yhdistämme city_id-sarakkeen rainfall-taulussa city_id-sarakkeeseen cities-taulussa. Tämä yhdistää sademäärän vastaavaan kaupunkiin. Suorittamamme liitos on ns. inner join, eli jos riveillä ei ole vastaavuutta toisessa taulussa, niitä ei näytetä. Meidän tapauksessamme jokaisella kaupungilla on sademäärä, joten kaikki näytetään.
Haetaan sademäärä vuodelta 2019 kaikille kaupungeille.
Teemme tämän vaiheittain. Ensimmäinen vaihe on liittää data yhteen osoittamalla saumakohdan sarakkeet - city_id kuten aiemmin korostettu.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_idOlemme korostaneet kaksi haluamaamme saraketta ja sen, että haluamme liittää taulut city_id-sarakkeen perusteella. Nyt voimme lisätä WHERE-lauseen suodattamaan vain vuosi 2019.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942Relaatiotietokannat perustuvat tiedon jakamiseen useisiin tauluihin, jotka sitten yhdistetään näyttöä ja analyysiä varten. Tämä tarjoaa suuren joustavuuden laskelmien tekemiseen ja datan muokkaamiseen. Olet nähnyt relaatiotietokannan ydinkäsitteet ja miten liitos kahden taulun välillä tehdään.
Internetissä on lukuisia relaatiotietokantoja. Voit tutkia dataa käyttämällä yllä opittuja taitoja.
Microsoft Learnissä on useita resursseja, joiden avulla voit jatkaa SQL:n ja relaatiotietokantojen käsitteiden tutkimista
- Kuvaile relaatiodatan käsitteitä
- Aloita kyselyt Transact-SQL:llä (Transact-SQL on SQL:n versio)
- SQL-sisältö Microsoft Learnissä
Lentokenttätietojen näyttäminen
Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattikäännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.
