Database design for a school we're designing the database for a school. Just a couple of questions:


do we create one (1) table for users or a table for each user type (parents, teachers, students, admins)? I'm thinking both should work, just looking for a second opinion.
is a course (like math, calculus, history) linked to a room (a location)? or is a class (a student can be in grade 1, class 1) linked to a room?


so to rephrase the 2nd question:
- is math linked to a room, and gym to another room?
- or do we link all students from grade 1, class 1 to a room?


do we assign homework to a class or to a student? I'm leaning towards student, seems to make sense, but not everyone agrees with me. And if link to a class why?


Thank you.
Do we create one (1) table for users or a table for each user type (parents, teachers, students, admins)? 


You are correct - both will work. 

The former could make for very wide table, containing many null values where those fields are not applicable. 

The latter is, perhaps, a "better" model (from a Purist" point of view) but it does make the database structure more complicated. 

A compromise might be to have a "core" Users table that contains the really basic, core information - like Name - and then additional tables for each Type if User that has other fields that are specific to that Type. 

Bear in mind that one person may be more than one Type of User, either over time or even at the same time (e.g. a Teacher who is also a parent of a Student)!


  is a course (like math, calculus, history) linked to a room (a location)? or is a class (a student can be in grade 1, class 1) linked to a room?


Will a Course always run in the same Room?
Probably not (if only on the principle that "Stuff Happens"). 

A session - a Course, being run in a particular Room at a particular Time on a particular Day - represents the intersection of all three of these "parent" Entities - Course, Room and DateTime. 

You almost certainly need a Calendar table that defines when classes can be run. 


  do we assign homework to a class or to a student? I'm leaning towards student, seems to make sense, but not everyone agrees with me. And if link to a class why?


You distribute homework to an entire Class but you expect each Student to "do" their own (I hope!), so you care about which ones were given the assignment, which completed it (and, possibly, when), what mark they were given, and so on. 

So, whilst your Logical process might be to give homework to a class, the underlying, Physical process has to be to "unbundle" all the students in that class, and link the homework assignment to each one of them. 
The association of Student within Class can be used to perform any aggregated reporting that you require, at class level.