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