phpMyAdmin
 sql >> Base de Dados >  >> Database Tools >> phpMyAdmin

Como definir uma chave estrangeira que depende da relação de outras duas tabelas?


Eu não uso phpmyadmin, mas eu começaria com
  • uma restrição exclusiva em subject.name,
  • uma restrição exclusiva no par {teachers.name, teacher.subject_id},
  • uma restrição exclusiva em {events.venue, events.subject_id, events.teacher_id},
  • uma restrição única no par {teachers.id, teacher.subject_id}.

Os três primeiros têm a ver com identidade; o último permite segmentar {teachers.id, teacher.subject_id} com uma restrição de chave estrangeira.

No caso geral, os nomes das pessoas não são únicos. Então você poderia tem dois professores com o mesmo nome que ensinam a mesma matéria. Como você pode abordar esse tipo de problema depende do aplicativo.

Então chaves estrangeiras
  • de teacher.subject_id para subject.id e
  • de {events.teacher_id, events.subject_id} para {teachers.id, teacher.subject_id}

Isso pelo menos lhe dará um erro se você tentar inserir nos eventos um professor com a matéria errada.

Você precisa usar o mecanismo INNODB para impor restrições de chave estrangeira. Outros motores irão analisá-los, mas ignorá-los.

As cláusulas FOREIGN KEY e REFERENCES são suportadas pelo mecanismo InnoDBstorage, que implementa ADD [CONSTRAINT [símbolo]] FOREIGN KEY[index_name] (...) REFERENCES ... (...). Consulte a Seção 14.6.6, “Restrições de InnoDBand FOREIGN KEY”. Para outros mecanismos de armazenamento, as cláusulas são analisadas, mas ignoradas.