PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Klucze obce odwołujące się do innych kluczy obcych w PostgreSQL

Ograniczenie klucza obcego nie ma znaczenia, czy odwoływane kolumny odwołują się do innej kolumny. Ale wskazane kolumny muszą być wyjątkowym. Tak mówi komunikat o błędzie (dość wyraźnie).

Brakuje Ci klucza obcego ograniczenie może opierać się na wielu kolumnach . To powinno działać:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Wymiana:

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

Krótka forma składni (REFERENCES submission ) jest możliwe, ponieważ odwołujesz się do klucza podstawowego, który jest domyślny.

Dodatkowo możesz uprościć:make submission.num klucz podstawowy pojedynczej kolumny, usuń nadmiarowe kolumny user_id i assignment_id z correction i zmniejsz ograniczenie fk do (num) - jak omówiono w @Odpowiedź Tima .

Dopóki masz ograniczenie wielokolumnowe fk, rozważ NOT NULL ograniczenia na każdej z kolumn odniesienia (jak skomentował @joop). W przeciwnym razie jedna lub więcej wartości NULL w kolumnach odniesienia pozwala uciec od ograniczenia fk z domyślnym MATCH SIMPLE zachowanie. Może to być zamierzone lub nie, zazwyczaj nie .
Alternatywnie rozważ MATCH FULL dla wielokolumnowych ograniczeń fk, aby zezwolić na to tylko wtedy, gdy wszystkie kolumny odniesienia mają wartość NULL. Szczegóły:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL psycopg2 Python3.7.4 UnicodeDecodeError:kodek „ascii” nie może dekodować byte

  2. wybierz promień z ST_MinimumBoundingRadius

  3. Nie można otworzyć połączenia spowodowanego tym, że ten zestaw wyników jest zamknięty

  4. pg_ctl:błąd podczas ładowania bibliotek współdzielonych:libpq.so.5

  5. org.postgresql.util.PSQLException:FATAL:brak wpisu pg_hba.conf dla hosta