sql >> Base de Datos >  >> Database Tools >> phpMyAdmin

¿Cómo establecer una clave externa que depende de la relación de otras dos tablas?

No uso phpmyadmin, pero comenzaría con

  • una restricción única en subject.name,
  • una restricción única en el par {teachers.name, teacher.subject_id},
  • una restricción única en {events.venue, events.subject_id, events.teacher_id},
  • una restricción única en el par {teachers.id, teacher.subject_id}.

Los tres primeros tienen que ver con la identidad; el último le permite apuntar a {teachers.id, teacher.subject_id} con una restricción de clave externa.

En el caso general, los nombres de las personas no son únicos. Así que podrías tener dos profesores con el mismo nombre que enseñan la misma materia. La forma en que podría abordar ese tipo de problema depende de la aplicación.

Entonces claves foráneas

  • de profesores.subject_id a asignaturas.id, y
  • de {events.teacher_id, events.subject_id} a {teachers.id, teacher.subject_id}

Eso al menos le dará un error si intenta insertar en los eventos a un profesor con la materia equivocada.

Debe usar el motor INNODB para hacer cumplir las restricciones de clave externa. Otros motores los analizarán, pero los ignorarán.

Las cláusulas FOREIGN KEY y REFERENCES son compatibles con el motor de almacenamiento InnoDB, que implementa ADD [CONSTRAINT [símbolo]] FOREIGN KEY[index_name] (...) REFERENCES ... (...). Consulte la Sección 14.6.6, “Restricciones de InnoDB y FOREIGN KEY”. Para otros motores de almacenamiento, las cláusulas se analizan pero se ignoran.