Должен ли я использовать Inner Join в этом случае?

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

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

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

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

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

Вы пробовали использовать FOREIGN KEY ?

ThisaruG 30.05.2019 11:15

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

Strawberry 30.05.2019 11:16

Возможный дубликат Как создать отношения в MySQL

ThisaruG 30.05.2019 11:16

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

Majid Benhenneda 30.05.2019 11:18

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

MJoy 30.05.2019 11:18

Как бы я провел даты, когда они посещали @Strawberry?

Majid Benhenneda 30.05.2019 11:18

student_id|attendance_date — в качестве альтернативы вы сохраняете даты, когда они отсутствовали, если это имеет смысл.

Strawberry 30.05.2019 11:22

Я попробую это и скажу вам, спасибо @MidhunJoy

Majid Benhenneda 30.05.2019 11:24

Пожалуйста, в вопросах по коду укажите минимальный воспроизводимый пример - вырезать, вставить и выполнить код; пример ввода с желаемым и фактическим выводом (включая дословные сообщения об ошибках); теги и четкая спецификация и объяснение. Объясните «добавить еще одну строку в таблицу учеников» и «автоматически» привязать всех учеников к таблице дат». (Заключение слов в устрашающие кавычки не проясняет идиосинкразического конкретного значения, которое вы не записали.)

philipxy 31.05.2019 23:33

Время прочитать опубликованный академический учебник по информационному моделированию, реляционной модели и проектированию БД. (Руководства по языкам и инструментам для записи и использования проектов не являются учебниками по информационному моделированию и проектированию баз данных.) Десятки опубликованных учебных пособий по информационному моделированию и проектированию баз данных доступны онлайн бесплатно в формате pdf. На stanford.edu есть бесплатный онлайн-курс. PS Столы представляют отношения/ассоциации. Для соединения таблиц внешние ключи не нужны! PS

philipxy 31.05.2019 23:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
11
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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;

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

Другие вопросы по теме

Обновление первых 7 символов строки другими 3 символами с использованием SQL выдает «Ошибка 19 — ограничение UNIQUE не удалось: MGOFile.File»
Обновить таблицу столбцов со значением столбца из таблицы b, если она содержит подстроку из другого столбца из таблицы b
У меня есть хранимая процедура, и я сделал ее с помощью UNION; как я могу подсчитать общее количество строк?
Android - Комната, как добавить ссылку на внешний ключ для переноса данных
Как создать текущую последовательность в Oracle на основе значений столбца отчета
Обновление значений для всех строк на основе уникального идентификатора — Oracle
Таблица событий запросов BigQuery
Как вставить массив объектов JSON в PostgreSQL как отдельные элементы
Проверьте, имеет ли строка определенное окончание, сотрите это окончание, затем запишите эти строки в соответствии с двумя другими условиями
Учитывая увеличивающиеся значения идентификатора и созданную дату, создайте оператор SQL, чтобы определить, не совпадают ли какие-либо даты с идентификатором в оракуле