Ufunguo wa msingi unapaswa kuwa na sifa gani? SQL - Ufunguo wa Msingi. Uhusiano mmoja kwa wengi

Ufunguo wa Msingi ni sehemu katika jedwali inayotambulisha kwa njia ya kipekee kila safu/rekodi katika jedwali la hifadhidata. Vifunguo vya msingi lazima iwe na maadili ya kipekee. Safu wima ya ufunguo msingi haiwezi kuwa na thamani.

Jedwali linaweza kuwa na ufunguo mmoja tu msingi, ambao unaweza kujumuisha sehemu moja au zaidi. Wakati sehemu nyingi zinatumiwa kama ufunguo wa msingi, huitwa ufunguo wa mchanganyiko.

Ikiwa jedwali lina ufunguo msingi uliofafanuliwa kwenye sehemu yoyote, basi huwezi kuwa na rekodi mbili zenye thamani sawa ya sehemu hiyo.

Kumbuka- Unaweza kutumia dhana hizi wakati wa kuunda meza za hifadhidata.

Kuunda Ufunguo Msingi

Hapa kuna sintaksia ya kufafanua sifa ya kitambulisho kama ufunguo msingi katika jedwali la Wateja.

TUNDA WATEJA WA JEDWALI(ID INT NOT NULL, JINA VARCHAR (20) NOT NULL, AGE INT NOT NULL, ANWANI CHAR (25) , DECIMAL YA MSHAHARA (18, 2), UFUNGUO WA MSINGI (KITAMBULISHO));

Ili kuunda kizuizi cha msingi kwenye safu wima ya "ID" wakati jedwali la CUSTOMERS tayari lipo, tumia yafuatayo. Sintaksia ya SQL:

WATEJA WA JEDWALI BADILISHA ONGEZA UFUNGUO WA MSINGI (KITAMBULISHO);

Kumbuka

Ukitumia taarifa ya ALTER TABLE kuongeza ufunguo msingi, safu wima ya funguo msingi lazima iwe tayari imetangazwa kuwa haina thamani NULL (ikiwa jedwali liliundwa kwanza).

Ili kufafanua ufunguo wa msingi kwenye safu wima nyingi, tumia syntax ya SQL hapa chini:

TUNZA WATEJA WA JEDWALI(ID INT NOT NULL, JINA VARCHAR (20) NOT NULL, AGE INT NOT NULL, ANWANI CHAR (25) , DECIMAL YA MSHAHARA (18, 2), FUNGUO YA MSINGI (KITAMBULISHO, JINA));

Ili kuunda kizuizi cha msingi kwenye safu wima za kitambulisho na NAME wakati jedwali la CUSTOMERS tayari lipo, tumia sintaksia ifuatayo ya SQL.

WATEJA WA JEDWALI BADILISHA ONGEZA KIZUIZI PK_CUSTID UFUNGUO MSINGI (KITAMBULISHO, JINA);

Inafuta ufunguo msingi

Unaweza kufuta vizuizi vya msingi kutoka kwa jedwali kwa kutumia sintaksia iliyotolewa hapa chini.

WATEJA WA JEDWALI BADILISHA WANAONDOKA UFUNGUO WA MSINGI;

Hii hifadhi ya elektroniki habari inayopatikana kupitia kompyuta moja au zaidi. Kwa kawaida, hifadhidata huundwa ili kuhifadhi na kufikia data iliyo na taarifa kuhusu baadhi eneo la somo, yaani, eneo fulani la shughuli za binadamu au sehemu ya ulimwengu wa kweli.

DBMS ni programu kuunda, kujaza, kusasisha na kufuta hifadhidata.

Sehemu ya habari iliyohifadhiwa kwenye hifadhidata ni jedwali. Kila jedwali ni mkusanyiko wa safu na safu, ambapo safu zinalingana na mfano wa kitu, tukio maalum au jambo, na safu zinalingana na sifa (sifa, sifa, vigezo) vya kitu, tukio au jambo. Kila mstari una habari kuhusu tukio maalum.

Kwa maneno ya hifadhidata, safu wima za jedwali huitwa uwanja, na safu zake huitwa rekodi.

Uhusiano unaweza kuwepo kati ya meza za hifadhidata za mtu binafsi, yaani, habari katika jedwali lililotangulia inaweza kuongezwa kwa nyingine. Hifadhidata ambazo zina uhusiano kati ya jedwali za kibinafsi huitwa uhusiano. Jedwali moja linaweza kuwa jedwali kuu kuhusiana na jedwali moja la hifadhidata na jedwali la watoto kuhusiana na lingine.

