Skip to main content
Query

4.4: Kubuni Database

  • Page ID
    165061
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Kubuni Database

    Tuseme chuo kikuu kinataka kuunda database kufuatilia ushiriki katika vilabu vya wanafunzi. Baada ya kuhoji watu kadhaa, timu ya kubuni inajifunza kwamba utekelezaji wa mfumo ni kutoa ufahamu bora zaidi jinsi chuo kikuu kinachotumia klabu. Hii itakamilika kwa kufuatilia wanachama wangapi kila klabu ina na jinsi kazi klabu ni. Timu hiyo inaamua kwamba mfumo lazima uangalie klabu, wanachama wao, na matukio yao. Kutumia habari hii, timu ya kubuni huamua kuwa meza zifuatazo zinahitajika kuundwa:

    • Vilabu: hii itafuatilia jina la klabu, rais wa klabu, na maelezo mafupi ya klabu.
    • Wanafunzi: jina la mwanafunzi, barua pepe, na mwaka wa kuzaliwa.
    • Uanachama: meza hii itaunganisha wanafunzi na vilabu, kuturuhusu kuwa na mwanafunzi yeyote aliyepewa kujiunga na vilabu vingi.
    • matukio: meza hii kufuatilia wakati klabu kukutana na jinsi wanafunzi wengi walionyesha up.

    Sasa kwamba timu ya kubuni imeamua meza ambazo zinaunda, zinahitaji kufafanua habari maalum ambayo kila meza itashikilia. Hii inahitaji kutambua mashamba ambayo yatakuwa katika kila meza. Kwa mfano, Jina la Klabu litakuwa moja ya mashamba katika meza ya Vilabu. Jina la kwanza na Jina la Mwisho litakuwa mashamba katika meza ya Wanafunzi. Hatimaye, kwa kuwa hii itakuwa database ya uhusiano, kila meza inapaswa kuwa na shamba sawa na angalau meza nyingine (kwa maneno mengine: wanapaswa kuwa na uhusiano na kila mmoja).

    Ili kuunda uhusiano huu vizuri, ufunguo wa msingi unapaswa kuchaguliwa kwa kila meza. Kitufe hiki ni kitambulisho cha kipekee cha kila rekodi katika meza. Kwa mfano, katika meza ya Wanafunzi, inaweza kuwa inawezekana kutumia majina ya kwanza ya wanafunzi ili kuwatambua pekee. Hata hivyo, kuna uwezekano mkubwa kwamba baadhi ya wanafunzi watashiriki jina la mwisho (kama Mike, Stefanie, au Chris), hivyo uwanja tofauti unapaswa kuchaguliwa. Anwani ya barua pepe ya mwanafunzi inaweza kuwa chaguo nzuri kwa ufunguo wa msingi tangu anwani za barua pepe ni za kipekee. Hata hivyo, ufunguo wa msingi hauwezi kubadilika, hivyo hii ingekuwa na maana kwamba kama wanafunzi walibadilisha anwani zao za barua pepe, tutawaondoa kutoka kwenye database na kisha kuziingiza tena - sio pendekezo la kuvutia. Suluhisho letu ni kujenga thamani kwa kila mwanafunzi - ID ya mtumiaji - ambayo itachukua hatua kama ufunguo wa msingi. Tutafanya hivyo pia kwa kila klabu za wanafunzi. Suluhisho hili ni la kawaida na ni sababu una vitambulisho vingi vya mtumiaji!

    Unaweza kuona design ya mwisho ya database katika takwimu hapa chini:

    Behaviorism_1.gif
    Kielelezo\(\PageIndex{1}\): Data kubuni mtiririko. Picha na David Bourgeois, Ph.D. ni leseni chini ya CC BY 4.0

    Kwa kubuni hii, sio tu tuna njia ya kuandaa habari zote tunayohitaji ili kukidhi mahitaji, lakini pia tumefanikiwa kuhusiana na meza zote pamoja. Hapa ni nini meza database inaweza kuangalia kama na baadhi ya data sampuli. Kumbuka kuwa meza ya Uanachama ina lengo pekee la kuturuhusu kuhusisha wanafunzi wengi kwenye vilabu vingi.

    Behaviorism_1.gif
    Kielelezo\(\PageIndex{2}\): Jedwali: Vilabu. Picha na David Bourgeois, Ph.D. ni leseni chini ya CC BY 4.0
    Behaviorism_1.gif
    Kielelezo\(\PageIndex{3}\): Jedwali: Wanafunzi. Picha na David Bourgeois, Ph.D. ni leseni chini ya CC BY 4.0
    Behaviorism_1.gif
    Kielelezo\(\PageIndex{4}\): meza: Uanachama. Picha: na David Bourgeois, Ph.D. ni leseni chini ya CC BY 4.0

    Kawaida

    Wakati wa kubuni database, dhana moja muhimu kuelewa ni kuimarisha. Kwa maneno rahisi, kuimarisha database ina maana ya kuifanya kwa njia ambayo:

    • Inapunguza redundancy ya data kati ya meza rahisi ramani
    • Inachukua data haiendani.
    • Taarifa huhifadhiwa mahali pekee.
    • Inatoa meza kama kubadilika iwezekanavyo.

    Katika muundo wa database ya Vilabu vya Wanafunzi, timu ya kubuni ilifanya kazi ili kufikia malengo haya. Kwa mfano, kufuatilia uanachama, suluhisho rahisi linaweza kuwa kuunda uwanja wa Wanachama katika meza ya Vilabu na kisha uorodhe majina yote ya wanachama. Hata hivyo, kubuni hii ingekuwa na maana kwamba kama mwanafunzi alijiunga na klabu mbili, basi habari yake ingekuwa na kuingizwa mara ya pili. Badala yake, wabunifu kutatuliwa tatizo hili kwa kutumia meza mbili: Wanafunzi na Uanachama.

    Katika kubuni hii, wakati mwanafunzi anapojiunga na klabu yao ya kwanza, lazima tuongeze mwanafunzi kwenye meza ya Wanafunzi, ambapo jina lao la kwanza, jina la mwisho, anwani ya barua pepe, na mwaka wa kuzaliwa huingia. Mbali hii kwa meza ya Wanafunzi itazalisha ID ya mwanafunzi. Sasa tutaongeza kuingia mpya ili kuonyesha kwamba mwanafunzi ni mwanachama maalum wa klabu. Hii imekamilika kwa kuongeza rekodi na kitambulisho cha mwanafunzi na kitambulisho cha klabu katika meza ya Uanachama. Ikiwa mwanafunzi huyu anajiunga na klabu ya pili, hatuhitaji kurudia jina la mwanafunzi, barua pepe, na mwaka wa kuzaliwa; badala yake, tunahitaji tu kuingia mwingine kwenye meza ya Uanachama wa ID ya klabu ya pili na ID ya mwanafunzi.

    Vilabu vya Wanafunzi kubuni database pia inafanya kuwa rahisi kubadilisha muundo bila marekebisho makubwa ya muundo uliopo. Kwa mfano, ikiwa timu ya kubuni iliulizwa kuongeza utendaji kwenye mfumo wa kufuatilia washauri wa Kitivo kwa vilabu, tunaweza kukamilisha hili kwa urahisi kwa kuongeza meza ya Washauri wa Kitivo (sawa na meza ya Wanafunzi) na kisha kuongeza uwanja mpya kwenye meza ya Vilabu ili kushikilia kitambulisho cha Mshauri wa Kitivo.

    Aina za Data

    Wakati wa kufafanua mashamba katika meza ya database, tunapaswa kutoa kila shamba aina ya data. Kwa mfano, shamba Mwaka wa Kuzaliwa ni mwaka, hivyo itakuwa namba, wakati Jina la Kwanza litakuwa maandishi. Database nyingi za kisasa zinaruhusu aina mbalimbali za data zihifadhiwe. Baadhi ya aina za kawaida za data zimeorodheshwa hapa:

    • Nakala: kwa kuhifadhi data zisizo za nambari ambazo ni fupi, kwa ujumla chini ya herufi 256. Muumbaji wa database anaweza kutambua urefu wa maandishi.
    • Nambari: kwa ajili ya kuhifadhi idadi. Kwa kawaida kuna aina chache za namba zilizochaguliwa, kulingana na jinsi idadi kubwa itakuwa kubwa.
    • Ndiyo/Hapana: aina maalum ya aina ya data ya nambari ambayo ni (kawaida) byte moja kwa muda mrefu, na 0 kwa “Hapana” au “Uongo” na a 1 kwa “Ndiyo” au “Kweli.”
    • Tarehe/Muda: aina maalum ya aina ya data ya nambari inaweza kutafsiriwa kama namba au wakati.
    • Fedha: fomu maalum ya aina ya data ya nambari ambayo huunda maadili yote na kiashiria cha sarafu na maeneo mawili ya decimal.
    • Nakala ya aya: aina hii ya data inaruhusu maandishi zaidi ya herufi 256.
    • Kitu: aina hii ya data inaruhusu kuhifadhi data ambayo haiwezi kuingizwa kupitia keyboards, kama picha au faili ya muziki.

    Umuhimu wa kufafanua vizuri aina ya data ni kuboresha uadilifu wa data na eneo sahihi la kuhifadhi. Lazima tufafanue vizuri aina ya data ya shamba, na aina ya data inaelezea database kazi gani zinaweza kufanywa na data. Kwa mfano, ikiwa tunataka kufanya kazi za hisabati na moja ya mashamba, lazima tuambie database kwamba shamba ni aina ya data ya nambari. Hivyo kama tuna shamba kuhifadhi mwaka wa kuzaliwa, tunaweza Ondoa idadi iliyohifadhiwa katika uwanja huo kutoka mwaka wa sasa kupata umri.

    Ugawaji wa nafasi ya kuhifadhi kwa data iliyoelezwa lazima pia kutambuliwa. Kwa mfano, ikiwa shamba la Jina la Kwanza linafafanuliwa kama aina ya data ya maandishi (50), wahusika hamsini hutengwa kwa kila jina la kwanza tunayotaka kuhifadhi. Hata hivyo, hata kama jina la kwanza ni wahusika watano tu kwa muda mrefu, wahusika hamsini (bytes) watatengwa. Ingawa hii inaweza kuonekana kama mpango mkubwa, ikiwa meza yetu inaisha kufanya majina 50,000, tunaweka 50 * 50,000 = 2,500,000 bytes kwa ajili ya kuhifadhi maadili haya. Inaweza kuwa na busara kupunguza ukubwa wa shamba, kwa hivyo hatuwezi kupoteza nafasi ya kuhifadhi.