【问题标题】:Should I use Inner Join in this case?在这种情况下我应该使用内连接吗?
【发布时间】:2019-05-30 09:12:37
【问题描述】:

我正在处理一个学生出勤小型项目,但我不知道如何处理我的数据库。我一般是 SQL 和数据库的新手,所以这对你来说可能很愚蠢。

所以,我想做一个包含学生表的数据库,其中包含:student_id(主键)、姓名(字符串)和出勤率(布尔值)(这是最低限度,我会在之后添加更多)我想要登记学生的每日出勤情况。所以我想让所有的学生都绑定到一周中的每个日期。

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

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

对不起,如果这看起来很混乱,我已经尽力总结了!

【问题讨论】:

  • 您尝试过使用FOREIGN KEY 吗?
  • 你真的不需要日期表。您需要一个学生表,其中存储学生的 ID 和姓名,以及一个出勤表,其中存储学生的 ID 和他们参加的日期。
  • 我考虑过使用 FOREIGN KEY,但我不确定它是否会将日期与我的表格联系起来,更重要的是表格结构会是什么样子
  • 只有两个表,第一个是以 student_id 作为主键的学生表,第二个是一个以 student_id 作为外键和日期字段的出勤表

标签: mysql sql inner-join


【解决方案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;

您需要的数据最终将存储到出勤表中。从这个表格数据中,您将能够找到每个日期和每个课程缺勤/出席的学生列表。 请记住,考勤表应每天通过自动或手动流程丰富。

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2011-01-17
    • 2022-07-22
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2017-05-09
    相关资源
    最近更新 更多