True story: I was a student at my school, then I taught there. Then one of the teachers took my class. You need to account for silliness like this. And a faculty member or student isn't necessarily a user either. Use table inheritance. `Faculty : Individual : Party` `Student : Individual : Party` Where `:` means inherits. `Party hasOne User` A `contact` is a relationship between two parties: `Party hasMany ContactRelationships belongsTo Party` See http://dba.stackexchange.com/questions/12991/ready-to-use-database-models-example/23831#23831 for reference models.