Din sag ligner en forekomst af klasse/underklasse.
Der er to klassiske måder at designe SQL-tabeller på, så de kan håndtere underklasser. Hver har fordele og ulemper.
Den ene måde kaldes "Enkeltbordsarv". I dette design er der kun ét bord til alle typer brugere. Hvis en given kolonne ikke vedrører en given række, efterlades skæringspunktet NULL. En kolonne kan tilføjes for at angive brugertypen.
En anden måde kaldes "Klassebordsarv". Dette er meget ligesom svaret Nanego gav, med et par mindre ændringer. Der er én tabel til brugere med alle de almindelige data og et id-felt. Der er én tabel for hver underklasse med data, der vedrører den pågældende underklasse. Id-feltet er ofte sat op som en kopi af id-feltet i den matchende række tilbage i brugertabellen. På denne måde kan underklassenøglen udføre dobbelt funktion og fungere som både en primær nøgle og som en fremmednøgle, der refererer til brugertabellen. Denne sidste teknik kaldes "Delt primær nøgle". Det kræver lidt programmering ved indsættelse, men det er det værd. Det håndhæver en-til-en-karakteren af forholdet, og det fremskynder de nødvendige sammenføjninger.
Du kan slå alle disse tre designs op som tags i SO eller som artikler på nettet.
enkeltbordsarv class-table-inheritance shared-primary-key