No cambie el diseño de su base de datos en tiempo de ejecución, pero diséñelo de manera que cambie los datos, no la estructura.
Podrías tener dos mesas. Uno llamado Student
con columnas rollno
y name
, tal vez PK en rollno
si es único.
Luego tenga otra tabla llamada Thing
(cualquier nombre adecuado, pero no sé de qué tratan sus datos) con tres columnas when
(fechahora), value
(cualquier nombre adecuado) (CHAR(1)) y student
(mismo tipo que rollno
).
Defina PK sobre ambos when
y value
para garantizar que cada estudiante tenga un solo valor por fecha. Defina un FK desde Thing.student
a Student.rollno
. Ahora su base de datos se encarga de mantener sus datos (en su mayoría) consistentes.
Defina índices según sus necesidades de selecciones, inserciones y actualizaciones sobre las diferentes columnas.
Luego, para consultar, únase a ambas tablas para obtener el resultado deseado, por ejemplo,
select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'
(No estoy seguro sobre el dialecto mysql, por lo que tal vez se necesiten algunas comillas más. Siéntase libre de editarlo).