I en relasjonsdatamodell er en **supernøkkel** en mengde av attributter som unikt identifiserer hver tuppel (sekvens av elementer) av en relasjon. Siden supernøkkelverdier er unike medfører det at tupler med samme supernøkkelverdi også må ha de samme ikke-nøkkel attributtverdiene. Altså er ikke-nøkkel-attributter funksjonelt avhengige av supernøkkelen.

Mengden av alle attributter er alltid en supernøkkel (den trivielle supernøkkelen). Tupler i en relasjon er per definisjon unike, med duplikater fjernet etter hver operasjon, slik at mengden av alle attributter alltid gir unike verdier for hver tuppel. En kandidatnøkkel (eller minimal supernøkkel) er en supernøkkel som ikke kan reduseres til en enklere supernøkkel ved å fjerne en attributt.

I for eksempel en ansattmodell med attributtene `ansatt-ID`, `navn`, `stilling` og `avdelings-ID` så kan man (under forutsetning at `ansatt-ID`-ene er unike) si at `ansatt-ID` kombinert med noen eller alle av de andre attributtene unikt identifiserer tuplene i tabellen. Enhver kombinasjon, som eksempelvis {`ansatt-ID`}, {`ansatt-ID`, `navn`}, {`ansatt-ID`, `navn`, `jobb`} og så videre, er en supernøkkel. {`ansatt-ID`} er en kandidatnøkkel, siden ingen delmengde av attributtene også er en supernøkkel. {`ansatt-ID`, `navn`, `stilling`, `avdelings-ID`} er den trivielle supernøkkelen.

Dersom attributt-mengden *K* er en supernøkkel av relasjonen *R* vil det til enhver tid være slik at projeksjon av *R* over *K* har samme kardinalitet som *R* selv.

Eksempel
--------

Engelske Monarker| Monarknavn | Monarknummer | Kongehus |
| --- | --- | --- |
| Edvard | II | Plantagenet |
| Edvard | III | Plantagenet |
| Rikard | III | Plantagenet |
| Henrik | IV | Lancaster |

Først listes alle de mulige mengdene med attributter:

* {}
* {monarkens navn}
* {monarknummer}
* {kongehus}
* {monarkens navn, monarknummer}
* {monarkens navn, kongehus}
* {monarknummer, kongehus}
* {monarkens navn, monarknummer, kongehus}

Deretter elimineres alle mengdene som ikke tilfredsstiller kravene for å gi en supernøkkel. For eksempel kan ikke {`monarkens navn`, `kongehus`} være en supernøkkel fordi det for disse attributtverdiene er et tilfelle (Edvard, Plantagenet) som gir to forskjellige tupler:

* (Edvard, **II**, Plantagenet)
* (Edvard, **III**, Plantagenet)

Til slutt etter eliminering sitter man igjen med de ulike mengdene av attributter som er de eneste mulige supernøklene i dette eksemplet:

* {monarkens navn, monarknummer} — (dette er også kandidatnøkkelen)
* {monarkens navn, monarknummer, kongehus}

I virkeligheten kan ikke supernøkler bestemmes bare ved å undersøke en begrenset mengde av tupler i en relasjon. En supernøkkel definerer en funksjonell avhengighet i en relasjonsmodell som gir en begrensning som må gjelde for alle mulige forekomster (instanser) av relasjoner av den gitte relasjonsmodellen (inkludert fremtidige).

Se også
-------

* Alternativ nøkkel
* Fremmednøkkel
* Kandidatnøkkel
* Primærnøkkel
* Sammensatt nøkkel

Referanser
----------

1. ↑  Date, Christopher. «Codd's First Relational Papers: A Critical Analysis» (PDF). Besøkt 4. januar 2020.
2. ↑  
*Introduction to Database Management Systems*. Tata McGraw-Hill. s. 77. ISBN 9780070591196. «no two tuples in any legal relation»
3. ↑  «An Efficient Algorithm to Compute the Candidate Keys of a Relational Database Schema».