Entwerfen von Beziehungen um eine Vererbungsstruktur

Ich habe eine konzeptionelle Frage, wie ich meine Datenbank am besten organisieren kann.

erzeit habe ich vier Kerntabellusers, teachers, students undnotifications. Sowohl dasteachers undstudents -Tabellen erben vonusers Tabelle enthält also den Fremdschlüsseluser_id.

Dasnotifications table bezieht sich, wie Sie vielleicht erraten haben, auf Benachrichtigungen. Diese müssen für alle Benutzer angezeigt werden, die zu einer Mitarbeitergruppe gehören, d. H. Unter der Beschäftigung eines anderen.

Beide Schüler und Lehrer können andere Benutzer beschäftigen.

So der springende Punkt ist, ich brauche eine beredte Art, dies zu modellieren. Der grundlegende Arbeitsablauf des Codes wäre der folgende:

getCurrentUser->getAllEmployer(s)->getNotifications

Dies ist der Laravel Eloquent, an den ich gewöhnt bin$user->employers()->notifications;

Leider ist es nicht so einfach, wie in diesem Fall ein Arbeitgeber auf zwei Tabellen verweisen kann.

So sind meine Wahlen wie folgt.

Erstelle eine eloquente Beziehung für diestudent undteacher Beziehung als Arbeitgeber. Das Manko ist, dass ich schreiben muss, wenn Tests prüfen, ob der aktuelle Benutzer zu einem von beiden gehört und dieser Code häufig wiederholt wird.Füge hinzu einteacher_id undstudent_id zumusers Tabelle. Man würde jedoch offensichtlich in jedem Datensatz überflüssig sein. Die Möglichkeit, weitere Spalten hinzufügen zu müssen, ist ebenfalls sehr wahrscheinlich, da neue Arbeitgeberunternehmen entstehen.Erstelle einemployer_employee -Tabelle mit zwei Spalten, die beide auf ein @ verweisuser_id. Eine SQL-Abfrage würde LEFT JOIN beidestudent undteacher Tabellen mit dememployer_employee table und dann ein JOIN mitnotifications würde alle relevanten zurückgeben. Allerdings würden so viele Verknüpfungen die Geschwindigkeit der Abfrage im Vergleich zu den anderen Optionen verringern.Etwas, an das ich nicht gedacht habe.

Ich bin wirklich auf der Suche nach dem effizientesten, skalierbar Lösung.

Jede Hilfe wird gebeten. Wenn Sie klären könnten, warum Ihre Antwort auch die effizienteste skalierbare Lösung ist, wäre das großartig.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage