mysql - 构建具有未知列数的sql表的最佳方法

标签 mysql time-and-attendance

我正在规划一个数据库,用于记录学生每天的出勤情况。

问题是我无法预测类(class)中的学生总数,而且天数会稳步增加,所以我在 MySQL 数据库部分遇到困难。

我应该使用学生姓名作为列,每个日期作为行吗?我知道使用这种方法将迫使我每次在类(class)中添加或删除学生时都更改表的列。例如

day    student1    student2   student3    studentN
----   --------    --------   --------    --------
1        x           x                       x

有人解决过类似的问题或有什么建议吗?

最佳答案

使用所谓的“标准化”数据库来实现此目的的“正确”方法是拥有一个学生表和一个出勤表

students
--------
id
name

attendance
----------
id
student_id
day

考勤表中的student_id只是对每个学生在students表中拥有的唯一整数id的引用。

现在,您可以稍后添加更多学生数据,例如地址、电话、电子邮件等,并且通常将姓名分为名字和姓氏字段。它允许您更新学生姓名,而不会弄乱出勤数据。

想象一下,如果您存储约翰史密斯的记录,后来发现他的名字被拼写为乔恩而不是约翰。您必须更新包含他姓名的所有个人记录。或者两个学生同名的情况怎么办?那将会发生。使用具有唯一 id 字段的单独学生表将允许您遇到这些情况,而无需对数据或逻辑进行重大重组。

关于mysql - 构建具有未知列数的sql表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28605819/

相关文章:

php - 从 MySQL 中的另一个查询调用查询并仅获取 1 个 JSON

mysql - 奇怪的搜索结果

postgresql - 选择 1 行到 2 列查询 postgresql

VBA 编程。如何将数据从用户窗体传输到工作表的特定行和列?

database-design - 优化模式以捕获出勤数据的最佳方法是什么

php - 在 PHP 和 MySQL 中确定和存储打卡时间的最佳方法

mysql - 如何在 SQL 子查询中使用 NOT IN?

MySQL:加入以获取一行中具有相同时间戳的所有数据

mysql - 为一对多表关系创建连接查询

sql - SQL Server中的更新自动化