Каков наилучший подход для хранения данных вопросов в базе данных? - PullRequest
3 голосов
/ 15 января 2010

Существует мастер, который может содержать более 150 вопросов или только 10. Каждый вопрос может отличаться от вопроса, заданного ранее. Например, возможно, что один вопрос требует ответа «Да / Нет», но следующий может содержать список с несколькими вариантами ответов с четырьмя вариантами. Также должна быть возможность заполнить полностью открытый ответ на вопрос, заданный в этом мастере. Мастер состоит из нескольких разделов.

Результаты этого мастера также должны быть оценены. Например: "Вы когда-нибудь забывали надевать обувь, когда идете на работу?" «Да / Нет» Если пользователь ответил «да», мы должны оценить это и сказать ему, что он должен положить свои ботинки в дверь, чтобы он никогда не забудет это снова. (Пример)

Результаты этого мастера должны быть сохранены в базе данных, но делать это в одной таблице и просто добавлять все данные в эту таблицу мне кажется довольно неудобным. Есть ли здесь кто-нибудь, у кого есть чистое решение, так что, например, если нам когда-нибудь понадобится перестроить мастер, подобный этому, мы можем просто использовать ту же базу данных?

Ответы [ 3 ]

5 голосов
/ 15 января 2010

Барри Уильямс поддерживает бесплатную библиотеку моделей данных, которая включает в себя модели для четырех различных анкет. Они варьируются от простых до сложных .

Его сложная модель выглядит как место для вас, чтобы начать. Но вы, вероятно, захотите расширить его, включив в него тип вопроса Да / Нет (вместо того, чтобы рассматривать их как особый случай множественного выбора). Вам также потребуется добавить объект для хранения последующего текста.

Звучит так, будто вам нужна какая-то форма потока страниц или другая структура управления для управления процессом оценки и ответа. Различаются мнения относительно того, принадлежит ли такая контрольная информация к базе данных; в определенной степени это дело вкуса, хотя язык, который вы будете использовать для написания мастера, будет иметь значение.

5 голосов
/ 15 января 2010

Вы определенно не должны пытаться поместить все это в один большой стол. Мой дизайн будет выглядеть примерно так:

Мастер

Id, Name, Preface, AnyOtherInfoYouMightWantToStore

Вопрос

Id, WizardId, Вопрос, SortNumber

Альтернативный

Id, QuestionId, TypeId (радио, флажок, свободный текст, многострочный свободный текст ...), Name, SortNumber

Ответить

Id, UserId (я думаю, у вас будет какое-то решение для учетной записи пользователя), QuestionId, AlternativeId

Примерно так. Таким образом, мастер может содержать много вопросов, и вопрос может содержать много альтернатив (да + нет радиокнопок - это одна запись в таблице альтернатив), но вы также можете выполнять более сложные операции, например, несколько флажков и (другое текстовое поле)

2 голосов
/ 15 января 2010

Я предлагаю вам прочитать о нормализации базы данных в Википедии или на другом веб-сайте - здесь достаточно ресурсов.

В двух словах, у вас есть таблица для вопросников (Анкета) и таблица для вопросов (Вопрос), а также таблица для респондентов (Респондент) и таблица для ответов (Ответ).

Затем вы создадите вопросники, которые будут составлять вопросы, связав две таблицы. Респонденты будут связаны с записями в таблице ответов, которые будут связаны с записями в таблице вопросов.

...