Váš případ vypadá jako instance třídy/podtřídy.
Existují dva klasické způsoby, jak navrhnout tabulky SQL pro práci s podtřídami. Každý má své výhody a nevýhody.
Jeden způsob se nazývá „Dědičnost jedné tabulky“. V tomto provedení je pouze jeden stůl pro všechny typy uživatelů. Pokud se daný sloupec netýká daného řádku, průsečík zůstane NULL. Pro označení typu uživatele lze přidat sloupec.
Další způsob se nazývá "dědičnost tabulky tříd". To je velmi podobné odpovědi, kterou dal Nanego, s několika malými změnami. Pro uživatele je k dispozici jedna tabulka se všemi běžnými údaji a polem id. Pro každou podtřídu existuje jedna tabulka s daty, které se této podtřídy týkají. Pole id je často nastaveno jako kopie pole id v odpovídajícím řádku zpět v tabulce uživatelů. Tímto způsobem může klíč podtřídy vykonávat dvojitou povinnost a fungovat jako primární klíč i jako cizí klíč odkazující na uživatelskou tabulku. Tato poslední technika se nazývá "Shared Primary Key". Vyžaduje to trochu programování při vkládání, ale stojí to za to. Vynucuje individuální povahu vztahu a urychluje potřebná spojení.
Všechny tři tyto návrhy můžete vyhledat jako značky v SO nebo jako články na webu.
dědění po jedné tabulce class-table-inheritance sdílený-primární-klíč