sql >> Database teknologi >  >> RDS >> Mysql

Kun én nøgle fra sammensat primærnøgle som fremmednøgle

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.



  1. Sådan skriver du udvalgte erklæringer

  2. Manipulering af utf8mb4 data fra MySQL med PHP

  3. Eksporter SQLite-forespørgselsresultater til en CSV-fil

  4. SQL dårlig ydelse af plan for udførelse af lagrede procedurer - parametersniffing