Архитектура таблиц БД для хранения состояния этапов стогласования
Вопрос заключается в архитектуре БД, а точнее в том, каким образом лучше построить таблицы для процессов согласования.
Теперь более подробно.
Существуют основные таблицы:
ks3 - содержит карточки, которые необходимо согласовывать;
ks3_stage_workflow - содержит стадии согласования, по которым идет вновь созданная карточка;
group - содержит группы с пользователями, которые участвуют в согласовании на каждом этапе согласования;
ks3_stage_workflow_group - промежуточная таблица отношения ManyToMany
Как сделано сейчас:
Пользователь создает карточку в таблице ks3 и она идет по этапам согласования. Проблема данного подхода в том, что стадии согласования могут меняться и люди в группах тоже и это будет меняться в уже созданной или уже закрытой карточке, что неправильно.
Т.е. нужно при создании карточки запоминать этапы согласования и группы с людьми в них, и помещать в отдельную таблицу. Так же может быть ситуация, что для каждой конкретной карточки будет необходимо удалить целую группу с людьми из какого-нибудь этапа согласования или удалить только одного человека внутри группы. Следовательно нужно избавиться от связи между таблицами ks3 и ks3_stage_workflow и создавать отдельную таблицу которая будет хранить в себе этапы с группами для каждой конкретной карточки.
Собственно вопрос, как лучше организовать эту таблицу с таким большим набором настраиваемых параметров? Помещать огромный json с этими настройками в ячейку не хочется.
