sql >> Databáze >  >> RDS >> Mysql

Pouze jeden klíč ze složeného primárního klíče jako cizí klíč

Tato odpověď přebírá otázku „přidat cizí klíč do table3 ", což znamená, že do table3 byl přidán FK (cizí klíč). odkazující na jeden ze sloupců složeného PK (primárního klíče) table4 . Ve standardním SQL může FK odkazovat na správnou/menší podmnožinu PK.

Tato další odpověď pravděpodobně trvá „přidat cizí klíč do table3 ", což znamená, že FK byl přidán do table4 s jedním ze sloupců PK odkazujícím na table3 . Sloupec FK nastavený v tabulce je nezávislý na deklaracích PK nebo UNIQUE v něm.

Ve standardním SQL může FK odkazovat na správnou/menší podmnožinu PK.

Seznam odkazovaných sloupců musí být deklarován PRIMARY KEY nebo UNIQUE. (PRIMARY KEY vytváří omezení UNIQUE NOT NULL.) (Omezení musí být explicitní, i když jakákoliv sada sloupců NOT NULL obsahující sadu, která je UNIKÁTNÍ, musí být jedinečná.)

Bohužel MySQL vám umožňuje deklarovat FK odkazující na seznam sloupců, který není UNIKÁTNÍ. I když takový FK nebo jeden odkazující na jiné sloupce než NULL (OK ve standardním SQL) není implementován správně a samotná dokumentace to nedoporučuje:

(Můžete se zamyslet nad tím, co jsou a nejsou dobře definované operace, protože dokumentace to ve skutečnosti neobjasňuje.)

1.8.2.3 Rozdíly cizích klíčů
13.1.18 CREATE TABLE Syntaxe
13.1.18.6 Použití FOREIGN KLÍČOVÁ omezení

PS Re relační vs SQL

V relačním modelu FK odkazuje na CK (klíč kandidáta). Superklíč je jedinečná sada sloupců. CK je superklíč, který neobsahuje žádný menší superklíč. Jedna CK může být nazývána PK (primární klíč). Když se hodnoty sady sloupců musí objevit jinde, říkáme, že existuje IND (inkluzní závislost). FK je IND pro CK. Když je IND k superklíči, mohli bychom to nazvat "cizí superklíč".

SQL PK nebo UNIQUE NOT NULL vyhlásí superklíč. Je to CK, když neobsahuje menší sadu sloupců deklarovanou jako SQL PK nebo UNIQUE NOT NULL . SQL FK deklaruje cizí superklíč. Takže SQL PK může ve skutečnosti byl relační PK (potažmo CK) a UNIQUE NOT NULL mohou ve skutečnosti být CK. SQL FK k jednomu z nich ve skutečnosti je vztahový FK.



  1. Neplatný pokus o čtení, když je čtečka zavřená

  2. MYSQL vyberte počet podle hodnoty

  3. MySQL IF NOT NULL, pak zobrazte 1, jinak zobrazte 0

  4. Jak DATE() funguje v MariaDB