Моделирование сущностей с состояниями в SQL, где сущность имеет больше атрибутов по мере продвижения состояния (Hibernate) - PullRequest
0 голосов
/ 02 сентября 2018

Мне нужно иметь возможность моделировать одну сущность, которая может находиться в разных состояниях. Проблема в том, что в каждом штате у объекта есть больше полей, приписанных ему.

В моем случае у меня есть объект Match, который имеет состояния "в ожидании", "готов", "работает" и "закончен". В ожидании матча указывается дата и время начала матча, а также на каком сервере он будет размещен, готовый матч содержит команды, которые будут соревноваться в матче, текущий матч содержит текущие результаты матча во время его проведения и законченный матч будет содержать время окончания матча и победителя.

Подводя итог, сущность совпадения проходит своего рода конвейер, где на разных этапах к нему добавляются новые поля.

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

Другим вариантом является наличие таблицы для каждого из этапов матчей (PendingMatch, ReadyMatch, RunningMatch ... и т. Д.) С только полями, относящимися к каждому этапу. Поскольку я использую hibernate, каждое состояние будет иметь свой собственный класс, поэтому при загрузке соответствия вы можете получить доступ только к полям, относящимся к этому состоянию. Проблема с этим методом, однако, заключается в том, что я буду повторять столбцы в разных таблицах, и для улучшения состояния совпадений мне придется извлечь его из текущей таблицы и вставить в следующую таблицу с новыми данными для этого состояния.

Ни одно из решений не кажется идеальным, но я не вижу другого способа моделирования этого. Я уверен, что это обычная проблема, но, поскольку точное описание является таким полным, очень трудно что-либо найти на нем!

Если бы кто-нибудь мог объяснить, какой подход лучше, или, может быть, совершенно новый подход, который был бы оценен.

Заранее спасибо!

Yepadee

p.s. Я использую спящий инструмент ORM для моделирования этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...