|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Задача такая. Проект опроса населения (соц. опрос). Имеем машиночитаемые бланки с номером вопроса и вариантами ответов (предусмотрен выбор нескольких вариантов!). Эти машиночитаемые бланки сканируются и распознаются FormReader 6. Далее они экспортируются в базу данных (к примеру MS SQL Serv). Но вся фишка в том, что на этот бланк накладывается шаблон, который позволяет связать поля этого бланка с конкретными полями базы данных (куда идет экспорт), причем только ОДНОЙ ТАБЛИЦЫ!!! Получается супер-ненормализованная база данных. Вопрос последующей нормализации дело второе. Самое главное, как организовать эту ЕДИНСТВЕННУЮ таблицу? Существует примерно 60 вопросов и на них в среднем 6-8 ответов. Есть мысль создать таблицу с колонками типа A1, A2, A3...B1, B2,...G6, G7..., где каждая колонка вариант ответа. И поле каждого ответа на бланке (типа "МЕТКА") связать со столбцом. Но я удивлюсь с такой таблицей работать. Ну никаких больше вариантов кроме трехмерной таблицы в голову не лезет. Все было бы просто, если б была возможность выбрать только один вариант ответа. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 16:05 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Нужно исходить из того, для чего нужна данная БД. Я полагаю так, что основная ее задача - анализ и получение разнообразных отчетов (разрезов и т.п.). Т.е. данные туда будут добавляться редко и большими массивами. Для такого рода БД денормализованная структура (в твоем случае) не так уж и плоха, т.к. позволит _быстро_ генерить основную массу отчетов. Основная проблема - создание устойчивой процедуры загрузки данных. --------------- Работай с умом, а не до ночи. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 18:01 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
денормализованная структура - это миф или ошибка проектирования - что-то там ускорять с ее помощью действительно можно только в редких случаях (если конечно не о схеме звезда идет речь). Очень часто по нормализацией и денормализацией принимают совсем не то... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 18:19 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 MichaelP Проблема, как я понимаю, в необходимости хранить в одной ячейке несколько значений. Если бы, как вы говорите "если б была возможность выбрать только один вариант ответа", то как я понимаю все было бы просто: создается таблица с 60 колонками, каждая колонка представляет собой вопрос, каждая строка - ответ одного респондента: 1, 2 или скажем 5. Давайте подумаем, а можно ли в одной ячейке хранить НЕСКОЛЬКО значений одновременно???... Ответ естественен и очевиден - ДА. Слово "маска" вам что-нибудь говорит???... Уверен, что вы уже сообразили, как надо сделать. Если нет - жую подробно: Пусть всего бывает 10 вариантов ответа на каждый вопрос. Если респондент выбрал один вариант (пусть это будет первый вариант), пишем в ячейку число "1". Если он выбрал первый и второй вариант, пишем в ячейку число 21 Если он выбрал первый, второй и пятый вариант, пишем число 521. УСЕ. Просто и элегантно. И совершенно незачем выдумывать онанизм в духе "A1, A2, A3...B1, B2,...G6, G7... " Только базу желательно выбрать побольше (скажем, 100 вмсето 10) - вдруг вариантов ответа будет, скажем, 12..... ЗЫ. Если идея прокатит, с вас пиво... ЗЫЗЫ. И не забудьте документировать алгоритм... А то знаем мы, такие недокументированные кулибинские программы... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 18:59 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 ЦК На первый взгляд - все в шоколаде. А если нужно будет выбрать все вопросы, к примеру, на которые даны ответы 4 и 3? LIKE поюзать? На массивах в 2-3млн записей можно будет кофе попить, пока такой запрос отработает. Если же взять таблицу такой структуры: 1 Вопрос 2 Ответ_1 3 Ответ_2 4 Ответ_3 ::: N Ответ_<макс_количество возможных вариантов(8 к примеру)> И проиндексировать каждый столбец, то такого рода запросы будут "на ура" отлетать. ЗЫ Или я что-то не так понял? --------------- Работай с умом, а не до ночи. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 09:50 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
можно не в строке хранить, а в битах целого числа :) будет быстрее! но на самом деле для еще большего ускорения таблицу можно расширить.. например для вопроса "пол" завести два битовых поля SexM, SexF и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:02 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
например для вопроса "пол" завести два битовых поля SexM, SexF и т.п. В смысле не 2 битовых поля(столбца), а 2 бита в числе, отвечающие за пол? А почему не хватит одного: 0 - Ж, 1 - М? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:44 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 Jimmy А если нужно будет выбрать все вопросы, к примеру, на которые даны ответы 4 и 3? LIKE поюзать? На массивах в 2-3млн записей можно будет кофе попить, пока такой запрос отработает. А это уже другой вопрос. Я бы его сформулировал так: "Как оптимизировать операции (список операций: поиск, выборка, поиск по шаблону и т.п.) для таких-то и таких-то данных?" Напомню, что изначальный вопрос звучал так: "Самое главное, как организовать эту ЕДИНСТВЕННУЮ таблицу?" Я бы эту задачу решал исходя из такого подхода: Есть одна-единственная таблица с сырыми данными. Надо получить ответы на запросы с приемлимым временем отклика (несколько секунд). ОК. А кто сказал, что остальные выборки должны происходить именно из одной-единственной таблицы? Соответственно решаем какие типичные запросы будут проходить в системе, под них оптимизируем структуры и хранение, а сырые данные в оптимизированые стуктуры загружаем на периодической основе. Что-то типа миниатюрного хранилища данных. Единственные недостаток - потребуется больше физического места. Но для объемов в 2-3 млн. записей это несущественно. 2 flatron Вообще-то числа и имелись в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 13:51 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 Репликант В смысле не 2 битовых поля(столбца), а 2 бита в числе, отвечающие за пол? А почему не хватит одного: 0 - Ж, 1 - М? Патаму шта... Надо еще пид арасов, лесбиянок и гермафродитов учитывать... Тут двумя битами не обойдешься. Да и все равно бит не меньше байта в памяти занимает, так что один хрен... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:08 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Репликант писал:В смысле не 2 битовых поля(столбца), а 2 бита в числе, отвечающие за пол? А почему не хватит одного: 0 - Ж, 1 - М? с полом да :) а если больше чем 2 значения могут быть, то для ускорения запросов (лишние всякие битовые операции) лучше столбцов добавить :) ваще-то, задачку-то решать с помощью олапа надо. все вопросы с ответами ложатся в измерения прекрасно ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:09 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Я бы использовал такую структуру таблицы: <номер_бланка, номер_ответа, вариант_ответа, ответ>. Вроде бы все просто и легко. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:43 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 flatron ваще-то, задачку-то решать с помощью олапа надо. все вопросы с ответами ложатся в измерения прекрасно Ну-ка, ну-ка, интересно получается. А вот с этого момента можно поподробнее - какие у вас измерения получаются?... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:44 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 AISOFT Я бы использовал такую структуру таблицы: <номер_бланка, номер_ответа, вариант_ответа, ответ>. Вроде бы все просто и легко. Йес оф коз, как говорят буржуины. Хорошая добротная таблица фактов. Только совместима ли такая структура с таким ограничением: Но вся фишка в том, что на этот бланк накладывается шаблон, который позволяет связать поля этого бланка с конкретными полями базы данных (куда идет экспорт), причем только ОДНОЙ ТАБЛИЦЫ!!! ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:51 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Циничный Кот измерение = вопрос :) 60 вопросов - 60 измерений, если в одном кубе хранить измерение состоит из ответов что именно поподробнее? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 14:57 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 flatron что именно поподробнее? :) Да не, уже ничего... Просто я бы хотел полюбоваться на картину работы с 60 измерениями одновременно... В которых всего с десяток членов... И непонятно какие иерархии... И что, кстати, делать если вопросы связаны по смыслу, и ответ на десяток следующих зависит от пары предыдущих???... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 15:13 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
хотел полюбоваться на картину работы с 60 измерениями одновременно потенциальные запросы пугают? :) И что, кстати, делать если вопросы связаны по смыслу, и ответ на десяток следующих зависит от пары предыдущих???... ну... и что? причем тут куб? :) это надо при импорте в таблицу фактов отлавливать... (это = нарушения всякие и т.п.) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 15:29 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 flatron потенциальные запросы пугают? :) Скорее потенциальная бессмыссленность оных. Лучше я сам организую исполнение пяти типичных запросов чем буду делать тул, которым никто никогда ничего толкового сделать не сможет. Вопрос-то в том, ЧТО анализировать и КАК. Пока мне это совершенно непонятно. Так что я не сторонник применения OLAP везде, где его в принципе можно применить. ну... и что? причем тут куб? :) Притом. Измерения - понятия независимые по своей сути. Вот когда у вас, скажем, есть измерение "Время", измерение "Центр Затрат" с соответствующими иерархиями и факт "Расходы", при этом данных дофига - олап будет очень удачным инструментом - интуитивно понятным и позволяющим делать любые интересующие срезы. А вот в различных опросниках (я так сильно подозреваю, что в первом посте фигурировали какие-то маркетинговые опросники) вопросы обычно группируются по группам, внутри которых есть смысловые связи. И выносить их в отдельные измерения (независимые), при этом плодить их больше шести десятков - имхо именно это и называется забивать молотком гвозди... ИМХО, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 16:07 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
Но вся фишка в том, что на этот бланк накладывается шаблон, который позволяет связать поля этого бланка с конкретными полями базы данных (куда идет экспорт), причем только ОДНОЙ ТАБЛИЦЫ!!! Так в чем проблема? Поле номера бланка соотвествует полю таблицы, в которой хранится номер бланка, поле номера вопроса бланка - соответсвует полю таблицы, в котором хранится номер вопроса, поле номера варианта вопроса и т. д. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 16:37 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 AISOFT А х.з. тогда в чем проблема. Я уже по ходу дела логику рассуждений потерял. Пусть автор объясняет. И так и сяк сделать можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 16:59 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 ЦК Просто я бы хотел полюбоваться на картину работы с 60 измерениями одновременно... В которых всего с десяток членов... Оне ж могут комбинироваться(см. вначале)! Т.е. реально получается 2^6 - 2^8. ИМХО, вполне обоснованное решение. Но самое разумное решение(ИМХО) - предложенное Вами ранее, с конвертацией исходной таблы(видимо, милая шутка производителя девайса) в нормализованную базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 17:00 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 Так, мимо проходил Не. Все-таки чего-то я конкретно не понимаю. Давайте совсем на пальцах: Оне ж могут комбинироваться(см. вначале)! Т.е. реально получается 64 - 256. ИМХО, вполне обоснованное решение. Возьмем в качестве клиента олапа простенький PivotTable в Excel. Теперь представьте, сидит юзер, набрасывает измерения в табличку. Когда у него одно измерение в столбцах, одно в колонках - все хорошо, все понятно. Имеем табличку. Одно от другого зависит, все кристально ясно. Добавляем еще по измерению. Уже два - ну тоже разобраться можно. Еще парочку. Вот тут уже глазенки-то разбегаться начинают. 3х3 уже хреновочитабельно. 5х5 нечитабельно в принципе - и аналитическая ценность такого отчета равна нулю. Дело-то не в том, как кучу данных на один лист запихать, а как коротко и ясно выразить сновную мысль. В этом весь пафос-то... Исходя из этого примера объясните мне хотя бы на пальцах как юзер будет работать в размерностями 30х30... При этом не забывая о том, что всякие разные маркетологи в среднем с трудом пользуются Экселем и более сложным инструментарием не владеют в принципе. PivotTable чуть ли не вершина мастерства... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 18:40 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
To ЦК Рулез! Разговор таки дошел до того, что задача от юзера неформализована! Мож, от того и танцевать надо? Мы имеем с ОДНОГО(уверен, что есть еще пока скрытая развертка по регионам, социальному срезу, etc) листа матрицу 60 вопросов * 2^8(комбинация ответов). Что лежит за пределом человеческого восприятия. Вывод: резалты обрабатываются разными группами, => затачиваться придется ПОД КАЖДУЮ из них. Я не прав? А что касается топика – акт отчаяния, человек осюсяет, что здесь все криво, дебилизм на Фходе(оставим входную инфу на совести поставщика хардвера/софтвера, это перегоняется в нормализованную за полчаса), полная неопределенность на выходе…. «Вот тут уже глазенки-то разбегаться начинают. 3х3 уже хреновочитабельно. 5х5 нечитабельно в принципе - и аналитическая ценность такого отчета равна нулю» - именно так! Т.е. ессно, каждой сущностью данного опроса занимаются РАЗНЫЕ группы обработчиков, точиться придется под каждую из них, просто Jimmy пока не дошел до этого, хотя и осюсяет перспективы. НО В ЭТОМ СЛУЧАЕ(как и в любом, связанном с ВР) плясать надо не от входной формы, а от КОНЕЧНОГО ПОЛЬЗОВАТЕЛЯ! Универсальную выходную форму, ИМХО(точнее априори), создать невозможно. И если начальство на одного чела вешает заточку под неформализованный вход/неформализованный выход, то пусть будет готово к тому, что стат.отчеты за 5-6 сек. не выполняются! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 10:26 |
|
Подкиньте идею, пожалуйста по проектированию.
|
|||
---|---|---|---|
#18+
2 Так, мимо проходил Рулез! Разговор таки дошел до того, что задача от юзера неформализована! Имхо, он с этого начался. А дальше каждый по мере возможности и собственного понимания дополнил своими соображениями. Хотя автор судя по всему решение уже нашел, раз не показывается. Интересно, какое? И если начальство на одного чела вешает заточку под неформализованный вход/неформализованный выход, то пусть будет готово к тому, что стат.отчеты за 5-6 сек. не выполняются! Это сильно зависит от объемов данных и от железа. Если сильно захотеть, можно и в 5 сек уложиться. Вопрос стоимости опять же... Когда посчитают - иногда соглашаются и по 30 сек ждать... ЗЫ. Кстати о результатах. Я точно знаю, ГДЕ можно достать необходимую информацию о том, ЧТО должно быть на выходе. У разработчиков тестов или тех людей, которые эти результаты обрабатывают (-ли) вручную. ... "ос ю сяет перспективы" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2003, 12:03 |
|
|
start [/forum/topic.php?fid=32&fpage=176&tid=1546775]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
293ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 402ms |
0 / 0 |