Ik gebruik geen phpmyadmin, maar ik zou beginnen met
- een unieke beperking op subject.name,
- een unieke beperking voor het paar {teachers.name, docenten.subject_id},
- een unieke beperking voor {events.venue, events.subject_id, events.teacher_id},
- een unieke beperking voor het paar {teachers.id, docenten.subject_id}.
De eerste drie hebben te maken met identiteit; met de laatste kun je {teachers.id, docenten.subject_id} targeten met een externe sleutelbeperking.
In het algemeen zijn de namen van mensen niet uniek. Dus je zou twee docenten met dezelfde naam hebben die hetzelfde vak doceren. Hoe u dat soort problemen kunt aanpakken, is afhankelijk van de toepassing.
Dan buitenlandse sleutels
- van docenten.subject_id naar subject.id, en
- van {events.teacher_id, events.subject_id} tot {teachers.id, docenten.subject_id}
Dat geeft je in ieder geval een fout als je probeert een leraar met het verkeerde onderwerp in evenementen in te voegen.
U moet de INNODB-engine gebruiken om externe sleutelbeperkingen af te dwingen. Andere engines zullen ze ontleden, maar negeren ze.
De FOREIGN KEY- en REFERENCES-clausules worden ondersteund door de InnoDBstorage-engine, die ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (...) REFERENCES ... (...) implementeert. Zie Paragraaf 14.6.6, “InnoDBand FOREIGN KEY-beperkingen”. Voor andere opslag-engines worden de clausules geparseerd maar genegeerd.