Selvfølgelig. Dette er en almindelig teknik kendt som supertyping tabeller. Som i dit eksempel er ideen, at en tabel indeholder et supersæt af entiteter og har fælles attributter, der beskriver en generel enhed, og andre tabeller indeholder undersæt af disse entiteter med specifikke attributter. Det er ikke ulig et simpelt klassehierarki i objektorienteret design.
For dit andet spørgsmål kan en tabel have to kolonner, som er separate fremmednøgler til den samme anden tabel. Når databasen bygger forespørgslen, forbinder den den anden tabel to gange. For at illustrere i en SQL-forespørgsel (ikke sikker på MySQL-syntaks, jeg har ikke brugt det i lang tid, så dette er specifikt MS SQL-syntaks), ville du give den tabel to forskellige aliaser, når du vælger data. Noget som dette:
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
Dette tager i bund og grund student_rec
tabellen og kombinerer den med user_accounts
tabel to gange, én gang på hver kolonne, og tildeler to forskellige aliaser, når de kombineres for at adskille dem.