Проектирование базы данных " Расписание преподавателя"

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2023

Набросал примерную схему базы данных. Прошу подкорректировать если есть минусы с такой схемы. И помочь написать запрос на вывод расписания по имени преподавателя.

введите сюда описание изображения

Ответы

▲ 1Принят

Ну, в принципе, выглядит нормально. Пара вопросов и замечаний только возникает:

  1. В чём разница между "занятием" и "парой"? Можно ли их в 1 таблицу объединить?
  2. Почему группа, аудитория, Вид занятия не в таблице занятие?
  3. Зачем отдельная таблица для дней недели? Можно же хранить тип дня недели (0-6).
  4. Зачем отдельная таблица для номера недели? Его тоже можно в расписании хранить.
  5. Лучше изменить названия таблиц на множественные числа Преподаватель -> Преподаватели, Пара -> Пары и т.д.
  6. Что значит вывод расписания? В консоль? Или вы используете доп. язык для вызова запроса и получения результатов (php, например)?

Вывод расписания будет каким-то таким для ваших таблиц:

SELECT * FROM Расписание
JOIN Преподаватель ON Преподаватель.id = Расписание.id_преподавателя
JOIN Номер_недели ON Номер_недели.id = Расписание.id_Номера
JOIN День_недели ON День_недели.id = Расписание.id_Дня
LEFT JOIN Пара ON Пара.id = Расписание.id_пары
LEFT JOIN Занятие ON Занятие.id = Расписание.id_Занятия
WHERE Имя LIKE '%петя%'

После SELECT я поставил *, чтобы выводить все колонки, вместо неё можете указать нужные вам столбцы. Если учтёте ситуацию в пунктах 3 и 4, то запрос упроститься и не надо будет JOIN-ить ещё 2 таблицы.

Обратите внимание, что при отсутствии данных в таблицах Пара, Занятие столбцы, выбранные из этих таблиц будут со значением null. Это произойдет из-за LEFT JOIN.