実行時にDB設計を変更しないでください。ただし、構造ではなくデータを変更するように設計してください。
2つのテーブルを持つことができます。 Student
と呼ばれるもの 列rollno
を使用 およびname
、多分 rollno
のPK ユニークな場合。
次に、 Thing
という別のテーブルを作成します (適切な名前ですが、データが何であるかはわかりません) when
の3つの列 (日時)、値コード> (任意の適切な名前)(CHAR(1))および
student
( rollno
と同じタイプ 。
両方のwhen
でPKを定義する およびvalue
各生徒が日付ごとに1つの値のみを持つようにします。 Thing.student
からFKを定義します Student.rollno
へ 。これで、DBがデータの(ほとんど)一貫性を保つようになります。
さまざまな列の選択、挿入、更新のニーズに応じてインデックスを定義します。
次に、クエリを実行して両方のテーブルを結合し、目的の結果を取得します。例:
select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'
(mysql方言についてはよくわかりません。そのため、さらに引用符が必要になる場合があります。お気軽に編集してください。)