Referanseintegritet

Referanseintegritet

Referensiell integritet er diskutert i denne opplæringen i relasjonsdatabasekonteksten. Referensiell integritet er en dataegenskap som sier at alle referanser er gyldige. To bord er her. Den ene kalles den refererte eller foreldremessige tabellen. Denne refererte tabellen har en primærnøkkel, som kan bestå av en eller flere kolonner. Den andre tabellen har en fremmed nøkkel hvis verdier er de samme som for den primære nøkkelen til den refererte tabellen. Den andre tabellen blir referert til som et barnebord til overordnede bord.

Antall kolonner som utgjør den utenlandske nøkkelen i barnebordet er det samme som de som utgjør den primære nøkkelen i det refererte (overordnet) tabellen. Alle de utenlandske nøkkelverdiene finnes i kolonnen til den primære nøkkelen. Verdiene i den utenlandske nøkkelkolonnen kan imidlertid gjenta seg i barnebordet.

Barnebordet har sin egen primære nøkkel som er forskjellig fra den utenlandske nøkkelkolonnen som den har. Barnebordet kalles også referansebordet.

"Alle referanser er gyldige" betyr at en fremmed nøkkel i barnebordet peker på en rad i den refererte tabellen. Den utenlandske nøkkelen i barnebordet og den primære nøkkelen i den refererte (overordnet) tabellen er den samme verdien. Mer enn en fremmed nøkkel i barnebordet kan peke på bare en rad i den refererte tabellen.

Denne artikkelen forklarer begrensningene som er naturlig assosiert med den utenlandske nøkkelen til barnebordet og den samme primære nøkkelen til den refererte tabellen. Hvis begrensningene blir respektert, danner dataene (tilsvarende rader) i begge tabellene integritet, uten feil, alt er like; Derav begrepet referanseintegritet.”

Illustrasjon med to bord

Tabellnotasjonen til de to tabellene kan være:

Salg (SaleID, Datesold, CustomerId, ansatt)


og

Kunder (CustomerId, CustomerName, Phone, Address, City, Region, PostalCode, Country)


CustomerID i salgstabellen er en fremmed nøkkel med en strek understrek. CustomerID i kundetabellen er en primærnøkkel med en enkelt understrek. Den primære nøkkelen for salgstabellen er SaleID, med en enkelt understrek. SaleID i salgstabellen avhenger av CustomerID, så vel som det avhenger av Datesold -attributtet og ansattes attributt (kolonne).

Tabellene med data er som følger:

Salgstabell

Saleid datoer Kunde ID ansatt
1 07/06/23 1 John Jones
2 07/07/23 2 Barbara Baker
3 07/07/23 2 Peter Lewis
4 07/08/23 1 John Jones
5 07/09/23 3 Barbara Baker
6 07/10/23 1 Barbara Baker
7 07/11/23 1 Barbara Baker
8 07/12/23 1 John Jones
9 07/13/23 2 Peter Lewis

Kundebord



For begge bordene går kunder (enkeltpersoner) til en butikk og kjøper forskjellige produkter på forskjellige dager. Produktene som er kjøpt vises ikke. Kundebordet har adressene til kundene i samme by. Salgstabellen har navnene på de ansatte som betjente de enkelte kundene og har andre data.

I salgstabellen er CustomerID en fremmed nøkkel. I kundens tabell er CustomerID en primærnøkkel. Hver utenlandsk nøkkel i salgstabellen skjer i kundetabellen en gang. Det vil si at hver utenlandsk nøkkel i salgstabellen refererer til en primærnøkkel og refererer derfor til en distinkt rad i kundetabellen. Data (referanse) integritet mislykkes hvis dette ikke er tilfelle.

Nullverdi og utenlandske nøkler

En fremmed nøkkel i barnebordet må referere til en rad, gjennom den primære nøkkelen til overordnede tabellen. Alle de primære nøklene til overordnede bord er unike. De utenlandske nøklene i den utenlandske nøkkelkolonnen i barnebordet, som alle finnes i foreldrebordet, trenger ikke å være unik. Repetisjoner av utenlandske nøkler bør forventes der. Over er salgstabellen et barnebord, og kundetabellen er et overordnet bord. Tenk på disse to tabellene som tilhørende databasen til en nærbutikk. Kundene er enkeltpersoner som kjøper fra butikken.

