Структура базы:
1. Таблица questionary насколько я понимаю хранит вопросы а данные анкеты, поэтому ее лучше переименовать, например в questions. По структуре таблицы - все норм
2. Таблица questionary_item - опять таки что у Вас в ней храниться? Варианты ответа на вопрос. По этому ее опять таки лучше переименовать например в answers_variants. По структуре этой таблицы так же все нормально, но не надо в ней хранить null для полей ввода... У Вас эта таблица должна хранить ТОЛЬКО варианты ответов, если вопрос не подразумевает возможности выбора из вариантов - тогда не надо хранить никаких NULL
Логика и валидации: Есть такая штука как
динамическая модель, она позволяет формировать ее структуру в процессе выполнения приложения. Разберитесь с ней и вопрос как организовать логику и валидацию отпадет
Верстка: ну тут все просто нужно использовать стандартный ActiveForm и формировать его поле с помощью цикла по атрибутам динамической модели