Приветствую укладчиков,
Я пытаюсь найти лучшую схему базы данных для приложения, которое позволяет пользователям создавать опросы и представлять их публике. Существует множество «стандартных» демографических полей, которые будут включать большинство опросов (но не все), такие как «Имя», «Фамилия» и т. Д. И, конечно, пользователи могут создавать неограниченное количество «пользовательских» вопросов.
Первое, о чем я подумал, примерно так:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
Но это будет отстой каждый раз, когда я хочу запросить данные. И это кажется опасно близко к эффекту внутренней платформы
Улучшение было бы включать в таблицу ответов столько полей, сколько я могу придумать заранее:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
Тогда, по крайней мере, запросы данных из этих общих столбцов просты, и я могу запросить, скажем, средний возраст всех, кто когда-либо отвечал на любой опрос, где они дали свою дату рождения.
Но, похоже, это немного усложнит код. Теперь, чтобы увидеть, какие вопросы задаются в опросе, я должен проверить, какие общие поля ответов включены (используя, я думаю, битовое поле в Survey) И что находится в таблице SurveyQuestions. И мне нужно беспокоиться об особых случаях, например, если кто-то пытается создать «пользовательский» вопрос, который дублирует «общий» вопрос в таблице ответов.
Это лучшее, что я могу сделать? Я что-то упустил?