создание предметной базы данных - PullRequest
0 голосов
/ 06 ноября 2011

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

  1. пользователи - id, role_id, имя пользователя, пароль
  2. роли - идентификатор, роль ( учитель / ученик )
  3. учителя - id,
  4. студент - id, class_id,
  5. класс - id, standard_id, секция
  6. стандарт - идентификатор, имя

Теперь я хочу рассказать о предмете учителю и ученику. Проблема в том, что

  1. Некоторые предметы являются факультативными, а другие обязательными
  2. Английский для 5-7-го стандарта является обязательным, но необязательным для 8-10
  3. Для 8-го ст. Английский является частью 3-го предмета / факультативной группы 3 для 9-10. Английский может быть выбран как субъект1, субъект2 или субъект3, но только один раз, а английский как предмет 1 отличается от английского как предмет 2.

Я хочу связать студентов с его предметами.

Также для 8-й секции A & B ( std + section = класс ) Английский язык - 3-й предмет для 8c, он фиксированный немецкий, но 8D может иметь и то, и другое. Было бы замечательно, если бы эти данные могли быть также связаны каким-то образом, не обязательно к одной таблице. Это что-то вроде разрешенных предметов для класса.

Я также хотел бы связать учителя с предметом и классом (учитель Х берет английский для 8с)

Ответы [ 3 ]

4 голосов
/ 06 ноября 2011

Ваша проблема легко решается с помощью следующих таблиц:

студент

  • ID
  • class_id

Учитель

  • ID

класс

  • ID

предмет

  • ID
  • класс
  • опционально
  • requires_subject_id

конечно

  • ID
  • subject_id
  • school_year

course_attendants

  • course_id
  • student_id

Как вы можете видеть, ограничения, если предмет является необязательным или обязательным, определены в предмете таблицы. предмет может быть проведен преподавателем в течение курса и учебного года. наконец, курс может быть посещен учеными, как описано в таблице course_attendants. чтобы проверить, прошел ли студент какой-либо курс в прошлом, необходимо проверить только таблицу course_attendants и курс. для того, чтобы курс мог посещаться только в том случае, если другой курс уже был посещен, укажите идентификатор обязательного курса в поле require_subject_id в теме темы.

1 голос
/ 11 января 2012

Отношения между учеником и предметом или учителем и предметом должны храниться в другой таблице "course_relationships". Для обязательных предметов по классам добавьте SQL к функции, которую вы используете для создания учащихся, которые впоследствии создают отношения для каждого обязательного предмета. Что-то вроде:

// after whatever function you're using to create users

$compulsory_classes=array();

// for sixth grade
$compulsory_classes['6'] = array();

// for sake of example, say English course ID is 1
$compulsory_classes['6'][] = 1;

$user_class = $user->class;
foreach($compulsory_classes[$user_class] as $current_class) {
    mysql_query("INSERT INTO relationships (user_id, course_id)
    VALUES (" . $user_class . ", " . $current_class . ")");
}

Затем используйте отдельную форму или функцию для добавления необязательных классов.

0 голосов
/ 12 января 2012

Ключом к правильному составлению таблиц является осознание того, что «Студенты по предметам» - это отношение «многие ко многим».Таким образом, вам нужна промежуточная таблица для установления взаимосвязи.

Итак, у вас есть таблица для студентов: в качестве полей используются, например, Student_ID, FirstName, LastName

Вторая таблица для субъектов: с скажемClass_ID, SubjectName, Grade, Необязательный и т. Д.

Затем в промежуточной таблице, скажем, StudentSubjectLinks, которая имеет всего три поля:

LinkID: идентификатор промежуточной таблицы.Student_ID: который устанавливается как внешний ключ, связанный с Student_ID в таблице Student.

Class_ID: который устанавливается как внешний ключ, связанный с Class_ID в таблице Subjects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...