I think they key thing to get correct is how the information is stored over TIME.
For example you cannot just set up a DB schema with
Class ----- StudentClass ----- Student
Because a class such as - 'Year 11 Science class' will have different intakes of students each semster. So each class needs to link to a semester. Linking to semester so you can see which students where in Year 11 Science in 2010 or in 2011 etc.
Same applies for Status of students are they currently enrolled or not? Most of the work is around traking the state of objects over time.
How you go about archiving this is up to you and how you want to use the data? Do you want to store it as in 3NF?