Dette svar tager spørgsmålets "tilføj en fremmednøgle til table3
" for at betyde, at en FK (fremmednøgle) blev tilføjet i table3
henviser til en af kolonnerne i den sammensatte PK (primær nøgle) i table4
. I standard SQL kan en FK referere til en korrekt/mindre delmængde af en PK.
Dette andet svar
tager formentlig "tilføj en fremmednøgle til table3
" for at betyde, at en FK blev tilføjet i table4
med en af kolonnerne i PK-henvisningen til table3
. Et FK-kolonnesæt i en tabel er uafhængigt af eventuelle PK- eller UNIQUE-deklarationer i den.
I standard SQL kan en FK referere til en korrekt/mindre delmængde af en PK.
Den refererede kolonneliste skal erklæres PRIMÆR NØGLE eller UNIK. (PRIMÆR NØGLE opretter en UNIK IKKE NULL-begrænsning.) (Begrænsningen skal være eksplicit, selvom ethvert sæt IKKE NULL-kolonner, der indeholder et sæt, der er UNIKT, skal være unikt.)
Desværre giver MySQL dig mulighed for at erklære en FK, der refererer til en kolonneliste, der ikke er UNIK. Selvom en sådan FK eller en refererende ikke-NULL-kolonner (OK i standard SQL) ikke er implementeret korrekt, og selve dokumentationen anbefaler ikke at gøre det:
(Du kan overveje, hvad der er og ikke er de veldefinerede operationer, da dokumentationen faktisk ikke præciserer.)
1.8.2.3 Forskelle udenlandsk nøgle
13.1.18 OPRET TABEL Syntaks
13.1.18.6 Brug af UDENLANDSKE NØGLE begrænsninger
PS Re relationel vs SQL
I den relationelle model refererer en FK til en CK (kandidatnøgle). En supernøgle er et unikt søjlesæt. En CK er en supernøgle, der ikke indeholder en mindre supernøgle. Én CK kan kaldes PK (primær nøgle). Når et kolonnesæts værdier skal vises et andet sted, siger vi, at der er en IND (inklusionsafhængighed). En FK er en IND til en CK. Når en IND er til en supernøgle, kunne vi kalde det en "fremmed supernøgle".
En SQL PK
eller UNIQUE NOT NULL
erklærer en supernøgle. Det er en CK, når det ikke indeholder et mindre kolonnesæt erklæret som SQL PK
eller UNIQUE NOT NULL
. SQL FK
erklærer en udenlandsk supernøgle. Så en SQL PK kan faktisk være en relationel PK (deraf CK) og en UNIQUE NOT NULL kan faktisk være en CK. En SQL FK til en af disse er faktisk en relationel FK.