Добрый день.
Как отметил коллега
Developer вопрос действительно обширен.
Ну во-первых, вам нужны сущности User, Role & Privilege (необязательно). У каждого пользователя есть set ролей, каждая из которых содержит set привилегий. Есть роль ADMIN, а также например, USER.
Я умею создавать обычную таблицу в БД , где уже есть определенные столбцы и не знаю как ее расширять по необходимости.
Не совсем понятно, как именно вы создаете таблицы (db first || corde first). Для простоты используйте возможности Sping Data JPA.
Что касается вопроса о расширении, то как правило, используют sql скрипты (патчи), которые кладут например, в resources и используют flyway. При перезапуске он применяет нужный sql файл. Также необходимые правки вносят в код сущности.
Для анкеты необходимо создавать несколько таблиц (Для названия анкеты, названия ее вопросов и вариантов ответа) или все это лучше запихнуть в одну таблицу?
Вы можете создать 1 сущность: анкета, которая содержит список вопросов. Список вопросов в свою очередь содержит список ответов. У каждого ответа есть напрмиер, некий флаг, является ли данный ответ верным или нет.
В общем, существуют разные типы тестов и каждый из них отличается. Например, есть тесты, в которых есть правильный ответ. Есть тесты, в которых нет правльных ответов, но у каждого ответа есть балл, который впоследствии суммируется и выдается результат и т.д.