Majedwali yaliyounganishwa na mahusiano yanaingiliana kulingana na kanuni ya bwana-mtumwa. Jedwali sawa linaweza kuwa jedwali kuu la jedwali moja la hifadhidata na mtoto wa mwingine.

Kitu - ni kitu kilichopo na kinachoweza kutofautishwa, kilicho na seti ya mali. Tofauti kati ya kitu kimoja na kitu kingine imedhamiriwa na maadili maalum ya mali.

Asili - tafakari ya kitu kwenye kumbukumbu ya mtu au kompyuta.

Sifa - thamani maalum ya mali yoyote ya shirika.

Shamba ni kipengele kimoja cha rekodi ambacho huhifadhi thamani ya sifa maalum.

Uwanja wa mawasiliano Huu ndio uwanja ambao meza mbili zinahusiana.

Vifunguo vya msingi na sekondari

Kila jedwali la hifadhidata linaweza kuwa na ufunguo msingi - hii ni sehemu au mkusanyiko wa sehemu ambazo hutambulisha rekodi kwa njia ya kipekee.

Thamani ya msingi katika jedwali la hifadhidata lazima iwe ya kipekee, yaani, kusiwe na rekodi mbili au zaidi kwenye jedwali zenye thamani sawa ya ufunguo msingi.

Vifunguo vya msingi hurahisisha kuanzisha uhusiano kati ya jedwali. Kwa sababu ufunguo msingi lazima uwe wa kipekee, sio sehemu zote kwenye jedwali zinaweza kutumika kwa ajili yake.

Ikiwa meza haina uwanja ambao maadili yake ni ya kipekee, kuunda ufunguo wa msingi, sehemu ya ziada ya nambari kawaida huletwa ndani yake, maadili ambayo DBMS inaweza kutupa kwa hiari yake.

Vifunguo vya pili vimewekwa na sehemu ambazo hutumiwa mara nyingi wakati wa kutafuta au kupanga data: faharisi zilizojengwa kwenye funguo za pili zitasaidia mfumo kupata thamani zinazohitajika zilizohifadhiwa kwenye sehemu zinazolingana kwa haraka zaidi.

Tofauti na funguo msingi, sehemu za funguo za pili zinaweza kuwa na maelezo yasiyo ya kipekee.

Mahusiano ya uhusiano kati ya meza

Moja kwa moja. Uhusiano wa moja kwa moja hutokea wakati rekodi moja katika jedwali la wazazi inalingana na rekodi moja katika jedwali la mtoto.

Uhusiano huu ni wa kawaida sana kuliko uhusiano wa mtu-kwa-wengi; hutumika ikiwa hutaki jedwali la hifadhidata kuvimba na jedwali la pili. Mawasiliano ya mmoja-mmoja husababisha kusomeka habari zinazohusiana katika meza kadhaa, unapaswa kufanya shughuli nyingi za kusoma, ambazo hupunguza kasi ya kupata taarifa muhimu. Kwa kuongeza, hifadhidata zilizo na jedwali zilizo na uhusiano wa moja hadi moja haziwezi kuzingatiwa kuwa za kawaida kabisa.

Kama uhusiano wa watu wengi, uhusiano wa mtu mmoja hadi mmoja unaweza kuwa mgumu au laini.

InterBase inaweza kutumika aina zifuatazo vikwazo:
  • UFUNGUO WA MSINGI - ufunguo wa msingi wa jedwali.
  • UNIQUE - ufunguo wa kipekee wa meza.
  • UFUNGUO WA NJE- ufunguo wa kigeni, hutoa kiungo kwa jedwali lingine na huhakikisha uadilifu wa urejeleaji kati ya mzazi na meza za watoto.

Ujumbe juu ya istilahi

Ikiwa wewe ni kama mwandishi kozi hii kwa sababu unapenda kutafuta majibu ya swali ambalo linakuvutia kabisa, katika kazi tofauti za waandishi tofauti, basi haungeweza kusaidia lakini kugundua machafuko fulani katika ufafanuzi. mkuu (bwana) -> chini (maelezo) meza. Kumbuka kwamba meza kuu mara nyingi huitwa meza ya wazazi, na meza ya chini mara nyingi huitwa meza ya mtoto.

Labda hii ni kwa sababu ya jinsi ufafanuzi huu unavyofasiriwa katika DBMS za seva za ndani na za SQL.

Katika DBMS za ndani, jedwali kuu ni lile ambalo lina data kuu, na jedwali la chini lina data ya ziada. Hebu tuchukue, kwa mfano, meza tatu zinazohusiana. Ya kwanza ina data juu ya mauzo, ya pili - kwenye bidhaa na ya tatu - kwa wateja:


