ОБНОВЛЕНИЕ: часть 1 - начало:
Мы хотим получить данные наших клиентов, но какие именно данные? они не указаны! на самом деле мы хотим иметь динамическое приложение c, которое администратор может определять новые вопросы (он может установить тип данных ответа, длину и другие правила), а также он может деактивировать старые вопросы!
(я не хочу использовать схему EAV, но не могу найти альтернативный путь)
ОБНОВЛЕНИЕ: часть 1 - конец:
поэтому я решил создать приложение для викторины, администратор может определить вопросы, ответы на которые могут быть разными.
Пример:
идентификатор вопроса 1 : как вас зовут? ответ : Джон (varchar)
идентификатор вопроса 2 : сколько вам лет? ответ : 25 (целое число)
ID вопроса 3 : сколько ваша зарплата в час? ответ : 30,65 (десятичное число)
идентификатор вопроса 4 : опишите себя? ответ : Я так добр ... (текст)
ОБНОВЛЕНИЕ: часть 2 - начало:
чтобы сохранить ответы, мне приходит в голову 3 варианта:
ОБНОВЛЕНИЕ: часть 2 - конец:
- создать такую таблицу (проект схемы EAV) :
Table profile_answers
id int [pk, increment]
question_id int
profile_id int
answer text
, как вы видите, я сохранил все ответы как текст ! Я знаю, что это работает, но так ли это лучше? на самом деле это приложение будет иметь миллионы ответов, и мы хотим проанализировать ответы по машинам (например: получить клиентов среднего возраста, жениться на клиентах, клиентов с зарплатой> 30,52 и т. д. c) , поэтому Я хочу реализовать способ с лучшей производительностью !
создайте таблицу, подобную этой (схема EAV):
Table answers
id int [pk, increment]
question_id int
profile_id int
integer_value int
decimal_value decimal
varchar_value varchar
boolean_value boolean
longtext_value longtext
Теперь я могу сохранить данные в соответствующем поле и поместить NULL в другие поля ( Тип данных ответа будет определен при определении вопроса)
Например:
question ID 1 : what is you name? answer: John (varchar)
id 1
profile_question_id 1
profile_id 1
integer_value NULL
decimal_value NULL
varchar_value John
boolean_value NULL
longtext_value NULL
----------------
question ID 2 : how old are you? answer: 25 (integer)
id 2
profile_question_id 2
profile_id 1
integer_value 25
decimal_value NULL
varchar_value NULL
boolean_value NULL
longtext_value NULL
----------------
question ID 3 : how much is your salary per hour? answer: 30.65 (decimal)
id 3
profile_question_id 3
profile_id 1
integer_value NULL
decimal_value 30.65
varchar_value NULL
boolean_value NULL
longtext_value NULL
ОБНОВЛЕНИЕ: часть 3 - начало:
когда администратор добавляет новый вопрос, я могу добавить столбец в таблицу ответов (изменить схему таблицы)
вот так ОБНОВЛЕНИЕ: часть 3 - конец:
Это все о производительности ! как лучше? Если ни один из них не является лучшим и , я должен перепроектировать базу данных , каков правильный дизайн базы данных?