Se for deg at kunden med CustomerID 2 har fornærmet deg, butikkens innehaver; For eksempel prøvde han å stjele, og du har forbød ham fra å komme til å kjøpe i butikken din igjen. Dette betyr at navnet hans må fjernes fra listen over kunder. Hans kjøp i salgsbordet er i fortiden, skjedde uten noe problem, og må derfor forbli.

I dette tilfellet må alle CustomerID på 2 i salgstabellen erstattes av NULL (ingenting), noe som betyr ingen henvisning til kundens tabell på en rad som er slettet. For ovennevnte kundebord vil to rader forbli etter at raden hans (CustomerId og resten av legitimasjonen hans) er blitt slettet.

Det er to måter å annullere raden i kundetabellen, av datamaskinen (databasestyringssystem) som følger:

    1. Faktisk å slette raden, og de gjenværende CustomerID-ene er 1 og 3, og mangler den auto-inkrementerte verdien på 2 og dens rad;
    2. Egentlig å slette raden og omgå resten av radene under den fra 2, auto-sprøyting, og det mangler ingen 2 i kundens tabell. I dette tilfellet er alle de utenlandske nøklene fra 3 i salgstabellen omnummerert, automatisk deler seg fra 2, og det mangler ingen 2 i salgstabellen.


Uansett hvilken måte som er valgt, forblir nullverdien i salgstabellen som den utenlandske nøkkelen for den slettede kunden tilsvarende rader. Nullverdien Referanser (peker på) ingen rad i kundens tabell.

Så av slike grunner kan en utenlandsk nøkkel ha en nullverdi. Det vil si med referanseintegritet å gjøre!

Oppdatering av barnet og foreldrebordene

Oppdatering betyr å endre. Endring av en hvilken som helst celle i tabellen for barn (salg) (til og med SaleID), bortsett fra den utenlandske nøkkelen, forårsaker egentlig ingen skade på barnebordet eller overordnede (kunder) tabellkorrespondanser. For eksempel, hvis datoen ble feilaktig skrevet ved en feiltakelse, bør riktig dato skrives inn.

Endring av en hvilken som helst celle i foreldre (kunder) -tabellen, bortsett fra den primære nøkkelen, forårsaker egentlig ingen skade på overordnede (kunder) -tabellen eller tabellen for barn (salg). For eksempel, hvis kunden har endret gaten sin, men fremdeles er i nabolaget, skader ikke adresse i kundebordet noen skade på barnet og overordnede korrespondanser.

Å endre verdien av den utenlandske nøkkelen i barnebordet betyr imidlertid at alle de samme utenlandske nøkkelverdiene i barnebordet må endres til den aktuelle verdien, og den som tilsvarer primærnøkkelverdien i overordnet tabell må også endres , til den samme verdien også. Dette er kaskader.

Kan en nullverdi utenlandsk nøkkel endres? - Vel, ja: Hvis den ovennevnte kunden kommer tilbake etter seks måneder og beklager, og du, innehaver, tilgir ham, og hvis bare radene hans i salgstabellen hadde nullverdier, vil navnet hans og legitimasjonen bli lagt inn i den Kundebord, nederst, med en ny CustomerID; Og alle nullverdiene som utenlandske nøkler i tabellen for barn (salg), vil bli erstattet av denne nye CustomerId. Imidlertid, hvis det var andre rader i barnebordet med nullverdier som ikke tilhørte ham, vil alle nullverdiene, inkludert hans, forbli; Og alt hans nye salg vil bli lagt inn i salgstabellen på nytt, nederst på salgstabellen.

Slette i barn- og foreldrebordene

Det er ikke fornuftig å slette noen kolonnecelleverdi i barnet eller overordnede tabellen med mindre det er for en kolonne hvis celleverdi kan være tom. Tom betyr ikke null. Tom betyr tomrom.

Imidlertid kan en hel rad i barnebordet eller overordnede bord slettes. Anta at det er noen falske rader i tabellen for barn (salg); Hvis disse radene blir slettet (inkludert Sale -ens og utenlandske nøkler), vil det ikke være noe problem. Kundene har enten andre virkelige rader i barnebordet eller har bare ikke vist sin vilje til å kjøpe fra butikken og har aldri kjøpt noe. - De vil kjøpe en dag i nær fremtid.

