⊗pyPmDOFR 126 of 129 menu

Rodne veze podataka u Python-u

Pretpostavimo da je pred nama zadatak da čuvamo očeve i sinove. Neka svaki otac može imati samo jednog sina, a sin zauzvrat takođe može imati jednog sina.

Potrebno je smisliti kako ćemo čuvati podatke. Prva ideja koja može pasti na pamet - napraviti dve tabele: parents za očeve i sons za sinove. Zatim povezati ove tabele nekim poljem: son_id ili parent_id.

Međutim, ova ideja nije baš dobra - jer ista osoba može biti istovremeno i otac i sin - i moraćemo da je čuvamo u obe tabele, a to je nezgodno, zauzima više mesta i lako vodi do grešaka.

Bolja opcija je da povežemo tabelu samu sa sobom: napravićemo tabelu users, u njoj ćemo čuvati sve korisnike i svakom ćemo napraviti polje son_id, u kome će biti čuvan id sina iz ove iste tabele:

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

Upiti

Hajde sada da napišemo upit koji će dohvatiti korisnika zajedno sa njegovim sinom.

Za početak hajde jednostavno da dohvatimo korisnike:

SELECT * FROM users

Sada ćemo da spojimo (join) sa korisnicima njihove sinove. Spojićemo tabelu samu sa sobom, pa zato moramo da izvršimo njeno preimenovanje:

LEFT JOIN users as sons

Sada možemo da naznačimo vezu osnovne tabele i preimenovane:

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

Naznačimo sada polja:

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

Sastavimo sve zajedno i dobićemo sledeći upit:

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

Praktični zadaci

Pretpostavimo da imamo kategorije. Svaka kategorija može pripadati roditeljskoj kategoriji, ta zauzvrat svojoj roditeljskoj i tako dalje. Opišite strukturu čuvanja.

Napišite upit koji će dohvatiti kategoriju zajedno sa njenom roditeljskom kategorijom.

Napišite upit koji će dohvatiti kategoriju zajedno sa njenim roditeljem i dedom/pradedom (pra-roditeljem).

Napišite upit koji će dohvatiti kategoriju zajedno sa njenim roditeljem, dedom/pradedom i čukadedom (pra-pra-roditeljem).

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij