Normalisation from 1NF to 3NF
question.noofanswers.  Why is it there?  Cant you just pull this from answer table at run-time?  Or are you enforcing rules on this?
Your student table looks like it has transitive functional dependencies in it but I can't be sure.  Is year dependent on courseid?  At any rate you are likely to want to break off student records and what courses they take since a student could take multiple courses over time.


Those are the only clear normalization/Codd's rules issues I see with this.  I could be missing something though.

Expanding on the second.  Take your student table.  Presumably there is a natural key somewhere but for now let's use StudentEmail as a candidate key because this can uniquely identify a given student (if there is a practical problem in your case, you can use StudentID as a substitute for argument's sake).

In this case StudentForename, StudentSurname depend functionally on StudentEmail.  For every email address there is one and only one forename and surname associated with it.  You might want to break away StudentAlias as well because that would give you an ability to have more than one alias per student, but if you will not have that, it breaks no normalization rules.

The problem is that Year depends on (StudentEmail, CourseID) meaning you have a 2NF violation here, where some attributes are dependent on part of the candidate key and others are dependent on the whole candidate key.  This really needs to be fixed before you can call it 3NF.