Не използвам phpmyadmin, но бих започнал с
- уникално ограничение за subjects.name,
- уникално ограничение за двойката {teachers.name, teachers.subject_id},
- уникално ограничение за {events.venue, events.subject_id, events.teacher_id},
- уникално ограничение за двойката {teachers.id, teachers.subject_id}.
Първите три са свързани с идентичността; последният ви позволява да се насочите към {teachers.id, teachers.subject_id} с ограничение за външен ключ.
В общия случай имената на хората не са уникални. Значи можете има двама учители с едно и също име, които преподават един и същ предмет. Начинът, по който можете да подходите към този вид проблем, зависи от приложението.
След това външни ключове
- от teachers.subject_id към subjects.id и
- от {events.teacher_id, events.subject_id} до {teachers.id, teachers.subject_id}
Това поне ще ви даде грешка, ако се опитате да вмъкнете в събития учител с грешен предмет.
Трябва да използвате двигателя INNODB за налагане на ограничения за външния ключ. Други машини ще ги анализират, но ще ги игнорират.
Клаузите FOREIGN KEY и REFERENCES се поддържат от механизма InnoDBstorage, който имплементира ADD [CONSTRAINT [символ]] FOREIGN KEY[име_индекс] (...) REFERENCES ... (...). Вижте раздел 14.6.6, „Ограничения на ВЪНШИЯ КЛЮЧ InnoDBand“. За други машини за съхранение клаузите се анализират, но се игнорират.