Charles,
>Coming to this thread late, but I have done a lot of school registration stuff so I offer this general design observation: there should be an entity which is a registration i.e. the registration of a particular student for a particular class. In data this is represented as a join table which hold as FKs the pk of the student and the pk of the course ( I finally learned to avoid the reserved word "class" in school software < g > ) One student will have many courses and one course will have many students. Views that use this pivot table will be able to get either situation. The pivot table is also a very good place to store the grade.
You just made a very good observation about where to store the grade for the class. For many years I thought of "cross-link" tables as holding just the foreign keys for the tables being linked together, plus a primary key for the cross-link record.
But, when I worked on a project that was modeled with additional data in the cross-link record that related to just that intersection, the lights went on for me!