Nepoužívám phpmyadmin, ale začal bych s
- jedinečné omezení pro předměty.jméno,
- jedinečné omezení pro dvojici {teachers.name, Teachers.subject_id},
- jedinečné omezení pro {events.venue, events.subject_id, events.teacher_id},
- jedinečné omezení pro dvojici {teachers.id, Teachers.subject_id}.
První tři mají co do činění s identitou; poslední vám umožňuje cílit na {teachers.id, Teachers.subject_id} s omezením cizího klíče.
Obecně platí, že jména lidí nejsou jedinečná. Takže můžete mají dva učitele se stejným jménem, kteří vyučují stejný předmět. Jak byste k takovému problému mohli přistupovat, závisí na aplikaci.
Poté cizí klíče
- od učitelů.id_předmětu po id_předmětu a
- z {events.teacher_id, events.subject_id} do {teachers.id, Teachers.subject_id}
Pokud se pokusíte vložit do událostí učitele se špatným předmětem, dostanete alespoň chybu.
Musíte použít engine INNODB prosadit omezení cizího klíče. Jiné motory je zanalyzují, ale budou je ignorovat.
Klauzule FOREIGN KEY a REFERENCES jsou podporovány jádrem InnoDBstorage, které implementuje ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (...) REFERENCES ... (...). Viz část 14.6.6 – „Omezení ZAHRANIČNÍHO KLÍČE InnoDBand“. U ostatních úložišť jsou klauzule analyzovány, ale ignorovány.