Mchele. 18.1.

Hapa habari kuu imehifadhiwa kwenye meza ya mauzo, kwa hiyo ni meza kuu (mzazi). Maelezo ya ziada yanahifadhiwa katika bidhaa na meza za wateja, ambayo ina maana kwamba wao ni watoto. Hii inaeleweka: binti mmoja hawezi kuwa na mama wawili wa kibiolojia, lakini mama mmoja ana uwezo kabisa wa kuzaa binti wawili.

Lakini katika seva za hifadhidata za SQL kuna ufafanuzi tofauti wa uhusiano: wakati uwanja mmoja kwenye jedwali unarejelea uwanja kwenye jedwali lingine, inaitwa. ufunguo wa kigeni. Na uwanja unaorejelea unaitwa mzazi au ufunguo wa msingi. Jedwali ambalo lina ufunguo wa kigeni (kiungo kwa rekodi katika jedwali lingine) mara nyingi huitwa mtoto, na meza na ufunguo wa mzazi- wazazi. Pia katika ufafanuzi wa mahusiano wanasema kuwa mzazi anaweza kuwa na rekodi moja tu ya kipekee, ambayo inaweza kurejelewa na rekodi kadhaa. meza ya mtoto.

Kwa hivyo katika mfano hapo juu, jedwali la mauzo lina funguo mbili za kigeni: kitambulisho cha bidhaa, na kitambulisho cha mteja. Na meza zote mbili upande wa kulia wa takwimu zina ufunguo wa mzazi"Kitambulisho". Kwa kuwa mteja au bidhaa hiyo hiyo inaweza kuonekana mara kwa mara kwenye meza ya mauzo, inageuka kuwa meza zote mbili upande wa kulia wa takwimu ni wazazi, na meza upande wa kushoto ni mtoto. Kwa sababu sasa tunasoma InterBase - SQL seva ya hifadhidata, tutaongozwa na ufafanuzi huu katika mihadhara inayofuata. Ili tusisumbue akili zetu zaidi juu ya mkanganyiko huu, wacha tukubaliane mara moja: meza ya mtoto ina ufunguo wa kigeni (FOREIGN KEY) kwa jedwali lingine.

UFUNGUO WA MSINGI

UFUNGUO WA MSINGI- ufunguo wa msingi ni moja ya aina kuu za vikwazo katika hifadhidata. Ufunguo msingi umeundwa ili kutambua rekodi katika jedwali na lazima iwe ya kipekee. Funguo za msingi UFUNGUO WA MSINGI ziko katika jedwali, ambazo kwa kawaida huitwa mzazi (Mzazi). Usichanganye ufunguo msingi na faharasa msingi hifadhidata za mitaa data, ufunguo wa msingi sio index, lakini kizuizi. Wakati wa kuunda ufunguo wa msingi InterBase moja kwa moja inajenga kwa ajili yake index ya kipekee. Walakini, ikiwa tunaunda index ya kipekee, hii haitaunda vikwazo vya msingi. Jedwali linaweza tu kuwa na ufunguo mmoja msingi, UFUNGUO WA MSINGI.

Wacha tuseme unayo meza iliyo na orodha ya wafanyikazi. Sehemu ya Jina la Mwisho inaweza kuwa na maadili sawa(namesakes), kwa hivyo haiwezi kutumika kama ufunguo msingi. Ni nadra, lakini kuna majina ambayo, kwa kuongeza, yana majina sawa. Hata mara chache zaidi, kuna majina kamili, kwa hivyo hata sehemu zote tatu "Jina la Mwisho" + "Jina la Kwanza" + "Patronymic" haziwezi kuthibitisha upekee wa rekodi, na haziwezi kuwa ufunguo wa msingi. KATIKA kwa kesi hii Suluhisho, kama hapo awali, ni kuongeza uwanja wa kitambulisho ambao una nambari ya serial ya mtu huyu. Sehemu kama hizo kawaida hufanywa kwa kuongeza kiotomatiki (tutazungumza juu ya kuandaa uwanja wa kuongeza kiotomatiki katika mihadhara inayofuata). Kwa hiyo,

Ufunguo wa msingi ni sehemu moja au zaidi katika jedwali, mseto ambao ni wa kipekee kwa kila rekodi.

Ikiwa ufunguo msingi una safu wima moja (kama ilivyo mara nyingi), kibainishi cha PRIMARY KEY kinatumika wakati. ufafanuzi wa safu:

UNDA TABLE Prim_1(Stolbec1 INT NOT NULL PRIMARY KEY, Stolbec2 VARCHAR(50))

