You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 KiB

Arbejde med data: Relationelle databaser

 Sketchnote af (@sketchthedocs)
Arbejde med data: Relationelle databaser - Sketchnote af @nitya

Du har sandsynligvis brugt et regneark før til at gemme information. Du havde et sæt rækker og kolonner, hvor rækkerne indeholdt informationen (eller dataene), og kolonnerne beskrev informationen (nogle gange kaldet metadata). En relationel database er bygget på dette grundprincip med kolonner og rækker i tabeller, hvilket giver dig mulighed for at sprede information over flere tabeller. Dette gør det muligt at arbejde med mere komplekse data, undgå duplikering og have fleksibilitet i måden, du udforsker dataene på. Lad os udforske begreberne i en relationel database.

Quiz før forelæsning

Det hele starter med tabeller

En relationel database har tabeller som sin kerne. Ligesom med et regneark er en tabel en samling af kolonner og rækker. Rækkerne indeholder de data eller den information, vi ønsker at arbejde med, såsom navnet på en by eller mængden af nedbør. Kolonnerne beskriver de data, de gemmer.

Lad os begynde vores udforskning ved at oprette en tabel til at gemme information om byer. Vi kunne starte med deres navn og land. Du kunne gemme dette i en tabel som følger:

By Land
Tokyo Japan
Atlanta USA
Auckland New Zealand

Bemærk, at kolonnenavnene by, land og befolkning beskriver de data, der gemmes, og hver række har information om én by.

Begrænsninger ved en enkelt tabel

Sandsynligvis virker tabellen ovenfor ret velkendt for dig. Lad os begynde at tilføje nogle yderligere data til vores spirende database - årlig nedbør (i millimeter). Vi fokuserer på årene 2018, 2019 og 2020. Hvis vi skulle tilføje det for Tokyo, kunne det se sådan ud:

By Land År Mængde
Tokyo Japan 2020 1690
Tokyo Japan 2019 1874
Tokyo Japan 2018 1445

Hvad bemærker du ved vores tabel? Du bemærker måske, at vi gentager byens navn og land igen og igen. Det kunne optage en hel del lagerplads og er stort set unødvendigt at have flere kopier af. Når alt kommer til alt, har Tokyo kun ét navn, vi er interesserede i.

OK, lad os prøve noget andet. Lad os tilføje nye kolonner for hvert år:

By Land 2018 2019 2020
Tokyo Japan 1445 1874 1690
Atlanta USA 1779 1111 1683
Auckland New Zealand 1386 942 1176

Selvom dette undgår rækkeduplikering, tilføjer det et par andre udfordringer. Vi ville skulle ændre strukturen af vores tabel hver gang, der kommer et nyt år. Derudover vil det, efterhånden som vores data vokser, gøre det mere besværligt at hente og beregne værdier, hvis årene er kolonner.

Dette er grunden til, at vi har brug for flere tabeller og relationer. Ved at opdele vores data kan vi undgå duplikering og få mere fleksibilitet i, hvordan vi arbejder med dataene.

Begrebet relationer

Lad os vende tilbage til vores data og finde ud af, hvordan vi vil opdele dem. Vi ved, at vi vil gemme navn og land for vores byer, så dette fungerer sandsynligvis bedst i én tabel.

By Land
Tokyo Japan
Atlanta USA
Auckland New Zealand

Men før vi opretter den næste tabel, skal vi finde ud af, hvordan vi refererer til hver by. Vi har brug for en form for identifikator, ID eller (i tekniske databasetermer) en primær nøgle. En primær nøgle er en værdi, der bruges til at identificere en specifik række i en tabel. Selvom dette kunne baseres på en værdi i sig selv (vi kunne for eksempel bruge byens navn), bør det næsten altid være et nummer eller en anden identifikator. Vi ønsker ikke, at ID'et nogensinde ændrer sig, da det ville bryde relationen. I de fleste tilfælde vil den primære nøgle eller ID være et automatisk genereret nummer.

Primær nøgle forkortes ofte som PK

byer

by_id By Land
1 Tokyo Japan
2 Atlanta USA
3 Auckland New Zealand

Du vil bemærke, at vi bruger termerne "id" og "primær nøgle" i flæng under denne lektion. Begreberne her gælder også for DataFrames, som du vil udforske senere. DataFrames bruger ikke terminologien "primær nøgle", men du vil bemærke, at de opfører sig på samme måde.

