I'm trying to decide between having 1 enormous table for all the possible data about a user, a lot of which won't apply to every user, and then having a separate table for the data that a user can have multiple instances of (for example, previous jobs) versus having the data about each user distributed between multiple tables.
The first way is more streamlined but I feel like it would use a ton of unnecessary overhead, whereas the second way results is easier to work with but results in a lot of extra database queries.
If the relevant qualities depend on the type of user, and all users of a particular type have all those qualities, you could have a table for each type.
CREATE TABLE Type1_Qualities ( id int not null auto_increment primary key, user_id int references (User), qual1 ..., qual2 ..., ... )
and similarly for Type2, and Type3. This avoids having all those extraneous fields for every user, but is simpler than doing lots of joins with a generic attributes table like xception's answer.