Ikiwa ufunguo wa msingi umejengwa kwenye safu wima kadhaa, basi kibainishi kinawekwa baada ya kufafanua nyanja zote:

UNDA TABLE Prim_2(Stolbec1 INT NOT NULL, Stolbec2 VARCHAR(50) NOT NULL, PRIMARY KEY (Stolbec1, Stolbec2))

Kama inavyoonekana kutoka kwa mifano, ufunguo wa msingi lazima iwe na kikwazo SIYO NULL safuwima.

KIPEKEE

KIPEKEE- ufunguo wa kipekee. Kibainishi cha UNIQUE kinaonyesha kuwa thamani zote wa uwanja huu lazima ziwe za kipekee, kwa hivyo sehemu kama hizo pia haziwezi kuwa na maadili NULL. Tunaweza kusema kwamba ufunguo wa kipekee wa UNIQUE ni chaguo mbadala ufunguo wa msingi, lakini kuna tofauti. Tofauti kuu ni kwamba lazima kuwe na ufunguo mmoja tu wa msingi, ambapo kunaweza kuwa na funguo kadhaa za kipekee. Zaidi ya hayo, kizuizi cha UNIQUE hakiwezi kujengwa kwenye safu wima sawa ambayo ilitumika kwa PRIMARY KEY au kizuizi kingine cha UNIQUE. Vifunguo vya kipekee, kama vile funguo msingi, hupatikana katika jedwali ambazo ni wazazi wa jedwali zingine.

Safu wima iliyotangazwa na Kizuizi cha KIPEKEE, kama ufunguo msingi, inaweza kutumika kuhakikisha uadilifu wa marejeleo kati ya mzazi na meza za watoto. Katika kesi hii, ufunguo wa kigeni meza ya mtoto itarejelea sehemu hii. Kama ilivyo kwa ufunguo wa msingi, wakati ufunguo wa kipekee umeundwa, a index ya kipekee. Lakini si kinyume chake. Mfano wa kuunda jedwali na funguo moja za msingi na mbili za kipekee:

CREATE TABLE Prim_3(Stolbec1 INT NOT NULL PRIMARY KEY, Stolbec2 VARCHAR(50) NOT NULL UNIQUE, Stolbec3 FLOAT NOT NULL UNIQUE)

UFUNGUO WA NJE

UFUNGUO WA NJE- ufunguo wa nje. Hii ni sana chombo chenye nguvu ili kuhakikisha uadilifu wa marejeleo kati ya jedwali, ambayo inaruhusu sio tu kufuatilia upatikanaji viungo sahihi, lakini pia wasimamie kiotomatiki. Funguo za kigeni ziko kwenye meza ambazo ni watoto (Mtoto) wa meza zingine. Uadilifu wa marejeleo hutolewa kwa usahihi na ufunguo wa kigeni unaorejelea msingi au

Sasisho la mwisho: 07/02/2017

Hifadhidata inaweza kuwa na majedwali ambayo yameunganishwa na viungo mbalimbali. Uhusiano unawakilisha uhusiano kati ya vyombo vya aina tofauti.

Wakati wa kuchagua uhusiano, chagua jedwali kuu au la mzazi (meza ya ufunguo wa msingi / meza kuu) na tegemezi, meza ya mtoto ( ufunguo wa kigeni meza / mtoto meza). Jedwali la mtoto hutegemea meza ya mzazi.

Funguo za kigeni hutumiwa kuandaa mawasiliano. Kitufe cha kigeni kinawakilisha safu wima moja au zaidi kutoka kwa jedwali moja ambalo pia ni ufunguo unaowezekana kutoka kwa jedwali lingine. Ufunguo wa kigeni sio lazima ulingane na ufunguo msingi kutoka kwa jedwali kuu. Ingawa, kama sheria, ufunguo wa kigeni kutoka kwa jedwali tegemezi huelekeza kwa ufunguo wa msingi kutoka kwa jedwali kuu.

Mahusiano kati ya meza ni ya aina zifuatazo:

    Moja kwa moja

    Moja kwa wengi

    wengi kwa wengi(Wengi kwa wengi)

Mawasiliano moja hadi moja

Aina hii ya uunganisho haipatikani mara nyingi. Katika kesi hii, kitu cha chombo kimoja kinaweza kuhusishwa na kitu kimoja tu cha chombo kingine. Kwa mfano, kwenye tovuti zingine mtumiaji anaweza kuwa na blogu moja pekee. Hiyo ni, uhusiano unatokea: mtumiaji mmoja - blogi moja.

