Natuurlijk. Dit is een veelgebruikte techniek die bekend staat als supertyping tafels. Net als in uw voorbeeld, is het idee dat één tabel een superset van entiteiten bevat en gemeenschappelijke attributen heeft die een algemene entiteit beschrijven, en andere tabellen subsets van die entiteiten met specifieke attributen bevatten. Het is niet anders dan een eenvoudige klassenhiërarchie in objectgeoriënteerd ontwerp.
Voor uw tweede vraag kan een tabel twee kolommen hebben die afzonderlijk refererende sleutels zijn voor dezelfde andere tabel. Wanneer de database de query opbouwt, wordt deze twee keer toegevoegd aan die andere tabel. Ter illustratie in een SQL-query (niet zeker van de MySQL-syntaxis, ik heb het al heel lang niet meer gebruikt, dus dit is specifiek de MS SQL-syntaxis), je zou die tabel twee verschillende aliassen geven bij het selecteren van gegevens. Zoiets als dit:
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
Dit neemt in wezen de student_rec
tabel en combineert deze met de user_accounts
tabel tweemaal, één keer op elke kolom, en wijst twee verschillende aliassen toe wanneer ze worden gecombineerd om ze van elkaar te onderscheiden.