![]() |
|---|
| Kufanya kazi na Data: Hifadhidata za Uhusiano - Sketchnote na @nitya |
Inawezekana umewahi kutumia lahajedwali hapo awali kuhifadhi taarifa. Ulikuwa na safu na nguzo, ambapo safu zilikuwa na taarifa (au data), na nguzo zilielezea taarifa (mara nyingine huitwa metadata). Hifadhidata ya uhusiano imejengwa juu ya kanuni hii kuu ya nguzo na safu katika meza, ikikuruhusu kuwa na taarifa zilizogawanyika katika meza nyingi. Hii inakuwezesha kufanya kazi na data tata zaidi, kuepuka kurudia, na kuwa na unyumbufu katika njia unazochunguza data. Hebu tuchunguze dhana za hifadhidata ya uhusiano.
Hifadhidata ya uhusiano ina meza kama msingi wake. Kama vile lahajedwali, meza ni mkusanyiko wa nguzo na safu. Safu ina data au taarifa tunayotaka kufanya kazi nayo, kama jina la mji au kiasi cha mvua. Nguzo zinaelezea data wanayohifadhi.
Hebu tuanze uchunguzi wetu kwa kuanzisha meza kuhifadhi taarifa kuhusu miji. Tunaweza kuanza na jina na nchi zao. Unaweza kuhifadhi hii katika meza kama ifuatavyo:
| Mji | Nchi |
|---|---|
| Tokyo | Japan |
| Atlanta | Marekani |
| Auckland | New Zealand |
Angalia majina ya nguzo ya mji, nchi na idadi ya watu yanaelezea data inayohifadhiwa, na kila safu ina taarifa kuhusu mji mmoja.
Inawezekana meza hapo juu inaonekana ya kawaida kwako. Hebu tuanze kuongeza data zaidi kwenye hifadhidata yetu inayokua - mvua ya kila mwaka (kwa milimita). Tutazingatia miaka 2018, 2019 na 2020. Ikiwa tungeiongeza kwa Tokyo, inaweza kuonekana kama hii:
| Mji | Nchi | Mwaka | Kiasi |
|---|---|---|---|
| Tokyo | Japan | 2020 | 1690 |
| Tokyo | Japan | 2019 | 1874 |
| Tokyo | Japan | 2018 | 1445 |
Unaona nini kuhusu meza yetu? Unaweza kuona tunarudia jina na nchi ya mji mara kwa mara. Hii inaweza kuchukua nafasi kubwa ya kuhifadhi, na si lazima kuwa na nakala nyingi. Baada ya yote, Tokyo ina jina moja tu tunalotaka.
Sawa, hebu jaribu kitu kingine. Tuweke nguzo mpya kwa kila mwaka:
| Mji | Nchi | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| Tokyo | Japan | 1445 | 1874 | 1690 |
| Atlanta | Marekani | 1779 | 1111 | 1683 |
| Auckland | New Zealand | 1386 | 942 | 1176 |
Ingawa hii inazuia kurudia safu, inaongeza changamoto nyingine. Tutahitaji kubadilisha muundo wa meza yetu kila wakati kuna mwaka mpya. Zaidi ya hayo, data yetu ikikua, kuwa na miaka kama nguzo kutafanya iwe vigumu kupata na kuhesabu thamani.
Hii ndiyo sababu tunahitaji meza nyingi na uhusiano. Kwa kugawanya data yetu tunaweza kuepuka kurudia na kuwa na unyumbufu zaidi katika jinsi tunavyofanya kazi na data.
Rudi kwenye data yetu na tuchague jinsi tunavyotaka kugawanya mambo. Tunajua tunataka kuhifadhi jina na nchi za miji yetu, hivyo hii itafanya kazi vizuri katika meza moja.
| Mji | Nchi |
|---|---|
| Tokyo | Japan |
| Atlanta | Marekani |
| Auckland | New Zealand |
Lakini kabla ya kuunda meza inayofuata, tunahitaji kujua jinsi ya kurejelea kila mji. Tunahitaji aina fulani ya kitambulisho, ID au (kwa istilahi za kiufundi za hifadhidata) ufunguo mkuu. Ufunguo mkuu ni thamani inayotumika kutambua safu moja maalum katika meza. Ingawa inaweza kutegemea thamani yenyewe (tunaweza kutumia jina la mji, kwa mfano), inapaswa karibu kila mara kuwa nambari au kitambulisho kingine. Hatutaki id kubadilika kamwe kwani itavunja uhusiano. Katika hali nyingi utapata ufunguo mkuu au id ni nambari inayojitengeneza yenyewe.
✅ Ufunguo mkuu mara nyingi huandikwa kama PK
| city_id | Mji | Nchi |
|---|---|---|
| 1 | Tokyo | Japan |
| 2 | Atlanta | Marekani |
| 3 | Auckland | New Zealand |
✅ Utaona tunatumia maneno "id" na "ufunguo mkuu" kwa kubadilishana katika somo hili. Dhana hapa zinahusiana na DataFrames, ambazo utazichunguza baadaye. DataFrames hazitumi istilahi ya "ufunguo mkuu", lakini utaona zina tabia kama hiyo.
Tukiwa na meza ya miji iliyoundwa, hebu tuhifadhi mvua. Badala ya kurudia taarifa kamili kuhusu mji, tunaweza kutumia id. Pia tunapaswa kuhakikisha meza mpya ina nguzo ya id, kwani meza zote zinapaswa kuwa na id au ufunguo mkuu.
| rainfall_id | city_id | Mwaka | Kiasi |
|---|---|---|---|
| 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 |
Angalia nguzo ya city_id ndani ya meza mpya ya mvua. Nguzo hii ina thamani zinazorejelea ID katika meza ya miji. Kwa istilahi za kiufundi za data za uhusiano, hii huitwa ufunguo wa kigeni; ni ufunguo mkuu kutoka meza nyingine. Unaweza kuifikiria kama rejeleo au kidokezo. city_id 1 inarejelea Tokyo.
Note
Ufunguo wa kigeni mara nyingi huandikwa kama FK
Tukiwa na data yetu imegawanyika katika meza mbili, unaweza kuwa unajiuliza jinsi tunavyopata data hiyo. Ikiwa tunatumia hifadhidata ya uhusiano kama MySQL, SQL Server au Oracle, tunaweza kutumia lugha inayoitwa Structured Query Language au SQL. SQL (mara nyingine inasemwa sequel) ni lugha ya kawaida inayotumika kupata na kubadilisha data katika hifadhidata ya uhusiano.
Kupata data unatumia amri SELECT. Kimsingi, unachagua nguzo unazotaka kuona kutoka kwenye meza zinazoihifadhi. Ikiwa ungependa kuonyesha majina tu ya miji, unaweza kutumia ifuatayo:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- AucklandSELECT ni mahali unapoorodhesha nguzo, na FROM ni mahali unapoorodhesha meza.
Note
Sarufi ya SQL haina tofauti kati ya herufi kubwa na ndogo, maana select na SELECT ni sawa. Hata hivyo, kulingana na aina ya hifadhidata unayotumia, nguzo na meza zinaweza kuwa na tofauti ya herufi kubwa na ndogo. Kwa hiyo, ni desturi nzuri kutibu kila kitu katika programu kama kinavyotegemea herufi kubwa na ndogo. Wakati wa kuandika maswali ya SQL, kawaida ni kuweka maneno muhimu kwa herufi kubwa.
Swali hapo juu litaonyesha miji yote. Hebu fikiria tungependa kuonyesha miji tu ya New Zealand. Tunahitaji aina fulani ya kichujio. Neno la SQL kwa hili ni WHERE, au "ambapo kitu ni kweli".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- AucklandHadi sasa tumepata data kutoka meza moja. Sasa tunataka kuleta data pamoja kutoka miji na mvua. Hii hufanyika kwa kuziunganisha pamoja. Kwa ufanisi utaunda mshono kati ya meza mbili, na kulinganisha thamani kutoka nguzo ya kila meza.
Katika mfano wetu, tutalinganisha nguzo ya city_id katika mvua na nguzo ya city_id katika miji. Hii italinganisha thamani ya mvua na mji wake husika. Aina ya kuunganisha tutakayofanya huitwa inner join, maana ikiwa safu yoyote haitalingani na chochote kutoka meza nyingine haitatazamwa. Katika kesi yetu kila mji una mvua, hivyo kila kitu kitaonyeshwa.
Hebu tupate mvua ya mwaka 2019 kwa miji yote.
Tutafanya hivi kwa hatua. Hatua ya kwanza ni kuunganisha data kwa kuonyesha nguzo za mshono - city_id kama ilivyoangaziwa hapo awali.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_idTumeangazia nguzo mbili tunazotaka, na ukweli tunataka kuunganisha meza kwa city_id. Sasa tunaweza kuongeza kauli ya WHERE kuchuja mwaka 2019 tu.
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 | 942Hifadhidata za uhusiano zinajikita katika kugawanya taarifa kati ya meza nyingi ambazo kisha huunganishwa tena kwa ajili ya kuonyeshwa na uchambuzi. Hii hutoa unyumbufu mkubwa kufanya mahesabu na kuendesha data kwa njia nyingine. Umeona dhana kuu za hifadhidata ya uhusiano, na jinsi ya kufanya kuunganisha kati ya meza mbili.
Kuna hifadhidata nyingi za uhusiano zinazopatikana mtandaoni. Unaweza kuchunguza data kwa kutumia ujuzi uliojifunza hapo juu.
Kuna rasilimali kadhaa zinazopatikana kwenye Microsoft Learn ili uendelee kuchunguza SQL na dhana za hifadhidata za uhusiano
- Eleza dhana za data za uhusiano
- Anza Kuuliza Maswali kwa Transact-SQL (Transact-SQL ni toleo la SQL)
- Yaliyomo ya SQL kwenye Microsoft Learn
Kuonyesha data ya uwanja wa ndege
Kiarifu cha Msamaha: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kwamba tafsiri za kiotomatiki zinaweza kuwa na makosa au upungufu wa usahihi. Hati ya asili katika lugha yake ya asili inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatubebei dhamana kwa kutoelewana au tafsiri potofu zinazotokana na matumizi ya tafsiri hii.