Mara nyingi aina hii ya uunganisho inahusisha kugawanyika moja meza kubwa kwa kadhaa ndogo. Jedwali la msingi la mzazi katika kesi hii linaendelea kuwa na data inayopatikana mara kwa mara, wakati jedwali tegemezi la watoto kwa kawaida huhifadhi data ambayo hufikiwa mara kwa mara.

Katika suala hili, ufunguo wa msingi wa jedwali tegemezi ni wakati huo huo ufunguo wa kigeni unaorejelea ufunguo wa msingi wa jedwali kuu.

Kwa mfano, jedwali la Watumiaji linawakilisha watumiaji na lina safu wima zifuatazo:

    Kitambulisho cha mtumiaji(kitambulisho, ufunguo msingi)

    Jina (jina la mtumiaji)

Na jedwali la Blogu linawakilisha blogu za watumiaji na lina safu wima zifuatazo:

    BlogId (kitambulisho, ufunguo msingi na wa kigeni)

    Jina (jina la blogi)

Katika hali hii, safu wima ya Blogid itahifadhi thamani kutoka kwa safuwima ya Kitambulisho cha Mtumiaji kutoka kwa jedwali la watumiaji. Hiyo ni, safu wima ya BlogId itafanya kama ufunguo msingi na wa kigeni.

Uhusiano mmoja kwa wengi

Hii ndiyo aina ya kawaida ya uunganisho. Katika aina hii ya uhusiano, safu mlalo nyingi kutoka kwa jedwali la mtoto hutegemea safu moja kwenye jedwali kuu. Kwa mfano, blogu moja inaweza kuwa na makala kadhaa. Katika kesi hii, jedwali la blogi ni mzazi na jedwali la makala ni mtoto. Hiyo ni, blogi moja - nakala nyingi. Au mfano mwingine, wachezaji kadhaa wa mpira wa miguu wanaweza kucheza kwenye timu ya mpira wa miguu. Na wakati huo huo, mchezaji mmoja wa mpira anaweza kucheza tu katika timu moja kwa wakati mmoja. Hiyo ni, timu moja - wachezaji wengi.

Kwa mfano, hebu tuwe na jedwali linaloitwa Makala ambayo inawakilisha makala za blogu na inayo safu wima zifuatazo:

    Kitambulisho cha Kifungu (kitambulisho, ufunguo msingi)

    BlogId (ufunguo wa kigeni)

    Kichwa (kichwa cha makala)

    Maandishi (maandishi ya kifungu)

Katika hali hii, safu wima ya BlogId kutoka kwa jedwali la makala itahifadhi thamani kutoka kwa safuwima ya BlogiD kutoka kwa jedwali la blogu.

mahusiano mengi kwa mengi

Kwa aina hii ya uhusiano, safu moja kutoka kwa jedwali A inaweza kuhusishwa na safu nyingi kutoka kwa jedwali B. Kwa upande wake, safu moja kutoka kwa jedwali B inaweza kuhusishwa na safu nyingi kutoka kwa jedwali A. Mfano wa kawaida- wanafunzi na kozi: mwanafunzi mmoja anaweza kuhudhuria kozi kadhaa, na ipasavyo wanafunzi kadhaa wanaweza kujiandikisha katika kozi moja.

Mfano mwingine ni makala na vitambulisho: vitambulisho kadhaa vinaweza kufafanuliwa kwa makala moja, na lebo moja inaweza kuelezwa kwa makala kadhaa.

Lakini katika Seva ya SQL katika kiwango cha hifadhidata, hatuwezi kuanzisha uhusiano wa moja kwa moja wa nyingi hadi nyingi kati ya majedwali mawili. Hii inafanywa kupitia jedwali la usaidizi. Wakati mwingine data kutoka kwa jedwali hili la hatua huwakilisha chombo tofauti.

Kwa mfano, katika kesi ya vifungu na vitambulisho, basi kuwe na jedwali la Lebo ambalo lina safu wima mbili:

    TagId(kitambulisho, ufunguo msingi)

    Maandishi (maandishi ya lebo)

Pia acha kuwe na jedwali la kati ArticleTags na sehemu zifuatazo:

    TagId (kitambulisho, ufunguo msingi na wa kigeni)

    ArticleId (kitambulisho, ufunguo msingi na wa kigeni)

Kitaalam, tutapata mahusiano mawili moja hadi mengi. Safu wima ya TagId kutoka kwa jedwali la ArticleTags itarejelea safu wima ya TagId kutoka kwa jedwali la Lebo. Na safu wima ya Kitambulisho cha Kifungu kutoka kwenye jedwali la Lebo za Kifungu itarejelea safu wima ya Kitambulisho cha Kifungu kutoka kwenye jedwali la Makala. Yaani, safu wima za TagId na Kitambulisho cha Kifungu katika jedwali la Lebo za Makala zinawakilisha ufunguo msingi wa mchanganyiko na pia ni funguo za kigeni za uhusiano na jedwali la Makala na Lebo.

