Citater fra C.J.Date "An Introduction to Database Systems" kapitel 5:

5 Relationel dataintegritet: Kandidatnøgler og relaterede emner

5.1 Introduktion

Databasedefinitionen må nødvendigvis udvides, så den også inkluderer visse integritetsregler, som har til formål at informere DBMS om visse begrænsninger der gælder i den virkelige verden, så man kan forhindre umulige værdier i at forekomme. [110]

Enhver given integritetsregel er i sagens natur nødt til at være databasespecifik, da den netop vedrører en bestemt database. Den relationelle model omfatter to generelle integritetsfaciliteter: kandidatnøgler (primærnøgler) og fremmednøgler. [111]

Afledte relationer er også underlagt integritetsregler. Afledte relationer arver automatisk visse integritetsregler fra de relationer, som de er afledt af. Men det er muligt, at nogle afledte relationer er underlagt yderligere integritetsregler udover de regler, som de automatisk arver. [111-112]

5.2 Kandidatnøgler

Primærnøgler er i virkeligheden bare et specialtilfælde af det mere fundamentale begreb kandidatnøgler. En kandidatnøgle for en relation er en delmængde af relationens attributter, hvorom det gælder, at der ikke findes to tupler med samme værdi for kandidatnøglen, og at der ikke findes en delmængde af kandidatnøglen, som vil være en unik identifikation af relationen. [112]

Selvom det i praksis som regel er sådan, at de fleste relationer har nøjagtig én kandidatnøgle, er det selvfølgelig muligt at der kan forekomme mere end en. [113]

Kandidatnøgler er defineret som sæt af attributter. En kandidatnøgle som involverer mere end en attribut siges at være sammensat, hvorimod kandidatnøgler, som involverer nøjagtig en attribut, siges at være simple. [114]

Kravet om at en kandidatnøgle ikke kan reduceres betyder, at en kandidatnøgle ikke inkluderer nogen attribut, som er irrelevant for det formål at nøglen skal tjene som unik identifikation. [114]

Hvad skal kandidatnøgler bruges til?

Årsagen til at kandidatnøgler er så vigtige er, at de udgør den grundlæggende adresseringsmekanisme på tupel-niveau i et relationelt system. [114]

Kandidatnøglerne er lige så fundamentale for en succesfuld funktion af et relationelt system som lageradresserne er for funktionen i den underliggende maskine. [115]

5.3 Primærnøgler og alternative nøgler

Det er muligt (omend usædvanligt) for en given basisrelation at have mere end én kandidatnøgle. I et sådant tilfælde har den relationelle model historisk set krævet at nøjagtig en af disse kandidatnøgler blev udvalgt som primærnøglen for basisrelationen. De øvrige kandidatnøgler kaldes så for alternative nøgler. [115]

Nu insisterer man imidlertid ikke længere på at enhver basisrelation skal have en primærnøgle. Tværtimod kræver man nu blot at enhver basisrelation skal have mindst en kandidatnøgle. [116]

5.4 Fremmednøgler

En fremmednøgle i relationen R2 defineres som en delmængde af attributterne i R2, hvorom det gælder, at der eksisterer en basisrelation R1 med en kandidatnøgle, sådan at enhver aktuel værdi i fremmednøglen i R2 modsvares af en tilsvarende værdi i kandidatnøglen i R1. [117]

Det følger af definitionen, at enhver værdi for en given fremmednøgle skal forekomme som en værdi i den tilsvarende kandidatnøgle. [117]

En værdi i en fremmednøgle repræsenterer en reference til den tupel, der indeholder den tilsvarende værdi i kandidatnøglen. Det problem at sikre, at databasen ikke indeholder ugyldige værdier i fremmednøglen, er derfor også kendt som referenceintegritetsproblemet. [118]

En given relation kan selvfølgelig både optræde som refereret og refererende relation. [119]

En relation kan indeholde en fremmednøgle, som peger på en kandidatnøgle i samme relation. En sådan relation kaldes en selv-refererende relation. [119]

Referenceintegritet

Databasen må ikke indeholde nogen værdi for en fremmednøgle, som ikke matcher en kandidatnøgle. [120]

5.5 Regler om fremmednøgler

Det bør være muligt for brugeren at specificere, hvilke operationer der skal afvises, og hvilke der skal accepteres. Med hensyn til de afviste operationer skal brugeren kunne specificere, hvilke kompenserende operationer, der skal udføres af systemet.

Hvad skal der ske i tilfælde af at man forsøger at slette målet for en fremmednøgle reference?

Hvad skal der ske i tilfælde af at man forsøger at ændre målet (kandidatnøglen) for en fremmednøgle reference?

5.6 Nulls

Formålet med nulls er at de skal være en mulighed for at løse problemet med manglende information. Hvis nulls ikke er tilladt for en given attribut, vil systemet afvise at indføre null i den pågældende position. [123]

5.7 Kandidatnøgler og nulls

Ingen komponent i primærnøglen for en basisrelation må indeholde nulls. Det modsvares af, at objekter i den virkelige verden kan adskilles fra hinanden - d.v.s. at de kan identificeres på en eller anden måde. [124]

Måske ville det være bedre at droppe hele ideen om nulls, og i stedet indføre defaultværdier til at repræsentere manglende informationer. [126]

5.8 Fremmednøgler og nulls

I den relationelle model har det historisk set været tilladt, at nulls kunne optræde i fremmednøgle positioner. [126]

Databasedesigneren skal for hver enkelt fremmednøgle beslutte, om der kan accepteres nulls i den pågældende fremmednøgle. [127]

Også her ville det være bedre at bruge defaultværdier. [128]

Indlagt 25 april 1997