 <p>I t makes a lot of sense to have separate tables for stages, grades, semesters, ...</p> <p>You have already mentioned the best reason for this, you can add individual data for each of these levels. You can name the foreign keys in a sensible way (i.e. <code>stage_id</code> in the table for the grades). And I doubt you will ever need a list of subjects mixed in with lessons or semesters.</p>