#mysql #database-design #relational-database #database-schema #database-normalization
#mysql #база данных-дизайн #реляционная база данных #база данных-схема #база данных-нормализация
Вопрос:
Я создаю систему для системы управления школой и придумываю прилагаемую схему базы данных.
Ниже показано, как работает система:
- В школе много учеников и учителей. В нем также преподается много курсов (предметов). На уровне класса может быть назначено много курсов. Эти курсы, в свою очередь, будут назначены учащимся в этом конкретном классе.
- Уровни учащихся подразделяются на классы и разделы. Ученик может быть в 5 классе, но если учеников 5 класса огромное количество, они делятся на секции. например: раздел 5 класса A, раздел 5 класса B.
- Учащиеся размещаются в уникальных классах. Класс будет уникальным повсюду. Классная комната раздела А 5-го класса 2010 года будет отличаться от классной комнаты раздела А 5-го класса 2011 года.
- Учащимся назначаются родители. У родителей может быть более одного ученика в школе.
- Один или несколько классов могут быть назначены учителю.
- Посещаемость учащихся ежедневно проверяется их учителем
- Будет много типов экзаменов. Результаты экзаменов сохраняются для каждого предмета (курса).
Я новичок в нормализации базы данных и был бы рад, если бы кто-нибудь мог дать мне несколько советов, если база данных выглядит нормально или нет.
Редактировать:
Кроме того, будет только одна точка входа в систему. В приведенном выше случае во время входа в систему пользователь должен будет выбрать тип пользователя из выпадающего списка. Этот выпадающий список будет использоваться для запроса к соответствующей таблице для входа в систему. Другой альтернативой является использование общей 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). Я думаю, что привлечение посещаемости к учащимся невозможно.