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.