Каким будет лучший способ связать 3 многих со многими таблицами соединения в Spring JPA? - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над проектом, для которого мне нужно смоделировать систему управления школой. Проблема, с которой я столкнулся, заключается в том, что у меня есть 3 промежуточных соединенных таблицы, связанных друг с другом, что я считаю неэффективным.

  • У меня есть предметы, учителя, студенты и задания.
  • Предмет и Учитель - много ко многим.
  • SubjectTeacherJoin и учеников много ко многим.
  • StudentSubjectTeacherJoin and Assignments много ко многим.

В настоящее время я использую таблицу соединений с отдельным ключом и сопоставлениями многие к одному. Это сделало запросы и управление довольно сложными. Будет ли использование составных ключей лучшим вариантом? Или есть еще какие-то упрощения?

1 Ответ

0 голосов
/ 04 августа 2020

Для меня нормально использовать объединяющую таблицу с отдельным ключом и сопоставлением "многие-к-одному", так как таким образом ваша объединяемая таблица становится отдельной сущностью, что является обычным в мире SQL. Вы также можете указать для него более удобное имя, которое соответствует вашему бизнес-кейсу, например, SubjectTeacherJoin и Students могут быть CourseAtendee и StudentSubjectTeacherJoin, а Assignments может быть Schedule или что-то подобное. Вы должны назвать это. На следующем этапе я бы также подумал, какие запросы будут выполняться больше всего. Поскольку большинство операций являются операциями чтения, вам не будет выгодно иметь довольно сложные соединения для наиболее часто используемых запросов в вашей системе. Это подводит меня к другому предложению - денормализации. Вы можете добавить в свои промежуточные таблицы несколько полей, которые нужны для большинства запросов, чтобы в этом случае вы могли уменьшить нагрузку и опустить сложное соединение для всех запросов. И если у вас будет несколько дубликатов данных, которые заставят вас чувствовать себя некомфортно, подумайте, что это может быть приемлемым компромиссом для упрощения ваших запросов и повышения производительности.

...