NULLSがたくさんある大きなテーブルを作成しないというあなたの本能は正しいです。これは、ストレージ/取得/メンテナンスの観点からも、データ検証の観点からも、悪い考えです(これについては後で詳しく説明します)。
最も一般的な2つのapprocaches:
1)「userType」フィールドを含むすべての共通フィールドを含むユーザーテーブルを用意します。次に、追加のフィールドを含むユーザータイプごとに個別のテーブルを用意します。すべてのユーザーは、usersテーブルと1つ以上の特定のユーザータイプテーブルに行を持っています。これは最も正規化されており、ストレージとクイックログインに最も効率的です。これにより、制約と外部キーを使用して、各ユーザータイプに必要なすべての情報を確実に利用できるようにすることもできます。
2)すべての共通フィールドを含むユーザーテーブルを用意します。 UserAttributesのような別のテーブルを作成します ユーザーID、キー、および値のフィールドがあります。特定のユーザーの追加のメタデータは、ここに保存できます。これには、データベース管理で新しいユーザータイプを追加したり、ユーザータイプごとに保存するメタデータを追加したりする必要がないという利点があります。ただし、DBレベルでのデータ検証はできません。