我正在规划一个数据库,用于记录学生每天的出勤情况。
问题是我无法预测类(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/