Должен ли я использовать Inner Join в этом случае? - PullRequest
0 голосов
/ 30 мая 2019

Я работаю над мини-проектом посещаемости студентов и не знаю, как поступить с базой данных. Я новичок в SQL и базах данных в целом, так что это может показаться вам глупым.

Итак, я хочу создать базу данных, содержащую таблицу student, которая содержит: student_id (первичный ключ), name (строка) и посещаемость (boolean) (это минимум, я добавлю больше после) и я хочу регистрировать ежедневную посещаемость студентов. Поэтому я хочу, чтобы все студенты были привязаны к каждой дате недели.

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

Проблема в следующем: если я хочу добавить еще одну строку в таблицу учеников, моя таблица не будет обновляться, так есть ли способ «автоматически» привязать всех учеников к таблице дат?

Извините, если это кажется запутанным, я изо всех сил старался подвести итог!

1 Ответ

0 голосов
/ 30 мая 2019

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

Пожалуйста, обратите внимание , что эта таблица предназначена только для вашей справки. Вы можете добавлять / удалять таблицы / столбцы в соответствии с вашими требованиями, как только вы получите общую идею из этого поста.

CREATE TABLE `staff` (
  `id` int(11) NOT NULL,
  `type` varchar(200) DEFAULT NULL,
  `first_name` varchar(200) DEFAULT NULL,
  `last_name` varchar(200) DEFAULT NULL,
  `emal` varchar(200) DEFAULT NULL,
  `contact` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `batch` (
  `id` int(11) NOT NULL,
  `department` varchar(200) DEFAULT NULL,
  `details` varchar(200) DEFAULT NULL,
  `staff_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `batch_staff_idx` (`staff_id`),
  CONSTRAINT `batch_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `batch_id` int(11) DEFAULT NULL,
  `first_name` varchar(200) DEFAULT NULL,
  `last_name` varchar(200) DEFAULT NULL,
  `email` varchar(200) DEFAULT NULL,
  `contact` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `batch_student_idx` (`batch_id`),
  CONSTRAINT `batch_student` FOREIGN KEY (`batch_id`) REFERENCES `batch` (`batch_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `course` (
  `id` int(11) NOT NULL,
  `name` varchar(200) DEFAULT NULL,
  `details` varchar(200) DEFAULT NULL,
  `staff_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `course_staff_idx` (`staff_id`),
  CONSTRAINT `course_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `attendence` (
  `course_id` int(11) NOT NULL,
  `student_id` int(11) DEFAULT NULL,
  `class_date` date DEFAULT NULL,
  KEY `att_course_idx` (`course_id`),
  KEY `att_student_idx` (`student_id`),
  CONSTRAINT `att_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `att_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ваши необходимые данные будут, наконец, сохранены в таблице посещаемости. Из этих данных таблицы вы сможете найти список студентов, отсутствующих / присутствующих на дату и на курс. Помните , таблица посещаемости должна ежедневно обогащаться от автоматизированного ИЛИ ручного процесса.

...