我正在计划一个数据库,记录学生每天的出勤情况。
问题是,我无法预测一个班的学生总数,而且天数会稳步增加,所以我在MySQL数据库部分很吃力。
我应该用学生的名字作为列,用每个日期作为行吗?我知道使用这种方法会迫使我每次在类中添加或删除学生时更改表的列。例如
day student1 student2 student3 studentN
---- -------- -------- -------- --------
1 x x x
有人处理过类似的问题吗?或者有什么建议吗?
使用所谓的"标准化"数据库来实现这一点的"正确"方法是使用学生表和考勤表
students
--------
id
name
attendance
----------
id
student_id
day
考勤表中的student_id只是对学生表中每个学生的唯一整数id的引用。
现在你可以稍后添加更多的学生数据,如地址、电话、电子邮件等,通常将姓名分为名字和姓氏字段。它允许您更新学生姓名,而不会弄乱考勤数据。
想象一下,如果你为约翰·史密斯存储了一张唱片,后来发现他的名字拼写为Jon而不是John。你必须更新所有包含他的名字的个人记录。或者两个学生同名的情况如何?这是会发生的。使用一个带有唯一id字段的单独的students表将允许您在不需要对数据或逻辑进行重大重组的情况下遇到这些情况。