Поздрави стекери,
Опитвам се да измисля най-добрата схема на база данни за приложение, което позволява на потребителите да създават проучвания и да ги представят на обществеността. Има куп "стандартни" демографски полета, които повечето проучвания (но не всички) ще включват, като собствено име, фамилия и т.н. И разбира се потребителите могат да създават неограничен брой "персонализирани" въпроси.
Първото нещо, за което се сетих е нещо подобно:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
Но това ще е гадно всеки път, когато искам да изведа данни. И изглежда опасно близо до Ефекта на вътрешната платформа
Подобрение би било да включа колкото се може повече полета, за които мога да се сетя предварително в таблицата с отговори:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
Тогава поне заявките за данни от тези общи колони са ясни и мога да попитам, да речем, средната възраст на всеки, който някога е отговарял на анкета, където е посочил рождената си дата.
Но изглежда, че това ще усложни малко кода. Сега, за да видя кои въпроси се задават в анкета, трябва да проверя кои общи полета за отговор са активирани (като използвам, предполагам, битово поле в Анкета) И какво има в таблицата SurveyQuestions. И трябва да се тревожа за специални случаи, като например ако някой се опита да създаде „персонализиран“ въпрос, който дублира „общ“ въпрос в таблицата с отговори.
Това ли е най-доброто, което мога да направя? Изпускам ли нещо?