Uadilifu wa data marejeleo

Wakati wa kubadilisha msingi na funguo za kigeni kipengele kifuatacho kinapaswa kuzingatiwa: uadilifu wa data ya kumbukumbu(uadilifu wa marejeleo). Wazo lake la msingi ni la jedwali mbili kwenye hifadhidata zinazohifadhi data sawa ili kudumisha uthabiti. Uadilifu wa data unawakilisha uhusiano uliojengwa kwa usahihi kati ya jedwali zilizo na viungo sahihi kati yao. Ni katika hali gani uadilifu wa data unaweza kukiukwa:

    Ufutaji wa hitilafu(upungufu wa kufuta). Hutokea wakati safu mlalo imefutwa kwenye jedwali kuu. Katika kesi hii, ufunguo wa kigeni kutoka kwa meza tegemezi unaendelea kurejelea mstari uliofutwa kutoka meza kuu

    Ukosefu wa Kuingiza(upungufu wa kuingizwa). Hutokea wakati safu mlalo inapoingizwa kwenye jedwali tegemezi. Katika kesi hii, ufunguo wa kigeni kutoka kwa jedwali tegemezi haufanani na ufunguo wa msingi wa safu yoyote kutoka kwa jedwali kuu.

    Sasisha hitilafu(sasisha hali isiyo ya kawaida). Kwa hitilafu kama hiyo, safu mlalo kadhaa za jedwali moja zinaweza kuwa na data ambayo ni ya kitu kimoja. Unapobadilisha data katika safu mlalo moja, inaweza kukinzana na data katika safu mlalo nyingine.

Ufutaji wa hitilafu

Ili kutatua hitilafu ya kufuta, lazima uweke mojawapo ya vikwazo viwili kwenye ufunguo wa kigeni:

    Ikiwa safu kutoka kwa jedwali tegemezi inahitaji safu kutoka kwa jedwali kuu, basi ufutaji wa kuteleza umewekwa kwa ufunguo wa kigeni. Hiyo ni, wakati safu inafutwa kutoka kwenye meza kuu, kufuta hutokea kamba inayohusiana(safu) kutoka kwa jedwali tegemezi.

    Ikiwa safu kutoka kwa jedwali tegemezi hairuhusu uhusiano wowote na safu kutoka kwa jedwali kuu (yaani, uhusiano kama huo ni wa hiari), basi ufunguo wa kigeni umewekwa NULL wakati safu inayohusiana inafutwa kutoka kwa jedwali kuu. Safu wima ya ufunguo wa kigeni lazima ibatilike.

Ukosefu wa Kuingiza

Ili kutatua hitilafu ya kuingiza wakati wa kuongeza data kwenye jedwali tegemezi, safu wima inayowakilisha ufunguo wa kigeni lazima ibatilike. Na hivyo, ikiwa kitu kilichoongezwa hakina uhusiano na meza kuu, basi safu ya ufunguo wa kigeni itakuwa na thamani ya NULL.

Sasisha hitilafu

Ili kutatua tatizo la kusasisha hali mbaya, kuhalalisha hutumiwa, ambayo itajadiliwa baadaye.

Ufunguo msingi ni sifa ya kipekee kwa kila rekodi ndani ya jedwali. Ufikiaji inasaidia aina mbili za funguo za msingi: rahisi na mchanganyiko.

Katika jukumu ufunguo rahisi inaweza kuwa mojawapo ya sehemu zilizopo za jedwali, ikiwa sehemu hii haina thamani tupu au nakala. Mifano ya sehemu kama hizo inaweza kuwa nambari za gari, nambari za orodha na misimbo ya utambulisho. Ufunguo wa mchanganyiko umeundwa kama mchanganyiko wa vipengele viwili au zaidi vya data. Kwa jedwali la Wafanyakazi, kwa mfano, unaweza kutumia kinadharia mchanganyiko wa sehemu mbili, Jina la Mwisho na Jina la Kwanza, kama ufunguo msingi. Hata hivyo, inawezekana kabisa kampuni ikawa na mfanyakazi mwingine mwenye jina la kwanza na la mwisho kama mtu ambaye tayari ameajiriwa.

