Проектирование отношений вокруг структуры наследования
У меня есть концептуальный вопрос о том, как лучше организовать мою базу данных.
В настоящее время у меня есть четыре основных таблицыusers
, teachers
, students
а такжеnotifications
, Однако обаteachers
а такжеstudents
таблицы наследуются отusers
таблица так содержит внешний ключuser_id
.
notifications
Таблица, как вы уже догадались, относится к уведомлениям. Они должны отображаться для всех пользователей, которые принадлежат к одной группе сотрудников, т. Е. Заняты другой.
И студенты, и учителя могут нанимать других пользователей.
Так что суть в том, что мне нужен красноречивый способ моделирования этого. Основной рабочий процесс кода будет следующим:
getCurrentUser->getAllEmployer(s)->getNotifications
Это Laravel Eloquent, к которому я привык$user->employers()->notifications;
К сожалению, это не так просто, как в этом случае работодатель может ссылаться на две таблицы.
Так что мой выбор следующий.
Создайте красноречивую связь для обоихstudent
а такжеteacher
отношения как работодатели. Недостаток в том, что мне нужно написать тесты, чтобы проверить, принадлежит ли текущий пользователь одному из них, и этот код будет повторяться часто.Добавитьteacher_id
а такжеstudent_id
кusers
Таблица. Однако очевидно, что в каждой записи будет избыточно. Вероятность необходимости добавления других столбцов также весьма вероятна из-за появления новых структур работодателей.Создатьemployer_employee
таблица, которая содержит два столбца, оба ссылающиеся наuser_id
, SQL-запрос оставил бы обаstudent
а такжеteacher
таблицы сemployer_employee
стол, а затем присоединиться кnotifications
вернет все те, которые имеют отношение. Однако такое количество объединений уменьшит скорость запроса по сравнению с другими вариантами.Что-то, что я не учел.Я действительно ищу самого эффективного,масштабируемый решение.
Любая помощь приветствуется. Если бы вы могли уточнить, почему ваш ответ также является наиболее эффективным масштабируемым решением, это было бы превосходно.