Váš instinkt nevytvářet velký stůl se spoustou NULL je správný. To je špatný nápad z hlediska ukládání/načítání/údržby, stejně jako z hlediska ověřování dat (o tom později).
Dva nejběžnější přístupy:
1) Mějte uživatelskou tabulku se všemi běžnými poli, včetně pole „userType“. Poté mějte samostatnou tabulku pro každý typ uživatele obsahující doplňková pole. Všichni uživatelé mají řádek v tabulce uživatelů a jednu nebo více tabulek specifických typů uživatelů. Toto je nejvíce normalizované a nejúčinnější pro ukládání a rychlé přihlášení. To vám také umožňuje používat omezení a cizí klíče k zajištění dostupnosti všech požadovaných informací pro každý typ uživatele.
2) Mít uživatelskou tabulku se všemi běžnými poli. Nechte si jinou tabulku nazvanou něco jako UserAttributes který obsahuje pole pro ID uživatele, klíč a hodnotu. Zde mohou být uložena jakákoli další metadata pro konkrétního uživatele. To má tu výhodu, že nevyžaduje žádnou administraci databáze k přidávání nových typů uživatelů nebo metadat, která mají být uložena pro každý typ uživatele. Nedovolí vám však provádět žádnou validaci dat na úrovni DB.