I would think of a class model, not a relational model. The user at the end does not care about how many keys you have in your database (usually). It uses your classes, where it should be "simple and easy to use." So first write your class model and think about how it will be displayed later.
The solution in the database depends on your class model.
Change Your model, on the other hand, depends on what you need to do.
Navigation: Do you usually need all the fields from the question? Usually you only need fields that are directly related to the question or field, or all fields recursively down the tree? Do you need to know the parent of the field? etc.
Requests Do I need to filter questions or fields by the fields assigned to them? Recursive? Do I need to filter the fields with the parent? and etc.
In other words: you cannot optimize everything. There are typical queries and typical navigation paths. Supporting too many methods can become costly and may require redundant data both in the model and in the database, making it difficult to maintain.
source share