Нормализация базы данных для системы управления школой

#mysql #database-design #relational-database #database-schema #database-normalization

#mysql #база данных-дизайн #реляционная база данных #база данных-схема #база данных-нормализация

Вопрос:

Я создаю систему для системы управления школой и придумываю прилагаемую схему базы данных.

Схема базы данных

Ниже показано, как работает система:

  1. В школе много учеников и учителей. В нем также преподается много курсов (предметов). На уровне класса может быть назначено много курсов. Эти курсы, в свою очередь, будут назначены учащимся в этом конкретном классе.
  2. Уровни учащихся подразделяются на классы и разделы. Ученик может быть в 5 классе, но если учеников 5 класса огромное количество, они делятся на секции. например: раздел 5 класса A, раздел 5 класса B.
  3. Учащиеся размещаются в уникальных классах. Класс будет уникальным повсюду. Классная комната раздела А 5-го класса 2010 года будет отличаться от классной комнаты раздела А 5-го класса 2011 года.
  4. Учащимся назначаются родители. У родителей может быть более одного ученика в школе.
  5. Один или несколько классов могут быть назначены учителю.
  6. Посещаемость учащихся ежедневно проверяется их учителем
  7. Будет много типов экзаменов. Результаты экзаменов сохраняются для каждого предмета (курса).

Я новичок в нормализации базы данных и был бы рад, если бы кто-нибудь мог дать мне несколько советов, если база данных выглядит нормально или нет.

Редактировать:

Кроме того, будет только одна точка входа в систему. В приведенном выше случае во время входа в систему пользователь должен будет выбрать тип пользователя из выпадающего списка. Этот выпадающий список будет использоваться для запроса к соответствующей таблице для входа в систему. Другой альтернативой является использование общей user таблицы, которая будет хранить user_id, email, password, last_login_date, last_login_ip , но будет хранить другие детали в соответствующих таблицах, таких как student, parent, teacher . Итак, каков предпочтительный / правильный способ его реализации?

Комментарии:

1. Эй, у учеников в вашей школе может быть только один родитель? Довольно странно 🙂 Кроме того, почему классу назначен только один учитель? Разве это не должно быть назначено курсу?

2. @Tadeck В родительской таблице хранятся сведения об авторизованном родителе, который сможет просматривать и проверять записи учащихся. В нем не указаны все родительские данные учащегося. Например: отцу может быть выдано родительское имя пользователя / пароль для проверки его ученика. Мать также могла бы использовать его, но, как правило, только одна сможет это сделать. Что касается класса, в классе будет только ОДИН назначенный классный руководитель, который заполняет посещаемость / оценки учащихся в этом конкретном классе. Курс относится к предметам, которые изучает студент. Классам будут присвоены предметы, а классам будут присвоены оценки.

3. @Damchey будьте готовы к тому, что такие вещи, как правило 1-авторизованного родителя, могут измениться, и вашему приложению потребуется как-то с этим справиться. Возможно, было бы неплохо спроектировать это так, чтобы у ученика могло быть любое количество авторизованных опекунов — затем вы можете ограничить число до 1 на уровне пользовательского интерфейса

4. «… во время входа в систему пользователь должен будет выбрать тип пользователя из выпадающего списка». За почти 30 лет работы в ИТ я никогда не видел ничего подобного при входе в систему.

5. @APC: Я рассматриваю повышенные привилегии как другую проблему, а не ту, которую я считаю актуальной для учащихся. (Ученика никогда не следует спрашивать, хочет ли он войти в систему как родитель или учитель.)

Ответ №1:

Вы вообще не моделируете GRADE_SECTIONS.

Если в вашей школе не проводится масштабная программа сноса и строительства каждые летние каникулы, классы будут одинаковыми. Это задания, которые меняются каждый год. Таким образом, КЛАССЫ должны быть назначены отдельному объекту GRADE_SECTION вместо объединения РАЗДЕЛОВ и КЛАССОВ, как вы делаете сейчас.

Учащиеся должны быть распределены по КЛАССАМ, а не по КЛАССАМ.

НА КУРСАХ должно быть много ЭКЗАМЕНОВ, а не много EXAM_RESULTS. Просто не имеет смысла, что экзамен по французскому языку могут сдавать учащиеся, изучающие математику и русский язык.

Ответ №2:

Вместо этого строка из посещаемости (много) должна быть перенесена в Classroom_Student (1). Я думаю, что привлечение посещаемости к учащимся невозможно.