Kasing Anda terlihat seperti turunan dari kelas/subkelas.
Ada dua cara klasik untuk mendesain tabel SQL untuk menangani subclass. Masing-masing memiliki kelebihan dan kekurangan.
Salah satu caranya disebut "Pewarisan Tabel Tunggal". Dalam desain ini hanya ada satu meja untuk semua jenis pengguna. Jika kolom tertentu tidak berhubungan dengan baris tertentu, perpotongan dibiarkan NULL. Kolom dapat ditambahkan untuk menunjukkan tipe pengguna.
Cara lain disebut "Pewarisan Tabel Kelas". Ini sangat mirip dengan jawaban yang diberikan Nanego, dengan beberapa perubahan kecil. Ada satu tabel untuk pengguna, dengan semua data umum, dan bidang id. Ada satu tabel untuk setiap subclass, dengan data yang berkaitan dengan subclass itu. Bidang id sering diatur sebagai salinan bidang id di baris yang cocok di tabel pengguna. Dengan cara ini kunci subkelas dapat melakukan tugas ganda, bertindak sebagai kunci utama dan sebagai kunci asing yang mereferensikan tabel pengguna. Teknik terakhir ini disebut "Shared Primary Key". Ini membutuhkan sedikit pemrograman pada waktu penyisipan, tetapi itu sangat berharga. Ini memaksakan sifat hubungan satu-ke-satu, dan mempercepat penggabungan yang diperlukan.
Anda dapat melihat ketiga desain ini sebagai tag di SO atau sebagai artikel di web.
single-table-inheritance class-table-inheritance shared-primary-key