I think the problem is a little more complex than simply combining the
semester tables into a single table as there is almost certainly a
substantial amount of redundancy which would not be eliminated merely by
doing so.
In the database relational model tables represent entity types and columns
(fields) the attributes of those entity types. Students and Semesters are
entity types. The Students entity type has attributes such as FirstName,
LastName, DateOfBirth etc. The Semesters entity type has attributes such as
Year, SemesterNumber etc. A third entity type would be Courses with
attributes such as CourseName etc.
These three entity type are related by a special type of entity type, a
relationship type, which is modelled by another table. This represents which
courses each student participates in and the semesters in which they do so.
This is thus a ternary relationship. Tables which model relationship types
in this way work by having foreign key columns referencing the primary keys
of the tables between which the relationship exists, so in this case the
table would have columns StudentID, CourseID and SemesterID. As the
combination of values in these columns in any one row must be unique the
three columns can be designated as the tables composite primary key.
MarkReceived is an attribute of the entity type modelled by this table, the
marks apparently being awarded per student per course per semester to judge
by the information you have supplied, so would be a column in this table.
To return rows with the data you require is simply a matter of joining all
four tables in a query and returning the relevant columns from the
appropriate tables.
In future years you simply have to add rows for the new semesters to the
Semesters table, to the Students table for new students and to the Courses
table for any new courses introduced. New rows are added to the fourth
table, lets call it StudentCourses, to represent each student's participation
in the courses as their academic career progresses.
Ken Sheridan
Stafford, England