På den annen side, hvis det er en falsk kunde med falske salg når raden hans i kundebordet blir slettet, må alle hans falske salgsrader i salgstabellen slettes. Dette er kaskader. Dette kan skje når en ansatt gjør virkelig salg, registrerer falsk informasjon og signerer som en annen ansatt i samme tabell. Siden de tilsvarende utenlandske tastene i barnebordet er de samme som den primære nøkkelen i overordnede tabellen, kobler den samme verdien de to tabellene.

For å løse dette problemet, bør hver ansatt ha sin egen salgsøvelse hvis datamaskinen ikke brukes. Hvis datamaskinen brukes, bør hver ansatt ha et påloggingsbrukernavn og passord til databasestyringssystemets applikasjon, som automatisk registrerer ansattes navn mot alle hans handlinger.

Sitater

Følgende tre avsnitt er sitater fra Wikipedia:

“Referensiell integritet er en egenskap til data som sier at alle referanser er gyldige.

I forbindelse med relasjonsdatabaser krever det at hvis en verdi av en attributt (kolonne) i en relasjon (tabell) refererer til en verdi av et annet attributt (enten i samme eller en annen relasjon), må den refererte verdien eksistere.

Referensiell integritet er et databasekonsept som sikrer at forholdet mellom tabeller forblir konsistente. Når en tabell har en fremmed nøkkel til en annen tabell, sier begrepet referanseintegritet at du kanskje ikke legger til en post til tabellen som inneholder den utenlandske nøkkelen med mindre det er en tilsvarende post i den koblede tabellen.”

Referensielle handlinger

Uten datamaskinen er det vanskelig å håndheve referanseintegritet. Dette fører til regnskapsfeil. Med datamaskinen kan referanseintegritet håndheves ved å håndheve Cascading og andre handlinger ved å programmere databasestyringssystemet.

Kaskade

Dette betyr: oppdatering eller slette kaskader.

BEGRENSE

Dette betyr: Ikke oppdater eller slett de tilkoblede radene i barnet og overordnede bordet.

INGEN HANDLING

Begrens sjekker tilkoblingene til radene i begge tabellene før du prøver å oppdatere eller slette. Ingen handling ligner på Restrict, men prøver å oppdatere eller slette før du sjekker tilkoblingene i begge tabellene.

Begrensning vil utstede en feilmelding om at et forsøk på å oppdatere eller slette en rad ble gjort, til tross for at det er en tilsvarende rad i den andre tabellen som ikke ville blitt oppdatert eller slettet. Ingen handlinger ville oppdatere eller slette raden og deretter utstede en feilmelding som raden ble oppdatert eller slettet, til tross for at det finnes en tilsvarende rad i den andre tabellen. Selvfølgelig vil dette føre til feil regnskap med mindre brukeren var i ferd med å håndtere begge tabellendringer manuelt.

Hvis det ikke finnes noen tilsvarende rad i den andre tabellen, kan du oppdatere eller slette raden, enten håndhevelsen var begrenset eller ingen handling.

Sett null

Med denne handlingen håndhevet, hvis en rad i overordnede tabellen blir slettet, vil alle de utenlandske nøklene til de tilsvarende radene i barnebordet bli satt til null.

SETT STANDARD

Med denne handlingen håndhevet, hvis en rad i overordnet tabell blir slettet, vil alle de utenlandske nøklene til de tilsvarende radene i barnebordet bli satt til standardverdien valgt av databasebrukeren.

Konklusjon

Referensiell integritet er et databasekonsept som sikrer at forholdet mellom tabeller forblir konsistente. Når en tabell har en fremmed nøkkel til en annen tabell, sier begrepet referanseintegritet at du kanskje ikke legger til en post til tabellen som inneholder den utenlandske nøkkelen med mindre det er en tilsvarende post i den koblede tabellen.

Når bordene holdes i hovedbøker, blir det vanskelig å håndheve referanseintegritet. Imidlertid, når en DBMS holder tabellene i en datamaskin, håndheves disse referansehandlingene av en programmerer.