Natürlich. Dies ist eine gängige Technik, die als Supertyping bekannt ist Tische. Wie in Ihrem Beispiel besteht die Idee darin, dass eine Tabelle eine Obermenge von Entitäten enthält und gemeinsame Attribute aufweist, die eine allgemeine Entität beschreiben, und andere Tabellen Teilmengen dieser Entitäten mit bestimmten Attributen enthalten. Es ist einer einfachen Klassenhierarchie im objektorientierten Design nicht unähnlich.
Für Ihre zweite Frage kann eine Tabelle zwei Spalten haben, die separat Fremdschlüssel für dieselbe andere Tabelle sind. Wenn die Datenbank die Abfrage erstellt, fügt sie diese andere Tabelle zweimal hinzu. Zur Veranschaulichung in einer SQL-Abfrage (ich bin mir bei der MySQL-Syntax nicht sicher, ich habe sie lange nicht verwendet, also ist dies speziell die MS SQL-Syntax), würden Sie dieser Tabelle zwei unterschiedliche Aliase geben, wenn Sie Daten auswählen. Etwa so:
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
Dies nimmt im Wesentlichen den student_rec
Tabelle und kombiniert sie mit den user_accounts
Tabelle zweimal, einmal in jeder Spalte, und weist zwei verschiedene Aliase zu, wenn sie kombiniert werden, um sie voneinander zu unterscheiden.