Diseñar relaciones alrededor de una estructura de herencia

Tengo una pregunta conceptual sobre la mejor manera de organizar mi base de datos.

Actualmente tengo cuatro tablas principalesusers, teachers, students ynotifications. Sin embargo, tanto elteachers ystudents las tablas heredan deusers tabla por lo que contiene la clave foráneauser_id.

losnotifications tabla como habrás adivinado se refiere a notificaciones. Estos deben aparecer para todos los usuarios que pertenecen a un grupo de empleados, es decir, bajo el empleo de otro.

Tanto los estudiantes como los maestros pueden emplear a otros usuarios.

Entonces, el quid es que necesito una forma elocuente de modelar esto. El flujo de trabajo básico del código sería el siguiente:

getCurrentUser->getAllEmployer(s)->getNotifications

Este es el Lalovel Eloquent al que estoy acostumbrado$user->employers()->notifications;

Lamentablemente, no es tan simple como en este caso, un empleador puede referirse a dos tablas.

Entonces mis elecciones son las siguientes.

Cree una relación elocuente para ambosstudent yteacher relación como empleadores. El déficit es que necesito escribir si las pruebas para verificar si el usuario actual pertenece a alguno de los dos y este código se repetiría con frecuencia.Agrega unteacher_id ystudent_id alusers mesa. Sin embargo, uno obviamente sería redundante en cada registro. La posibilidad de tener que agregar otras columnas también es muy probable debido a la aparición de nuevas entidades patronales.Crear unemployer_employee tabla que contiene dos columnas que hacen referencia a unuser_id. Una consulta SQL IZQUIERDA UNIRSE a ambosstudent yteacher mesas con elemployer_employee mesa y luego unir connotifications devolvería todos los relevantes. Sin embargo, muchas combinaciones reducirían la velocidad de la consulta en comparación con las otras opciones.Algo que no he considerado.

Realmente estoy buscando el más eficiente,escalable solución.

Cualquier ayuda es apreciada. Si pudiera aclarar por qué su respuesta también es la solución escalable más eficiente, sería excelente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta