То, что вы описываете, часто называется «Entity-Attribute-Value» и иногда описывается как «смешивание данных и метаданных». То есть имена атрибутов (полей) хранятся в виде строк (данных).
Это приводит к множеству сложных проблем, таких как проверка того, что каждый экземпляр формы включает в себя один и тот же набор полей, или обеспечение заполнения обязательных полей (эквивалент NOT NULL в обычной таблице).
Вы спросили, как лучше всего сделать это с реляционной базой данных. В реляционной базе данных вы должны использовать метаданные для метаданных. В этом случае это означает создание новой таблицы для каждой формы и использование столбцов для полей формы. Итак, ваше определение формы - это просто метаданные таблицы, а один экземпляр формы - это одна строка в этой таблице. Если вы поддерживаете формы с многозначными ответами (например, флажки), вам также нужны зависимые таблицы.
Это может показаться дорогим или трудно масштабируемым. Наверное, правда. Таким образом, реляционная база данных может быть не лучшим инструментом для этой работы. Вы упомянули возможность использования XML или YAML; в основном какой-то структурированный формат файла, который вы можете определить ad hoc. Вы должны определить DTD для каждой клиентской формы, чтобы каждая собранная форма могла быть проверена.
edit: Если вам действительно нужна гибкость EAV в вашем приложении, это нормально, обычно есть обстоятельства, которые оправдывают нарушение правил. Просто помните о дополнительной работе, которую необходимо выполнить, и планируйте ее в своем графике разработки и при масштабировании своего сервера, чтобы справиться с нагрузкой. Также см. Другой мой ответ о EAV в StackOverflow.