У меня система опросов, которая будут сравнивать результаты по строкам между собой.
Всего для каждого пользователя существует 120 вопросов.
(таблица: username, v1, v2, v3...,...v120) ответы будут либо "1" либо "0"
Подскажите, стоит ли мне создавать таблицу со 100 колонками, или надо разбить на 3-4 таблицы по "характерным для меня" темам?
Спустя 2 минуты, 11 секунд (4.08.2010 - 14:56) waldicom написал(а):
Тут можно разными способами... Есть "правильные", есть "быстрые"...
Например разделить Пользователей, Вопросы и Ответы_Пользователей на разные таблицы.
Можно писать все в одну.
Хотя если Вас интересует "Правильность" именно с академической точки зрения, то Ваша схема не является правильной.
Например разделить Пользователей, Вопросы и Ответы_Пользователей на разные таблицы.
Можно писать все в одну.
Хотя если Вас интересует "Правильность" именно с академической точки зрения, то Ваша схема не является правильной.
Спустя 3 минуты, 10 секунд (4.08.2010 - 14:59) maximka787 написал(а):
У меня кроме username (или ID) все поля имеют одинаковые ответы 0 и 1, я просто не могу разделить таблицы по смыслу, если например только по 20 вопросов в каждой и объединить их одним id
Спустя 1 час, 11 минут, 22 секунды (4.08.2010 - 16:11) Michael написал(а):
Лучше делай сразу правильно и уже от этого алгоритм дальнейший продумывай.
Выше подсказали, конкретизирую:
Таблица Пользователи
Таблица Вопросы
Таблица ответы на вопросы
при таком раскладе даже самые сложные и специфичные вопросы базочка твоя вытянет.
А в твоем раскладе - ответы зависят от пользователя, хотя должны - также от вопроса и запрос типа "Сколько пользователей ответили верно на половину вопросов" может стать проблемой.
Выше подсказали, конкретизирую:
Таблица Пользователи
idp namep
1 ...
2 ...
Таблица Вопросы
idv namev
1 ....
2 ....
Таблица ответы на вопросы
idp idv result
1 1 0
1 2 1
при таком раскладе даже самые сложные и специфичные вопросы базочка твоя вытянет.
А в твоем раскладе - ответы зависят от пользователя, хотя должны - также от вопроса и запрос типа "Сколько пользователей ответили верно на половину вопросов" может стать проблемой.
Спустя 7 минут, 22 секунды (4.08.2010 - 16:18) maximka787 написал(а):
Цитата (Michael @ 4.08.2010 - 13:11) |
Лучше делай сразу правильно и уже от этого алгоритм дальнейший продумывай. .... А в твоем раскладе - ответы зависят от пользователя, хотя должны - также от вопроса и запрос типа "Сколько пользователей ответили верно на половину вопросов" может стать проблемой. |
Просто наверно я неправильно высказался.
Поясню.
[Первая таблица] (id_user, name, passwd);
Вторая содержит ответы на тест по пятибалльной системе. от 1 до 5.
и получается
[Вторая таблица] (id_tab, id_user, q1,q2,q3,q5,q5...q120);
id_tab - это идентификатор записи (впринципе не используется пока)
id_user - связь с первой таблицей
q1 - ответ на вопрос
q2 - ответ на вопрос
и их 120, они ничем не отличаются друг от друга. На каждого юзера по 1 строке со всеми вариантами ответов.
Спустя 31 минута, 48 секунд (4.08.2010 - 16:50) Гость_Michael написал(а):
Цитата |
Просто наверно я неправильно высказался. |
ну почему - это все мы поняли.
А 1-5 - это оценка ответа или неоцененный вариант ответа?
Если не хочешь делать как я выше описал, то храни лучше в 1-й таблице. И сразу определись какие запросы ты будешь делать к такой базе.
Цитата |
которая будут сравнивать результаты по строкам между собой |
как сравнивать? Просто выберет и уже на php?
Спустя 11 минут, 1 секунда (4.08.2010 - 17:01) maximka787 написал(а):
Цитата (Гость_Michael @ 4.08.2010 - 13:50) | ||||
ну почему - это все мы поняли. А 1-5 - это оценка ответа или неоцененный вариант ответа? Если не хочешь делать как я выше описал, то храни лучше в 1-й таблице. И сразу определись какие запросы ты будешь делать к такой базе.
как сравнивать? Просто выберет и уже на php? |
А 1-5 - это оценка ответа или неоцененный вариант ответа?
это оценка!!! (Это тест). Юзер выберет один из 5-ти вариантов.
Получится в базе будет информация в виде
[1, 1,3,1,1,2,1,1,4,2,5,4,3,5,2,1,4,5,3,2,2,4...]
[3, 1,3,1,1,2,1,1,4,2,5,4,3,5,2,1,4,5,3,2,2,4...]
[10, 1,3,1,1,2,1,1,4,2,5,4,3,5,2,1,4,5,3,2,2,4...]
[240, 1,3,1,1,2,1,1,4,2,5,4,3,5,2,1,4,5,3,2,2,4...]
[70000, 1,3,1,1,2,1,1,4,2,5,4,3,5,2,1,4,5,3,2,2,4...]
первая цифра - это ID пользователя.
Воответсвенно будет 2 запроса к БД
select * from test where id='3'
и
select * from test where id='240'
и варианты вручную через условия будут сравниваться. для каждого столбца.
Спустя 6 минут, 55 секунд (4.08.2010 - 17:08) waldicom написал(а):
Вы убеждаете нас в правильности своей реализации или пытаетесь найти правильное решение?
Спустя 3 минуты, 11 секунд (4.08.2010 - 17:11) Michael написал(а):
Цитата |
и варианты вручную через условия будут сравниваться. для каждого столбца. |
представляю. На php для каждого столбца проверка будет в условии и где правильный ответ храниться - не в php случайно?
А в варианте выше достаточно в таблице вопросов хранить еще правильный ответ. И кол-во правильных ответов можно будет получить так:
select count(*) from users u, questions q, user_questions uq
where u.uid = uq.uid
and q.qid = uq.qid
and q.result = uq.result
and u.uid = 5
Спустя 4 минуты, 17 секунд (4.08.2010 - 17:15) maximka787 написал(а):
Цитата (Michael @ 4.08.2010 - 14:11) | ||
представляю. На php для каждого столбца проверка будет в условии и где правильный ответ храниться - не в php случайно? А в варианте выше достаточно в таблице вопросов хранить еще правильный ответ. И кол-во правильных ответов можно будет получить так: |
Ну и жесть Michael. Чувствую уровень у нас с вами не сопоставим

Я изучу подробно запрос к базе. Надеюсь это сэкономит время.
А на счет условий то да в php скрипте они храниться.
Мне придется считать много сравнивая 2 строки, поэтому боюсь через sql я врят ли смогу все реализовать. И правильных ответов не будет, + разницу по модулям я не реализую в Базе.
_____________
..Работает - не трогай!