[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильно ли создал я базу?
maximka787
Ребят, в общем суть такая.

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

Всего для каждого пользователя существует 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. Чувствую уровень у нас с вами не сопоставим smile.gif
Я изучу подробно запрос к базе. Надеюсь это сэкономит время.

А на счет условий то да в php скрипте они храниться.

Мне придется считать много сравнивая 2 строки, поэтому боюсь через sql я врят ли смогу все реализовать. И правильных ответов не будет, + разницу по модулям я не реализую в Базе.


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.