あなたのケースはクラス/サブクラスのインスタンスのように見えます。
サブクラスを処理するSQLテーブルを設計する2つの古典的な方法があります。それぞれに長所と短所があります。
1つの方法は、「単一テーブル継承」と呼ばれます。この設計では、すべてのタイプのユーザーに対して1つのテーブルしかありません。特定の列が特定の行に関係しない場合、交差はNULLのままになります。ユーザータイプを示す列を追加できます。
もう1つの方法は、「クラステーブル継承」と呼ばれます。これは、Nanegoが出した答えとよく似ていますが、いくつかの小さな変更があります。すべての共通データとIDフィールドを含むユーザー用のテーブルが1つあります。サブクラスごとに1つのテーブルがあり、そのサブクラスに関連するデータが含まれています。 idフィールドは、多くの場合、usersテーブルの一致する行のidフィールドのコピーとして設定されます。このようにして、サブクラスキーは、主キーとユーザーテーブルを参照する外部キーの両方として機能する二重の役割を果たします。この最後の手法は「共有主キー」と呼ばれます。挿入時に少しプログラミングが必要ですが、それだけの価値はあります。関係の1対1の性質を強制し、必要な結合を高速化します。
これら3つのデザインはすべて、SOのタグとして、またはWeb上の記事として検索できます。
単一テーブル継承とタグ付けされた質問を表示 class-table-inheritance shared-primary-key