Nie używam phpmyadmina, ale zacznę od
- niepowtarzalne ograniczenie dotyczące nazwy subject.name,
- unikalne ograniczenie w parze {teachers.name, teacher.subject_id},
- unikalne ograniczenie dotyczące {events.venue, events.subject_id, events.teacher_id},
- unikalne ograniczenie w parze {teachers.id, teacher.subject_id}.
Pierwsze trzy dotyczą tożsamości; ostatni pozwala na kierowanie {teachers.id, teacher.subject_id} z ograniczeniem klucza obcego.
W ogólnym przypadku imiona osób nie są niepowtarzalne. Więc możesz mieć dwóch nauczycieli o tym samym nazwisku, którzy uczą tego samego przedmiotu. To, jak możesz podejść do tego rodzaju problemu, zależy od aplikacji.
Następnie klucze obce
- od teacher.subject_id do objects.id i
- od {events.teacher_id, events.subject_id} do {teachers.id, teacher.subject_id}
To przynajmniej da ci błąd, jeśli spróbujesz wstawić do wydarzeń nauczyciela z niewłaściwym przedmiotem.
Musisz użyć silnika INNODB aby wymusić ograniczenia klucza obcego. Inne silniki będą je analizować, ale zignoruj je.
Klauzule FOREIGN KEY i REFERENCES są obsługiwane przez silnik InnoDBstorage, który implementuje ADD [CONSTRAINT [symbol]] FOREIGN KEY[nazwa_indeksu] (...) REFERENCES... (...). Patrz Sekcja 14.6.6, „Ograniczenia dotyczące klucza obcego InnoDBand”. W przypadku innych silników pamięci masowej klauzule są analizowane, ale ignorowane.