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

Wie setze ich einen Fremdschlüssel, der von der Beziehung zweier anderer Tabellen abhängt?

Ich verwende phpmyadmin nicht, aber ich würde mit

beginnen
  • eine eindeutige Einschränkung für subjects.name,
  • eine eindeutige Einschränkung für das Paar {teachers.name, Teachers.subject_id},
  • eine eindeutige Einschränkung für {events.venue, events.subject_id, events.teacher_id},
  • eine eindeutige Einschränkung für das Paar {teachers.id, Teachers.subject_id}.

Die ersten drei haben mit Identität zu tun; Mit der letzten können Sie {teachers.id, Teachers.subject_id} mit einer Fremdschlüsseleinschränkung anvisieren.

Im Allgemeinen sind die Namen von Personen nicht eindeutig. Sie könnten es also zwei gleichnamige Lehrer haben, die das gleiche Fach unterrichten. Wie Sie diese Art von Problem angehen können, ist anwendungsabhängig.

Dann Fremdschlüssel

  • von Teachers.subject_id zu Subjects.id und
  • von {events.teacher_id, events.subject_id} zu {teachers.id, Teachers.subject_id}

Das gibt Ihnen zumindest einen Fehler, wenn Sie versuchen, einen Lehrer mit dem falschen Fach in Veranstaltungen einzufügen.

Sie müssen die INNODB-Engine verwenden Fremdschlüsseleinschränkungen zu erzwingen. Andere Engines werden sie parsen, aber ignorieren.

Die Klauseln FOREIGN KEY und REFERENCES werden von der InnoDBstorage-Engine unterstützt, die ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (...) REFERENCES ... (...) implementiert. Siehe Abschnitt 14.6.6, „InnoDBand FOREIGN KEY-Einschränkungen“. Bei anderen Speicher-Engines werden die Klauseln analysiert, aber ignoriert.