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

时间:2015-02-19 12:00:07

标签: mysql time-and-attendance

我正计划建立一个每天记录学生上学率的数据库。

问题在于我无法预测班级中学生的总人数以及日子会稳步增加,所以我在努力学习MySQL数据库部分。

我应该将学生姓名用作列,每个日期用作行吗?我知道每次我在课堂上添加或删除学生时,使用这种方法都会迫使我改变表格的列。 e.g。

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

是否有人处理类似问题或有任何建议?

1 个答案:

答案 0 :(得分:2)

使用所谓的“规范化”数据库实现此目的的“正确”方法是拥有学生表和考勤表

students
--------
id
name

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

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

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

想象一下,如果你为John Smith存储一条记录,后来发现他的名字拼写为Jon而不是John。您必须更新包含其姓名的所有单个记录。或者两个学生同名的情况怎么样?那会发生。使用具有唯一ID字段的单独学生表将允许您在不重新组织数据或逻辑的情况下遇到这些情况。