Я работаю над мини-проектом посещаемости студентов и не знаю, что делать с моей базой данных. Я новичок в SQL и базах данных в целом, поэтому это может показаться вам глупым.
Итак, я хочу создать базу данных, содержащую таблицу student, которая содержит: student_id (первичный ключ), имя (строка) и посещаемость (логическое значение) (это минимум, позже я добавлю больше), и я хочу зарегистрировать дневная посещаемость студентов. Поэтому я хочу, чтобы все ученики были привязаны к каждому дню недели.
Я создал таблицу дат в phpMyadmin, но не знаю, как их связать, я пробовал внутреннее соединение, и оно было успешным.
Проблема в том, что если я хочу добавить еще одну строку в таблицу учеников, моя таблица не будет обновляться, так есть ли способ «автоматически» привязать всех учеников к таблице дат?
Извините, если это кажется запутанным, я старался изо всех сил обобщить это!
Вам действительно не нужна таблица дат. Вам нужна таблица учащихся, в которой хранятся идентификатор и имя учащегося, и таблица посещаемости, в которой хранятся идентификатор учащегося и даты его посещения.
Возможный дубликат Как создать отношения в MySQL
Я думал об использовании FOREIGN KEY, но я не уверен, свяжет ли он даты с моей таблицей и, что более важно, как будет выглядеть структура таблиц.
Имейте только две таблицы, во-первых, таблицу учащихся со student_id в качестве первичного ключа, а во-вторых, таблицу посещаемости со student_id в качестве внешнего ключа вместе с полем даты.
Как бы я провел даты, когда они посещали @Strawberry?
student_id|attendance_date — в качестве альтернативы вы сохраняете даты, когда они отсутствовали, если это имеет смысл.
Я попробую это и скажу вам, спасибо @MidhunJoy
Пожалуйста, в вопросах по коду укажите минимальный воспроизводимый пример - вырезать, вставить и выполнить код; пример ввода с желаемым и фактическим выводом (включая дословные сообщения об ошибках); теги и четкая спецификация и объяснение. Объясните «добавить еще одну строку в таблицу учеников» и «автоматически» привязать всех учеников к таблице дат». (Заключение слов в устрашающие кавычки не проясняет идиосинкразического конкретного значения, которое вы не записали.)
Время прочитать опубликованный академический учебник по информационному моделированию, реляционной модели и проектированию БД. (Руководства по языкам и инструментам для записи и использования проектов не являются учебниками по информационному моделированию и проектированию баз данных.) Десятки опубликованных учебных пособий по информационному моделированию и проектированию баз данных доступны онлайн бесплатно в формате pdf. На stanford.edu есть бесплатный онлайн-курс. PS Столы представляют отношения/ассоциации. Для соединения таблиц внешние ключи не нужны! PS
Возможный дубликат Как вы справляетесь с отношениями m..n в реляционной базе данных?
Давайте иметь некоторое представление о том, какие таблицы должны быть там, чтобы внедрить надлежащую систему посещаемости студентов. Я скопировал сценарий создания для некоторых из моих таблиц, которые использовались для ведения записей студентов по курсу. Я надеюсь, что приведенные ниже примеры скриптов таблицы с отношением помогут вам понять структуру таблицы, а также решить вашу проблему.
Пожалуйста, обратите внимание, Эта таблица структурирована только для справки. Вы можете добавлять/удалять таблицы/столбцы в соответствии с вашими требованиями, как только вы получите общую идею из этого поста.
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;
Ваши необходимые данные будут окончательно сохранены в таблице «Посещаемость». Из данных этой таблицы вы сможете найти список отсутствующих/присутствующих студентов на дату и на курс. Запомнить, таблица посещаемости должна ежедневно пополняться автоматическим или ручным процессом.
Вы пробовали использовать
FOREIGN KEY
?