sql >> Databáze >  >> RDS >> PostgreSQL

Cizí klíče odkazující na jiné cizí klíče v PostgreSQL

Omezení cizího klíče se nestará o to, zda odkazovaný sloupec (sloupky) odkazuje na jiný sloupec sám. Odkazované sloupce však musí buď jedinečný. To vám říká chybová zpráva (zcela jasně).

Chybí vám, že cizí klíč omezení může být založeno na více sloupcích . Mělo by to fungovat:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Nahrazení:

FOREIGN KEY (num) REFERENCES submission(num),
FOREIGN KEY (user_id) REFERENCES submission(user_id),
FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

Krátká forma syntaxe (REFERENCES submission ) je možné, protože odkazujete na primární klíč, který je výchozí.

Navíc můžete zjednodušit:vytvořte submission.num primární klíč sinlge-column, vynechte nadbytečné sloupce user_id a assignment_id z correction a omezit fk omezení na pouhé (num) - jak je popsáno v @Timova odpověď .

Pokud máte vícesloupcové omezení fk, zvažte NOT NULL omezení na každém z odkazujících sloupců (jak komentoval @joop). Jinak jedna nebo více hodnot NULL v odkazujících sloupcích umožňuje uniknout omezení fk s výchozí MATCH SIMPLE chování. To může, ale nemusí být zamýšleno, obvykle to není .
Alternativně zvažte možnost MATCH FULL pro omezení fk s více sloupci to povolí pouze v případě, že všechny odkazující sloupce mají hodnotu NULL. Podrobnosti:



  1. Najít změněné řádky (složený klíč s nulami)

  2. 12c Automatické vyplnění sloupce se sekvenční hodnotou

  3. Uzavření sady výsledků streamování (pomocí mysql jdbc) trvá dlouho

  4. Používejte relační databáze MySQL na Ubuntu 9.10 (Karmic)