У вас все хорошо, кроме таблицы school_faculty
.Было бы лучше использовать следующую схему:
CREATE TABLE school_faculty (
id PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(45),
universityID INT,
UNIQUE (name, universityID),
FOREIGN KEY (universityID) REFERENCES university (id)
) Engine=InnoDB;
Лучше использовать целочисленный столбец в качестве PK вместо составного ключа.В таблицах InnoDB PK представляет собой кластерный индекс , поэтому использование наименьшего типа данных для PK означает, что MySQL может считывать больше данных из индекса за сканирование.В большинстве случаев лучше, чтобы первичный ключ имел автоинкремент, что позволяет легко упорядочить (они в основном уже упорядочены).
Кроме того, вторичные (некластеризованные) индексы хранят данные с ПК.Использование меньшего типа означает, что вторичные индексы занимают меньше места.Любой запрос, использующий вторичный индекс, должен использовать PK для доступа к фактическим данным строки, поэтому он будет использовать все, что сокращает время доступа через PK.
Вы также должны добавить уникальный ключ для отдела (имя, schoolfacultyID) для предотвращения дублирования кафедр на данном факультете.
Надеюсь, это поможет.