Ändern Sie Ihr DB-Design nicht zur Laufzeit, sondern gestalten Sie es so, dass Sie die Daten und nicht die Struktur ändern.
Sie könnten zwei Tische haben. Einer namens Student
mit Spalten rollno
und name
, vielleicht PK auf rollno
wenn es einzigartig ist.
Dann haben Sie eine andere Tabelle namens Thing
(irgendein passender Name, aber ich weiß nicht, worum es bei Ihren Daten geht) mit drei Spalten when
(datetime), value
(jeder passende Name) (CHAR(1)) und student
(gleicher Typ wie rollno
).
Definieren Sie PK über beide when
und value
um sicherzustellen, dass jeder Student nur einen Wert pro Datum hat. Definiere einen FK aus Thing.student
zu Student.rollno
. Jetzt kümmert sich Ihre DB darum, Ihre Daten (weitgehend) konsistent zu halten.
Definieren Sie Indizes je nach Bedarf an Auswahlen, Einfügungen und Aktualisierungen über die verschiedenen Spalten.
Verbinden Sie dann zum Abfragen beide Tabellen, um das gewünschte Ergebnis zu erhalten, z. B.
select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'
(Ich bin mir über den mysql-Dialekt nicht sicher, also werden vielleicht noch ein paar Anführungszeichen benötigt. Bitte zögern Sie nicht, sie zu bearbeiten.)