Ni wazi, sehemu ambayo inadai kuwa ufunguo msingi iko chini ya mahitaji magumu. Kwa hiyo, ni mazoezi ya kawaida kuunda uwanja maalum wa kutambua ambao hufanya kazi za ufunguo (kwa mfano, Kanuni ya Wateja, Kanuni ya Utaratibu). Pamoja na kuongeza ya kila mmoja ingizo jipya Thamani maalum (kawaida nambari) ambayo hutambulisha rekodi kwa njia ya kipekee huwekwa kwenye sehemu hii kwenye jedwali. KATIKA Fikia programu Nambari kama hizo zinaweza kupangwa kwa kutumia aina ya data ya Counter, ambayo inapeana kila rekodi mpya nambari yake, na kutoa mlolongo wa nambari katika nyongeza za 1 (au nasibu).

Kuna sheria za msingi ambazo zinakubaliwa kwa funguo katika Ufikiaji:

    Kwa urahisi, shamba muhimu kawaida huorodheshwa kwanza katika muundo wa meza;

    Ikiwa meza ina ufunguo wa msingi, Programu ya ufikiaji huzuia kiotomatiki nakala rudufu katika uwanja huu, au Thamani tupu(tupu);

    Fikia hupanga kiotomatiki rekodi za jedwali kwa ufunguo msingi;

    Sehemu ya ufunguo wa msingi ni faharisi inayoharakisha kupanga na kutafuta rekodi.

Ili kuweka ufunguo msingi wa jedwali na kukamilisha uundaji wake katika mwonekano wa Muundo, fuata hatua hizi:

    Katika hali ya muundo, chagua uwanja ambao utafanya kama ufunguo wa msingi;

    Bofya kitufe cha Sehemu ya Ufunguo kwenye upau wa zana wa Muumbaji wa Jedwali au chagua amri kuu ya menyu Hariri - Sehemu muhimu (ishara muhimu itaonekana upande wa kushoto karibu na jina la shamba lililochaguliwa);

    Baada ya kutaja uwanja muhimu, meza lazima ihifadhiwe, ambayo unahitaji kubofya kitufe cha Hifadhi kwenye upau wa zana wa mtengenezaji wa meza na katika dirisha linalofungua, ingiza jina la meza na ubofye kitufe cha Ok.

Ikiwa ufunguo msingi haujafafanuliwa, onyo huonekana unapoondoka kwenye hali ya kubuni, na Ufikiaji hukuhimiza kuunda sehemu muhimu kabla ya kufunga jedwali.

17. Aina za viunganisho na utekelezaji wao. Uadilifu wa marejeleo na utekelezaji wake.

Katika hifadhidata ya uhusiano, uhusiano huepuka upunguzaji wa data. Kwa mfano, ukiunda hifadhidata iliyo na maelezo kuhusu vitabu, unaweza kuishia na jedwali linaloitwa "Vitabu" ambalo huhifadhi vigezo vya kila kitabu, kama vile kichwa chake, tarehe ya kuchapishwa na mchapishaji. Kwa kuongeza, kuna pia Taarifa za ziada habari kuhusu mchapishaji ambayo unaweza kutaka kuhifadhi, kama vile nambari yake ya simu, anwani, na msimbo wa posta. Ikiwa utazihifadhi kwenye meza na vitabu, basi nambari ya simu ya mchapishaji itarudiwa kwa kila kitabu kilichochapishwa naye.

Chaguo sahihi zaidi ni kuweka habari kuhusu wachapishaji katika jedwali tofauti la "Wachapishaji". Katika kesi hii, jedwali la "Vitabu" litakuwa na viungo vya rekodi kwenye jedwali la "Wachapishaji".

Ili kudumisha usawazishaji, lazima uhakikishe uadilifu wa data kati ya majedwali ya Vitabu na Wachapishaji. Uhusiano wa uadilifu wa data hukusaidia kuhakikisha kuwa data katika jedwali moja inalingana na data katika jedwali lingine. Kwa mfano, kila kitabu katika jedwali la Vitabu kinahusishwa na mchapishaji mahususi katika jedwali la Wachapishaji. Haiwezekani kuongeza kitabu kwenye jedwali kwa mchapishaji ambaye hayuko kwenye hifadhidata.

Aina za uhusiano kati ya meza

Mawasiliano hufanywa kwa kulinganisha data katika nguzo muhimu; kawaida hizi ni safu wima ambazo ziko kwenye jedwali zote mbili majina sawa. Mara nyingi, ufunguo wa msingi wa jedwali moja, ambayo ina kitambulisho cha kipekee kwa kila safu, inalinganishwa na ufunguo wa kigeni wa jedwali lingine. Kwa mfano, kila kichwa unachouza kinaweza kuhusishwa na kiasi cha mauzo yake kwa kuunda safu wima ya Kitambulisho cha Kichwa katika jedwali la Vitabu (ufunguo msingi) na safu wima ya Kitambulisho cha Kichwa katika jedwali la Mauzo (ufunguo wa kigeni).

