Tentu saja. Ini adalah teknik umum yang dikenal sebagai pengetikan super tabel. Seperti dalam contoh Anda, idenya adalah bahwa satu tabel berisi superset entitas dan memiliki atribut umum yang menjelaskan entitas umum, dan tabel lain berisi subset entitas tersebut dengan atribut tertentu. Ini tidak berbeda dengan hierarki kelas sederhana dalam desain berorientasi objek.
Untuk pertanyaan kedua Anda, satu tabel dapat memiliki dua kolom yang merupakan kunci asing terpisah ke tabel lain yang sama. Saat database membuat kueri, database tersebut akan bergabung dengan tabel lain tersebut dua kali. Untuk mengilustrasikan dalam kueri SQL (tidak yakin tentang sintaks MySQL, saya sudah lama tidak menggunakannya, jadi ini adalah sintaks MS SQL secara khusus), Anda akan memberikan tabel itu dua alias berbeda saat memilih data. Sesuatu seperti ini:
SELECT
student_accounts.name AS student_name,
counselor_accounts.name AS counselor_name
FROM
student_rec
INNER JOIN user_accounts AS student_accounts
ON student_rec.student_number = student_accounts.user_id
INNER JOIN user_accounts AS counselor_accounts
ON student_rec.guidance_counselor_id = counselor_accounts.user_id
Ini pada dasarnya membutuhkan student_rec
tabel dan menggabungkannya dengan user_accounts
tabel dua kali, sekali pada setiap kolom, dan memberikan dua alias berbeda saat menggabungkannya untuk membedakannya.