Med vores byer-tabel oprettet, lad os gemme nedbøren. I stedet for at duplikere de fulde oplysninger om byen, kan vi bruge ID'et. Vi bør også sikre, at den nyoprettede tabel har en id-kolonne, da alle tabeller bør have et ID eller en primær nøgle.

nedbør

nedbør_id by_id År Mængde
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

Bemærk kolonnen by_id i den nyoprettede nedbør-tabel. Denne kolonne indeholder værdier, der refererer til ID'erne i byer-tabellen. I tekniske relationelle datatermer kaldes dette en fremmed nøgle; det er en primær nøgle fra en anden tabel. Du kan bare tænke på det som en reference eller en pegepind. by_id 1 refererer til Tokyo.

[!NOTE] Fremmed nøgle forkortes ofte som FK

Hente data

Med vores data opdelt i to tabeller undrer du dig måske over, hvordan vi henter dem. Hvis vi bruger en relationel database som MySQL, SQL Server eller Oracle, kan vi bruge et sprog kaldet Structured Query Language eller SQL. SQL (nogle gange udtalt "sequel") er et standardiseret sprog, der bruges til at hente og ændre data i en relationel database.

For at hente data bruger du kommandoen SELECT. I sin kerne vælger du de kolonner, du vil se, fra den tabel, de er indeholdt i. Hvis du kun ville vise navnene på byerne, kunne du bruge følgende:

SELECT city
FROM cities;

-- Output:
-- Tokyo
-- Atlanta
-- Auckland

SELECT er, hvor du angiver kolonnerne, og FROM er, hvor du angiver tabellerne.

[NOTE] SQL-syntaks er ikke skelnen mellem store og små bogstaver, hvilket betyder, at select og SELECT betyder det samme. Dog kan kolonner og tabeller afhængigt af typen af database være skelnen mellem store og små bogstaver. Derfor er det en god praksis altid at behandle alt i programmering, som om det er skelnen mellem store og små bogstaver. Når du skriver SQL-forespørgsler, er det almindelig konvention at skrive nøgleordene med store bogstaver.

Forespørgslen ovenfor vil vise alle byer. Lad os forestille os, at vi kun ville vise byer i New Zealand. Vi har brug for en form for filter. SQL-nøgleordet for dette er WHERE, eller "hvor noget er sandt".

SELECT city
FROM cities
WHERE country = 'New Zealand';

-- Output:
-- Auckland

Sammenkædning af data

Indtil nu har vi hentet data fra en enkelt tabel. Nu vil vi samle dataene fra både byer og nedbør. Dette gøres ved at sammenkæde dem. Du vil i bund og grund skabe en forbindelse mellem de to tabeller og matche værdierne fra en kolonne i hver tabel.

I vores eksempel vil vi matche kolonnen by_id i nedbør med kolonnen by_id i byer. Dette vil matche nedbørsværdien med dens respektive by. Den type sammenkædning, vi vil udføre, kaldes en indre sammenkædning, hvilket betyder, at hvis nogen rækker ikke matcher noget fra den anden tabel, vil de ikke blive vist. I vores tilfælde har hver by nedbør, så alt vil blive vist.

Lad os hente nedbøren for 2019 for alle vores byer.

Vi gør dette i trin. Det første trin er at sammenkæde dataene ved at angive kolonnerne for forbindelsen - by_id, som fremhævet før.

SELECT cities.city
    rainfall.amount
FROM cities
    INNER JOIN rainfall ON cities.city_id = rainfall.city_id

Vi har fremhævet de to kolonner, vi ønsker, og det faktum, at vi vil sammenkæde tabellerne ved hjælp af by_id. Nu kan vi tilføje WHERE-sætningen for kun at filtrere år 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 |  942

Opsummering

Relationelle databaser er centreret omkring at opdele information mellem flere tabeller, som derefter samles igen til visning og analyse. Dette giver en høj grad af fleksibilitet til at udføre beregninger og på anden måde manipulere data. Du har set de grundlæggende begreber i en relationel database og hvordan man udfører en sammenkædning mellem to tabeller.

🚀 Udfordring

Der findes adskillige relationelle databaser på internettet. Du kan udforske dataene ved at bruge de færdigheder, du har lært ovenfor.

Quiz efter forelæsning

Quiz efter forelæsning

Gennemgang & Selvstudie

Der er flere ressourcer tilgængelige på Microsoft Learn, som du kan bruge til at fortsætte din udforskning af SQL og relationelle databasebegreber.

Opgave

Opgavetitel


Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse.