title: Database normalization for School Management System
body: <p>I am creating system for a school management system and come up with the attached database schema.</p>
  <p><a href="https://i.stack.imgur.com/DwvVj.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/DwvVj.png" alt="Database diagram" /></a></p>
  
  <p>Following is how the system works:</p>
  <ol>
  <li>A school has many students and teachers. It has also many courses(subjects) taught. A grade level can have many courses assigned. These courses in turn will be assigned to the students in that particular grade.</li>
  <li>The levels of students are categorized into grades and sections. A student can be in Grade 5, but if grade 5 students are huge in number, they are divided into sections. eg: Grade 5 section A, Grade 5 section B.</li>
  <li>Students are placed in unique classrooms. A classroom will be unique throughout. Classroom of Grade 5 Section A of year 2010 will be different from Classroom of Grade 5 Section A of year 2011.</li>
  <li>Students are assigned parents. A parent can have more than one student in the school.</li>
  <li>One or more classrooms can be assigned to a teacher.</li>
  <li>Attendance for students are taken by their teacher on a daily basis</li>
  <li>There will be many types of exams. Exam results are stored for each subject (course).</li>
  </ol>
  <p>I am a beginner in database normalization and would be glad if anyone could give me some hints if the database looks alright or not.</p>
  <p>EDIT:</p>
  <p>Also, there will only be one point of login. In the above case, during login, a user will have to select the type of user from a dropdown list. That dropdown selection will be used to query to respective table to login to the system. Another alternative is to use a common <code>user</code> table, which will store the <code>user_id, email, password, last_login_date, last_login_ip</code> but will store other details in respective tables such as <code>student, parent, teacher</code>. So, what is the preferred/correct way to implement it?</p>