Да, вы определенно можете сохранить промежуточные данные в базе данных, а затем перевернуть немного, чтобы указать, что запись завершена, когда пользователь отправляет окончательный результат. В зависимости от того, как вы разделяете сбор данных, каждая страница может создавать строки в другой таблице (с помощью некоторого ключа, связывающего их вместе).
Возможно, вы захотите сохранить данные в более свободной форме, например, XML в одном столбце. Это позволит вам поддерживать сложные структуры данных в простой схеме данных, но затруднит запрос данных (если ваша база данных не поддерживает типы столбцов xml, как это делают большинство современных корпоративных баз данных).
Еще одним преимуществом хранения промежуточных данных в базе данных является то, что пользователь может вернуться к ним позже, если пожелает. Просто отправьте пользователю электронное письмо, когда он начнет, со ссылкой на его рабочий элемент. Конечно, вам может понадобиться добавить все слои безопасности, чтобы кто-то еще не вернулся к своему рабочему элементу.
Хранение промежуточных данных в БД также позволяет пользователю переходить с одной страницы на другую и повторно посещать прошлые страницы.
Скрытые поля также являются хорошим подходом, но они не позволят пользователю вернуться позже.
Я бы не стал хранить большие структуры данных в сеансе, поскольку, если пользователь явно не аннулирует сеанс, и если у вас нет хорошего механизма для очистки старых сеансов, эти сеансы с истекшим сроком действия могут остаться на долгое время время.
В конце концов, это действительно зависит от ваших конкретных потребностей бизнеса, но, надеюсь, это даст вам возможность подумать.