Frank,
I'm the second guy taking a stab at this (trying to understand you) but the main points are:
1.) you DO want to have a column for Heading and then topic number, actually you might want to add a semester/quarter ID so this one table could span time effectively, and I suggest a primary key value for each one (for next point).
2) I assume you have a list of students with a primary key. You need a pivot table or "joiner" table called e.g. TopicsStudents.
The idea is you have many topics and many students. Not all students get a grade for all topics, and not all topics may apply to a group of students. But when A student takes A test on A topic, you want to record the grade
Table TopicsStudents:
Student_ID Topic_ID TestScore [DATE] [Comments,..]
1 2 100
1 2 100
1 2 100
1 2 100
2 2 100
2 2 100
2 2 100
2 2 100
Make Student_ID and Topic_ID a split primary key:
PRIMARY KEY (Student_ID, Topic_ID)
Since no student would have two grades for the same topic test.
I hope this helps, this is the only real way to handle a many to many relationship.
Sam Fullman
Compass Point Media