Динамическая обзорная логика приложения PHP / MSSQL - PullRequest
0 голосов
/ 20 января 2011

Во-первых, я думаю, что этот вопрос может быть связан с любым языком, но я указал, что я использовал.

Извините, если я тоже начинаю скучать, но я пытаюсь найти лучший способ построитьдинамическая система управления опросами.Мой клиент в основном сказал мне, что данные должны храниться в MS SQL, поскольку у его клиента есть только соединитель MS SQL для SAS, который собирается создавать отчеты.

Моя логика пока такова: 1-й,Настройте сам опрос, то есть запросите название, краткий обзор и т. Д. И т. Д. 2.Определите ваши вопросы.Третий.Публикация опроса.

Теперь я сделал следующее: когда они "опубликуют опрос", я создал для этого опроса специальную таблицу базы данных, в которой будут размещаться ответы.Со стороны администратора они не смогут изменять вопросы, возможно, название вопроса, но это все.Они не могут добавлять / удалять вопросы.

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

Ответы [ 5 ]

3 голосов
/ 20 января 2011

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

+------+    +-------------+    +-------------+    +-------------+    +----------+
| Exam |    | Question    |    | Choice      |    | Answer      |    | User     |
+------+    +-------------+    +-------------+    +-------------+    +----------+
| id   |    | id          |    | id          |    | id          |    | id       |
| name |    | questionNb  |    | choice      |    | user_id     |    | name     |
+------+    | question    |    | question_id |    | exam_id     |    | email    |
            | exam_id     |    | isAnswer    |    | question_id |    | password |
            +-------------+    +-------------+    | choice_id   |    +----------+
                                                  | isGood      | 
                                                  +-------------+ 

Эта модель позволила мне пройти экзамен на 15 вопросов, экзамен на 30 вопросов и экзамен на 50 вопросов. Чтобы адаптировать эту модель для опроса, вам, возможно, просто нужно удалить части isAnswer и isGood, и вы должны быть хорошими и заменить данные пользователей анонимными общими данными, такими как возраст, доход, пол.

2 голосов
/ 20 января 2011

Создание столбца для каждого вопроса совершенно неправильно, изменение базы данных во время выполнения для бизнес-ориентированных целей - «никогда не делать». Прочтите что-нибудь о «реляционных базах данных», вещи должны выглядеть так:

table_surveys Я бы survey_name

table_questions Я бы fk_survey (внешний ключ для table_surveys) question_text (значение вопроса? возможно)

table_questions_options Я бы question_id (внешний ключ для table_questions) option_value (это может быть true / false для теста или числовое значение для опроса) option_label

table_users Я бы имя пользователя проходить Имя

table_answers Я бы options_fk (внешний ключ для table_question_options) users_fk (внешний ключ для table_users)

Таким образом, все связано друг с другом (без повторного использования опций, вопросов или прочего в разных опросах)

0 голосов
/ 27 мая 2011

При всем уважении к Kibbee, поддержка PHP / MSSQL на самом деле ОЧЕНЬ хороша.Мы делаем это довольно часто, и производительность превосходит PHP / MySQL и соответствует скомпилированному C # / MSSQL (в нашем очень ограниченном и ненаучном тестировании).Это предполагает, что вы используете PHP на машине Win.Запуск PHP с TLS-коннектором в отдельном блоке MSSQL - еще один шарик воска, и его может быть сложно настроить.

В любом случае, у нас был похожий сценарий и мы использовали одну таблицу для управления формами (Forms w / FormIDв качестве основного), другой для управления полями / вопросами (Fields w / FieldID, FieldType, например, Y / N, text, select и т. д.), а другой - для «назначения» поля форме (FormFields w / FormFieldID, FormID, FieldID, параметры в массиве для выбранных элементов и т. Д.).Затем еще один набор таблиц, чтобы ответить на вопросы.

Я согласен с остальной частью группы.Обязательно нормализуйте и не создавайте отдельный столбец для каждого вопроса.Сначала это будет больше работы, но вы оцените это, когда вам просто нужно добавить несколько строк в таблицу вместо того, чтобы переписывать запросы и перепроектировать таблицы.

0 голосов
/ 20 января 2011

Не знаю, правда ли я понимаю ваш вопрос. Но однажды я построил такую ​​систему опросов. И это получилось довольно быстро и легко с помощью следующих таблиц (если я правильно помню):

USER, SURVEYS, QUESTIONS, ANSWERS, [some mapping tables]

SAS будет извлекать данные из любой виртуальной таблицы. Если все в одной или двух таблицах, это будет даже проще.

0 голосов
/ 20 января 2011

Согласно комментариям в документации, Поддержка MS SQL в PHP в лучшем случае сомнительна. Является ли PHP единственным языком, который вам разрешено использовать для проекта? Если нет, вы можете рассмотреть возможность использования C #, VB.Net или чего-то более совместимого с SQL Server. В противном случае вы могли бы изначально сохранить данные в MySQL и экспортировать их в MS SQL Server, когда вам нужно было провести анализ.

...