在这种情况下,我应该使用内部联接吗?

时间:2019-05-30 09:12:38

标签: mysql sql inner-join

我正在做一个学生出勤微型项目,但我不知道如何继续进行数据库建设。我是SQL和数据库的新手,所以对您来说这似乎很愚蠢。

所以,我想做一个包含学生表的数据库,其中包含:student_id(主键),名称(字符串)和勤工(布尔值)(这是最低要求,我会在之后添加更多),我想要注册学生的日常出勤。因此,我希望所有学生都绑定到一周的每个日期。

我在phpMyadmin中创建了一个日期表,但我不知道如何继续链接它们,我尝试了内部联接,并且成功。

问题是:如果我想向学生表添加另一行,我的表不会更新,那么有没有办法“自动”将所有学生绑定到日期表?

对不起,如果这看起来令人困惑,我已尽力总结一下!

1 个答案:

答案 0 :(得分:0)

让我们对应该在那里摆放桌子以实现适当的学生出勤系统有一些想法。我已经复制了一些表的创建脚本,这些表用于维护每门课程的学生记录。我希望以下带有关系的示例表脚本可以帮助您了解表结构并解决您的问题。

请注意,该表的结构仅供您参考。一旦您从此帖子中获得了总体思路,就可以根据需要添加/删除表/列。

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;

您所需的数据最终将存储到表出勤中。从该表数据中,您将能够找到每个日期和每个课程缺勤/缺勤的学生列表。 请记住,出勤表应该每天通过自动或手动流程进行充实。