Инстинктите ви да не създавате голяма маса с много NULLS са правилни. Това е лоша идея от гледна точка на съхранение/извличане/поддръжка, както и от гледна точка на валидиране на данни (повече за това по-късно).
Двата най-често срещани подхода:
1) Имайте потребителска таблица с всички общи полета в нея, включително поле "userType". След това имайте отделна таблица за всеки тип потребител, съдържаща допълнителните полета. Всички потребители имат ред в таблицата с потребители и една или повече от таблиците с конкретни потребителски типове. Това е най-нормализираното и най-ефективно за съхранение и бързо влизане. Това също ви позволява да използвате ограничения и външни ключове, за да гарантирате, че цялата необходима информация за всеки тип потребител е налична.
2) Имайте потребителска таблица с всички общи полета в нея. Имайте друга таблица, наречена нещо като UserAttributes който има полета за потребителски идентификатор, ключ и стойност. Тук могат да се съхраняват всякакви допълнителни метаданни за конкретен потребител. Това има предимството, че не изисква никаква администрация на база данни да добавя нови потребителски типове или метаданни, които да се съхраняват за всеки тип потребител. Това обаче не ви позволява да извършвате проверка на данни на ниво DB.