Database normalisation




i am attempting to break this massive table into normal form up to third. so far i believe course is correct in terms of second form however i am confused as to splitting tutor. In paticular the Q: if tutorID changes would the name.

many thanks guys.


The way I’ve always done it is to essentially think about the basics of each normal form.

  • 1NF- Remove any “duplicate” values
  • 2NF - Remove any functional dependencies
  • 3NF - Remove any non-required data

Your initial table structure was essentially already in 1NF to start with. Doesn’t make it usable, but it’s already there by it’s initial nature.

To get it to 2NF, you need to remove any information that can be classified separately., which means you need to look at the table you have. What I see is three separate types of data

  1. Course Information
  2. Tutor Information
  3. Course Session Information

So, take the tutorID through tutorMaxStudents and put them onto a separate table. I would take placeAvailability and put it on the table you call Course_Date since it’s appropriate there.

At that point, you’re essentially at 3NF, though you’ll need some intermediate tables later to tie them together…