2011-01-20 3 views
0

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

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

Моя логика до сих пор такова: 1-й. Настройте сам опрос, т. Е. Запросите заголовок, быстрый обзор и т. Д. И т. Д. 2nd. Определите свои вопросы. 3rd. Опубликовать опрос.

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

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

ответ

2

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

+------+ +-------------+ +-------------+ +-------------+ +----------+ 
| 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  | 
                +-------------+ 

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

0

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

+0

Я просил клиента использовать MYSQL, но при этом его клиент приобрел соединитель для MSSQL. Не поймите меня неправильно, я тоже не поклонник PHP/MSSQL :-(. Я мог бы заглянуть в MYSQL, а затем экспортировать в MSSQL, но зависит от того, как часто SAS будет делать свою магию. – PHPology

0

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

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

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

2

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

table_surveys ID survey_name

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

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

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

table_answers ID options_fk (внешний ключ table_question_options) users_fk (Внешний ключ table_users)

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

+0

Я понимаю, что Джефф и вы говоря, и, чтобы быть справедливым, я бы создал таблицу для хранения всех ответов на вопросы, но из-за этой системы SAS я думал, что это будет хороший вариант. Я не очень хочу создавать несколько таблиц и вообще никогда не называл такой код, я действительно хотел, чтобы на него были высказаны мнения других людей :-) – PHPology

0

При всем уважении к Кибби, поддержка PHP/MSSQL на самом деле очень хорошо. Мы делаем это довольно часто, и производительность решает PHP/MySQL и сопоставляет скомпилированный C#/MSSQL (в нашем очень ограниченном и ненаучном тестировании). Предполагается, что вы запускаете PHP на машине Win. Запуск PHP с помощью TLS-коннектора в отдельный ящик MSSQL - это еще один воск и может быть больно настроить.

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

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

+1

И извиниться, что ребята ответили через шесть месяцев после того, как вопрос был отправлен! Виноват. –