Как реализовать стек шагов телеграм бота в базе данных?
На данный момент стек из состояний бота на каждого пользователя у меня хранится в HashMap. Если переделать программу на использование базы данных, то какая должна быть структура таблиц? Невозможно ведь в таблице User добавить поле класса Stack? Нужно добавить таблицу Step, в которой будут поля user_id, значение и порядковый номер в стеке?
Смотря что в этой HashMap. Если chat_id->state (то есть для каждого пользователя хранится текущее состояние и только), то достаточно одной таблицы.
Если же это именно стек (то есть пополняемый список состояний с возможностью возврата наверх), то так просто уже не получится. Например, так: сделать отдельную таблицу chat_id-state-seq, где seq - уникальное в пределах чата число, монотонно возрастающее в пределах chat_id (можно даже просто auto increment поле по всей таблице, ведь конкретные значения неважны, важно, что значение растёт). Тогда добавление в стек - добавление строки в таблицу, возврат наверх по стеку - удаление последней добавленной для chat_id строки. Можно по-прежнему хранить в тех же объектах, только загружать при старте бота данные, а также сопровождать добавление/удаление состояний в стеке операцией записью в базу, чтобы восстановиться в случае чего.
Лучше, конено, сделать это классом с соответствующим интерфейсом, который скроет детали реализации.