Kuna aina tatu za uhusiano kati ya meza. Aina ya uhusiano unaoundwa inategemea jinsi safu wima zinazohusiana zinavyofafanuliwa.

Mahusiano ya mtu mmoja kwa wengi

Uhusiano wa mtu mmoja kwa wengi ndio aina ya kawaida ya uhusiano. Kwa uhusiano kama huo, kila safu ya jedwali A inaweza kuendana na safu nyingi za jedwali B, lakini kila safu ya jedwali B inaweza kuendana na safu moja tu ya jedwali A. Kwa mfano, uhusiano kati ya nyingi umeanzishwa kati ya jedwali. “Wachapishaji” na “Vitabu”: kila mmoja wa wachapishaji anaweza kuchapisha vitabu vingi, lakini kila kitabu kinachapishwa na mchapishaji mmoja tu.

Uhusiano wa mtu mmoja hadi wengi huundwa wakati safu wima moja tu zinazounganishwa ina kizuizi cha kipekee au ni ufunguo msingi.

Katika Ufikiaji wa Microsoft, upande wa uhusiano kati ya wengi ambao ufunguo wa msingi unalingana unawakilishwa na ishara muhimu. Upande wa uhusiano ambao ufunguo wa kigeni unalingana unaonyeshwa na ishara isiyo na mwisho.

Mahusiano ya wengi kwa wengi

Wakati wa kuanzisha uhusiano wa wengi kwa wengi, kila safu katika jedwali A inaweza kuendana na safu nyingi kwenye jedwali B na kinyume chake. Uhusiano huo unaundwa kwa kutumia meza ya tatu, inayoitwa meza ya makutano, ambayo ufunguo wa msingi una funguo za kigeni zinazohusiana na meza A na B. Kwa mfano, uhusiano wa wengi hadi wengi huanzishwa kati ya meza "Waandishi" na "Vitabu". ”, ikifafanuliwa kwa kutumia aina ya uhusiano "moja hadi nyingi" kati ya kila jedwali hili na jedwali la "Waandishi wa Vitabu". Ufunguo msingi wa jedwali la BookAuthors ni mchanganyiko wa safu wima "Author_ID" (ufunguo msingi wa jedwali la waandishi) na "Book_ID" (ufunguo msingi wa jedwali la mada).

Viunganisho vya moja kwa moja

Wakati wa kuanzisha uhusiano wa moja kwa moja, kila safu ya jedwali A inaweza kuendana na safu moja tu ya jedwali B na kinyume chake. Uhusiano wa moja kwa moja unaundwa wakati safu wima zote mbili zinazohusiana ni funguo msingi au zina vikwazo vya kipekee.

Aina hii ya uhusiano haitumiki sana kwa sababu katika hali hii data inayounganishwa inaweza kuhifadhiwa katika jedwali moja. Unaweza kutumia uhusiano wa mtu-mmoja katika kesi zifuatazo:

Ili kugawanya jedwali ambalo lina safu wima nyingi sana.

Kutenga sehemu ya jedwali kwa sababu za kiusalama.

Kuhifadhi data ya matumizi ya muda mfupi ambayo inaweza kufutwa kwa urahisi zaidi kwa kufuta jedwali.

Kuhifadhi data ambayo ni muhimu tu kwa sehemu ndogo ya jedwali kuu.

Katika Ufikiaji wa Microsoft, upande wa uhusiano wa moja hadi moja ambao ufunguo wa msingi unalingana unawakilishwa na ishara muhimu. Chama ambacho ufunguo wa kigeni unafanana pia unaonyeshwa na ishara muhimu.

Kuunda uhusiano kati ya meza

Wakati wa kuanzisha uhusiano kati ya meza, nyanja zinazohusiana hazipaswi kuwa na majina sawa. Walakini, lazima ziwe na aina sawa ya data, isipokuwa sehemu ambayo ni ufunguo msingi ni wa aina ya Counter. Sehemu ya Hesabu inaweza tu kuhusishwa na sehemu ya Nambari ikiwa sifa ya FieldSize ya kila moja imewekwa kwa thamani sawa. Kwa mfano, unaweza kuunganisha safu wima za Aina za Kaunta na Nambari ikiwa sifa ya FieldSize ya kila moja imewekwa kuwa Nambari Mrefu. Hata kama safu wima zote mbili zinazounganishwa ni za aina ya Nambari, thamani ya kipengele cha FieldSize kwa sehemu zote mbili lazima iwe sawa.