Samozřejmě. Toto je běžná technika známá jako supertyping tabulky. Jako ve vašem příkladu jde o to, že jedna tabulka obsahuje nadmnožinu entit a má společné atributy popisující obecnou entitu a další tabulky obsahují podmnožiny těchto entit se specifickými atributy. Není to nepodobné jednoduché hierarchii tříd v objektově orientovaném designu.
Pro vaši druhou otázku může mít jedna tabulka dva sloupce, které jsou samostatně cizími klíči ke stejné druhé tabulce. Když databáze vytvoří dotaz, připojí se k druhé tabulce dvakrát. Pro ilustraci v dotazu SQL (nejsem si jistý syntaxí MySQL, dlouho jsem ji nepoužíval, takže se jedná konkrétně o syntaxi MS SQL), při výběru dat byste této tabulce dali dva odlišné aliasy. Něco jako toto:
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
To v podstatě vyžaduje student_rec
a zkombinuje ji s user_accounts
tabulka dvakrát, jednou v každém sloupci, a při jejich kombinování přiřadí dva různé aliasy, aby je bylo možné odlišit.