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:
| 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:
SELECT
*
FROM
users
Sasa tuwaunge (JOIN) kwa watumiaji wanaowao. Tutaunganisha meza yenyewe na yenyewe, kwa hivyo inahitajika kutaja jina jipya (aliasing):
LEFT JOIN users as sons
Sasa tunaweza kubainisha uhusiano kati ya meza kuu na ile iliyopewa jina jipya:
LEFT JOIN users as sons ON sons.id=users.son_id
Sasa tubainishe sehemu (fields):
SELECT
users.name as user_name, sons.name as son_name
Tukusanye yote pamoja na tutapata swali lifuatalo:
SELECT
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
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.
Andika swali ambalo litatoa kategoria pamoja na kategoria yake ya mzazi.
Andika swali ambalo litatoa kategoria pamoja na mzazi wake na mzazi wa mzazi wake (babu).
Andika swali ambalo litatoa kategoria pamoja na mzazi wake, mzazi wa mzazi wake (babu) na mzazi wa mzazi wa mzazi wake (kuku).