Projetando relacionamentos em torno de uma estrutura de herança

Eu tenho uma pergunta conceitual sobre a melhor forma de organizar meu banco de dados.

Atualmente, tenho quatro tabelas principaisusers, teachers, students enotifications. No entanto, tanto oteachers estudents tabelas herdam dousers tabela para conter a chave estrangeirauser_id.

onotifications tabela como você deve ter adivinhado refere-se a notificações. Eles precisam aparecer para todos os usuários que pertencem a um grupo de funcionários, isto é, sob o emprego de outro.

Alunos e professores podem empregar outros usuários.

Portanto, o cerne é que preciso de uma maneira eloquente de modelar isso. O fluxo de trabalho básico do código seria o seguinte:

getCurrentUser->getAllEmployer(s)->getNotifications

Este é o Laravel Eloquent a que estou acostumado$user->employers()->notifications;

Infelizmente, não é tão simples assim, como neste caso, um empregador pode se referir a duas tabelas.

Então, minhas escolhas são as seguintes.

Crie um relacionamento eloquente para os doisstudent eteacher relacionamento como empregadores. O déficit é que eu preciso escrever se testes para verificar se o usuário atual pertence a algum deles e esse código seria repetido com freqüência.Adicione umteacher_id estudent_id aousers mesa. No entanto, um seria obviamente redundante em cada registro. A chance de precisar adicionar outras colunas também é muito provável devido ao surgimento de novas entidades empregadoras.Criar umemployer_employee tabela que contém duas colunas fazendo referência a umuser_id. Uma consulta SQL deixaria JOIN ambosstudent eteacher mesas com oemployer_employee tabela e, em seguida, um JOIN comnotifications retornaria todos os relevantes. No entanto, tantas associações reduziriam a velocidade da consulta quando comparadas com as outras opções.Algo que não considerei.

Estou realmente procurando o mais eficiente,escalável solução.

Qualquer ajuda é apreciada. Se você pudesse esclarecer por que sua resposta é a solução escalável mais eficiente, seria excelente.

questionAnswers(1)

yourAnswerToTheQuestion