Я бы скорее подумал о модели классов, чем о реляционной модели.Пользователь в конце (как правило) не заботится о том, сколько ключей у вас есть в вашей базе данных.Он использует ваши классы, где оно должно быть «простым и простым в использовании».Поэтому сначала напишите модель своего класса, а потом подумайте о отображении.
Решение в базе данных зависит от модели вашего класса.
Редактировать : ваша модель с другой стороны зависитна то, что вам нужно сделать.
Навигация: Вам обычно нужны все поля из вопроса?Вам обычно нужны только поля, непосредственно связанные с вопросом или полем, или все поля рекурсивно вниз по дереву?Вам нужно знать родителя поля?и т. д. и т. п.
Запросы. Вам необходимо отфильтровать вопросы или поля по назначенным им полям?Рекурсивный?Вам нужно отфильтровать поля по родителю?и т. д.
Другими словами: вы не можете оптимизировать все.Есть типичные запросы и типичные пути навигации.Поддержка слишком многих способов может стать дорогостоящей и потребовать избыточных данных как в модели, так и в базе данных, что затрудняет обслуживание.