Uhusiano wa Data wa Kifamilia katika Python

Wacha tuseme tunakabiliwa na changamoto ya kuhifadhi baba na wanawe. Wacha kila baba awe na uwezo wa kuwa na mwana mmoja tu, na mwana huyo kwa upande wake anaweza pia kuwa na mwana mmoja tu.

Inahitajika kutafakari jinsi tutakavyohifadhi data. Wazo la kwanza, linaweza kujia akilini - kutengeneza meza mbili: parents kwa wazazi na sons kwa wana. Kisha kuunganisha meza hizi na uga fulani: son_id au parent_id.

Hata hivyo, hili si wazo zuri sana - maana mtu yule yule anaweza kuwa wakati huo huo baba na mwana - na itabidi uhifadhiwe katika meza zote mbili, na hii haifai, inachukua nafasi zaidi na kwa urahisi husababisha makosa.

Chaguo bora zaidi - ni kuunganisha meza yenyewe na yenyewe: tutatengeneza meza users, ndani yake tutahifadhi watumiaji wote na kila mmoja tutamfanyia uga son_id, ambao ndani yake utahifadhiwa id wa mwana kutoka kwenye meza hii hii:

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

Maswali

Sasa tujiandae kuandika swali (query) ambalo litamtoa mtumiaji pamoja na mwanawe.

Kwanza, tuchukue watumiaji tu:

sqlSELECT
  *
FROM
  users

Sasa tuwaunge (JOIN) kwa watumiaji wanaowao. Tutaunganisha meza yenyewe na yenyewe, kwa hivyo inahitajika kutaja jina jipya (aliasing):

sqlLEFT JOIN users as sons

Sasa tunaweza kubainisha uhusiano kati ya meza kuu na ile iliyopewa jina jipya:

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

Sasa tubainishe sehemu (fields):

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

Tukusanye yote pamoja na tutapata swali lifuatalo:

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

Kazi za Vitendo

Задание 1

Wacha tuseme tuna kategoria. Kila kategoria inaweza kuwa chini ya kategoria ya mzazi, na ile kategoria ya mzazi kwa upande wake iko chini ya kategoria yake ya mzazi na kadharika. Eleza muundo wa uhifadhi.

Задание 2

Andika swali ambalo litatoa kategoria pamoja na kategoria yake ya mzazi.

Задание 3

Andika swali ambalo litatoa kategoria pamoja na mzazi wake na mzazi wa mzazi wake (babu).

Задание 4

Andika swali ambalo litatoa kategoria pamoja na mzazi wake, mzazi wa mzazi wake (babu) na mzazi wa mzazi wa mzazi wake (kuku).