Вашият случай изглежда като екземпляр на клас/подклас.
Има два класически начина за проектиране на SQL таблици за работа с подкласове. Всеки има предимства и недостатъци.
Единият начин се нарича "Наследяване на една таблица". В този дизайн има само една таблица за всички видове потребители. Ако дадена колона не се отнася до даден ред, пресечната точка остава NULL. Може да се добави колона, за да посочи типа потребител.
Друг начин се нарича "Наследяване на таблицата на класа". Това е много подобно на отговора на Nanego, с няколко незначителни промени. Има една таблица за потребители, с всички общи данни и поле за идентификация. Има една таблица за всеки подклас с данни, които се отнасят за този подклас. Полето за идентификация често се настройва като копие на полето за идентификатор в съответния ред обратно в таблицата с потребители. По този начин ключът на подкласа може да изпълнява двойно задължение, действайки едновременно като първичен ключ и като външен ключ, препращащ към потребителската таблица. Тази последна техника се нарича "Споделен първичен ключ". Изисква малко програмиране по време на вмъкване, но си заслужава. Той налага естеството на връзката едно към едно и ускорява необходимите присъединявания.
Можете да търсите и трите от тези дизайна като тагове в SO или като статии в мрежата.
single-table-inheritance class-table-inheritance shared-primary-key