phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

Come impostare una chiave esterna che dipende dalla relazione di altre due tabelle?

Non uso phpmyadmin, ma inizierei con

  • un vincolo univoco su subject.name,
  • un vincolo unico per la coppia {teachers.name, insegnanti.subject_id},
  • un vincolo univoco su {events.venue, events.subject_id, events.teacher_id},
  • un vincolo unico per la coppia {teachers.id, insegnanti.subject_id}.

I primi tre hanno a che fare con l'identità; l'ultimo ti consente di scegliere come target {teachers.id, insegnanti.subject_id} con un vincolo di chiave esterna.

Nel caso generale, i nomi delle persone non sono univoci. Quindi potresti avere due insegnanti con lo stesso nome che insegnano la stessa materia. Il modo in cui potresti affrontare questo tipo di problema dipende dall'applicazione.

Quindi chiavi esterne

  • da insegnanti.subject_id a subject.id e
  • da {events.teacher_id, events.subject_id} a {teachers.id, insegnanti.subject_id}

Questo ti darà almeno un errore se provi a inserire negli eventi un insegnante con la materia sbagliata.

Devi utilizzare il motore INNODB per imporre vincoli di chiave esterna. Altri motori li analizzeranno, ma li ignoreranno.

Le clausole FOREIGN KEY e REFERENCES sono supportate dal motore InnoDBstorage, che implementa ADD [VINCENTE [simbolo]] FOREIGN KEY[nome_indice] (...) REFERENCES ... (...). Vedere Sezione 14.6.6, «Vincoli InnoDBand FOREIGN KEY». Per altri motori di archiviazione, le clausole vengono analizzate ma ignorate.