Datas slektskapsrelasjoner i Python

La oss anta at vi står overfor oppgaven med å lagre fedre og sønner. La hver far ha bare én sønn, og sønnen i sin tur kan også ha én sønn.

Vi må finne ut hvordan vi skal lagre dataene. Den første ideen som kan komme til hjernen er å lage to tabeller: parents for fedre og sons for sønner. Deretter koble disse tabellene med et eller annet felt: son_id eller parent_id.

Imidlertid er ikke denne ideen veldig god - for samme person kan samtidig være både far og sønn - og vi må lagre ham i begge tabellene, noe som er upraktisk, tar opp mer plass og leder lett til feil.

Et bedre alternativ er å koble tabellen til seg selv: la oss lage en tabell users, der vi lagrer alle brukerne og gir hver et felt son_id, hvor id til sønnen fra samme tabell vil bli lagret:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Spørringer

La oss nå skrive en spørring som henter brukeren sammen med sønnen hans.

La oss først bare hente brukerne:

sqlSELECT
  *
FROM
  users

La oss nå joine med sønnene deres. Vi skal joine tabellen med seg selv, derfor må vi utføre omdøping av den:

sqlLEFT JOIN users as sons

Nå kan vi spesifisere sammenhengen mellom hovedtabellen og den omdøpte tabellen:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

La oss nå spesifisere feltene:

sqlSELECT
  users.name as user_name, sons.name as son_name

La oss sette alt sammen og få følgende spørring:

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

Praktiske oppgaver

Задание 1

La oss si at vi har kategorier. Hver kategori kan tilhøre en overordnet kategori, og den kan i sin tur tilhøre sin overordnete kategori, og så videre. Beskriv lagringsstrukturen.

Задание 2

Skriv en spørring som henter kategorien sammen med dens overordnede kategori.

Задание 3

Skriv en spørring som henter kategorien sammen med dens overordnede kategori og besteforelderkategori.

Задание 4

Skriv en spørring som henter kategorien sammen med dens overordnede kategori, besteforelderkategori og oldeforelderkategori.