Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизПомогите со сводными таблицами Найти похожие ветки
← →
jiny (2005-12-20 09:01) [0]Есть программа по проведению социологических опросов.
Схема работы проста :
Создается тема опроса -> к ней вопросы -> к каждому из вопросов забиваются ответы.
Причем вопросы есть простые, и есть "константные", т.е.
простые забиваются вручную, соответственно - ответы тоже вручную, данные о "константных" вопросах находятся в табличке
CONSTANT_LIST, где указано : 1) название вопроса, 2) таблица, откуда брать предполагаемые ответы, название поля в таблице анкет (например если вопрос "Ваш возраст ?", таблица "male_status", а поле в анкетах "id_malestatus")
Список вопросов находится в таблице "questions", ответы к ним "answers"
Вот структуры таблиц :
<themes>
ID integer not null
name_theme varchar(250) COLLATE PXW_CYRL
questions вопросы
ID INTEGER NOT NULL,
REAL_DATE_CREATED DATE,
ID_CONSTANT INTEGER DEFAULT 0,
CONSTANT_TABLE VARCHAR(50) COLLATE PXW_CYRL,
ID_THEME INTEGER NOT NULL,
NAME_QUESTION VARCHAR(250) COLLATE PXW_CYRL,
COMMENTS VARCHAR(100) COLLATE PXW_CYRL,
ISACTIVE SMALLINT DEFAULT 1,
PORYADOK INTEGER
answers предлагаемые ответы
ID INTEGER NOT NULL,
ID_QUESTIONS INTEGER,
NAME_ANSWER VARCHAR(250) COLLATE PXW_CYRL,
ISACTIVE SMALLINT DEFAULT 1,
REAL_DATE_CREATED DATE,
COMMENTS VARCHAR(100) COLLATE PXW_CYRL,
PORYADOK INTEGER,
ID_CONSTANT INTEGER DEFAULT 0,
TABLE_CONSTANT VARCHAR(50) COLLATE PXW_CYRL,
FIELD_CONSTANT VARCHAR(50) COLLATE PXW_CYRL
ankets анкеты
ID INTEGER NOT NULL,
REAL_DATE_CREATED DATE,
DATE_ANKET DATE,
AGE INTEGER,
ID_THEME INTEGER,
ISMALE SMALLINT DEFAULT 1,
ID_PROFESSION INTEGER,
ID_NATION INTEGER,
ID_MARRIED SMALLINT DEFAULT 0,
ID_OBRAZOVANIE INTEGER,
ID_ORGANIZATION_TYPE INTEGER,
ID_TERRITORY INTEGER,
ID_INVALID INTEGER,
ID_DOHOD SMALLINT,
COMMENTS VARCHAR(100) COLLATE PXW_CYRL,
RID VARCHAR(20) NOT NULL COLLATE PXW_CYRL,
ISACTIVE SMALLINT DEFAULT 1
anket_answers ответы к анкетам
ID_ANKET INTEGER,
REAL_DATE_CREATED DATE,
ID_QUESTIONS INTEGER,
ID_ANSWER INTEGER
CONSTANT_LIST список "константных" вопросов
ID INTEGER NOT NULL,
PORYADOK INTEGER,
NAME_Q VARCHAR(100) COLLATE PXW_CYRL,
SHORT_NAME VARCHAR(50) COLLATE PXW_CYRL,
NAME_TABLE VARCHAR(50) COLLATE PXW_CYRL,
FIELD_CONSTANT VARCHAR(50) COLLATE PXW_CYRL
Нужно чтобы программа делала сводную таблицу
в разрезе ответов одного из константных вопросов, например :
Например по вопросу "Ваш возраст :"
--------------------------------------------------------------
от 17 до 29 лет |от 30 до 45 лет|от 46 до 61 года|
--------------------------------------------------------------
I. Кто убил кролика Роджера ?
--------------------------------------------------------------
1. Багз Банни 5% 7% 88%
2. Даффи Дак 9% 8% 81%
3. Затрудняюсь
ответить 86% 5% 9%
--------------------------------------------------------------
Как сделать универсальный алгоритм для любого из "константных" вопросов ?
Помогите.
Заранее спасибо
← →
jiny (2005-12-20 09:02) [1]" Помогите со сводными таблицами " ? т.к. я буду выдавать конечные отчеты в Excel
← →
Sergey13 © (2005-12-20 10:05) [2]Что-то слабо я понял про твои "константные" вопросы. Что это и с чем их едят? На пальцах, если не трудно.
← →
jiny (2005-12-20 10:46) [3]Константные вопросы это те вопросы, которые встречаются практически во всех анкетах (пол, возраст, социально-профессиональные категории, национальность и т.д.)
По сути это такие же вопросы как и все остальные только для удобства пользователей, возведены в статус "справочников", где ответы это записи "справочника". Сделано это для того, чтобы добавлять новые "Константные" вопросы без изменения кода программы.
← →
Курдль © (2005-12-20 10:54) [4]
> Сделано это для того, чтобы добавлять новые "Константные"
> вопросы без изменения кода программы.
А разве нельзя добавлять любые вопросы без изменения кода программы?
Разве не для того существуют БД?
:(
← →
Sergey13 © (2005-12-20 11:00) [5]Честно говоря, мне не шибко нравится:
1. Смешивание 2 типов вопросов/ответов в одной структуре.
2. Способ обработки "константных" вопросов, когда надо вколачивать в таблицу имена таблиц и полей.
Я бы наверное пошел по другому пути. Для "константных" сделал бы отдельную структуру, позволяющую дополнение. Ведь по сути это справочники.
← →
jiny (2005-12-20 14:10) [6]Sergey13 © (20.12.05 11:00) [5]
Знаешь, ты мыслишь точно также, как и я в начале проекта,
но некая госструктура, выдвинула требование, чтобы было
присутствие неких "константных" вопросов. Сказано - сделано, мне не
сложно, да и прикольно немного. Только вот неЗАДАЧА - нужно чтобы
данные(ответы на вопросы) можно было формировать в разрезе любого из так называемых "константных" вопросов(параметров или как угодно).
Вручную я сделал формирование по всем вышеуказанным параметрам, т.е. в разрезе каждого параметра, с тем чтобы не париться, когда будут создавать новые (другие) "константные" вопросы.
← →
evvcom © (2005-12-20 14:22) [7]Твои "константные" и "не константные" вопросы по сути ничем не отличаются. Слей их воедино, и уж если существует такое требование, добавь просто флаг в таблице. А так какая разница, откуда родом этот вопрос, из анкеты или придуманного кем-то опросом?
← →
Sergey13 © (2005-12-20 15:12) [8]2[7] evvcom © (20.12.05 14:22)
Так у него вроде так и есть. 8-)
А отличаются они как раз по сути. Надо обрабатывать одни в разрезе других. Я бы разделил наверное.
ИМХО все.
← →
evvcom © (2005-12-20 15:25) [9]
> Так у него вроде так и есть. 8-)
А мне показалось, что ни фига не так. Разные таблицы ankets и CONSTANT_LIST. В анкетах ограниченный список (идентификаторов?) вопросов (профессия, национальность и пр.) А стукнет им в голову дополнить этот список еще одним (двумя, тремя, ...) "стандартными" вопросами и что? Менять структуру и код клиента? Хотя по сути это те же вопросы, что и "Кто убил кролика Роджера?"
← →
jiny (2005-12-20 16:29) [10]Sergey13 © (20.12.05 15:12) [8]
Спасибо, что хоть ты понял меня, у меня на самом деле и те и другие, что видно по структуре табл.Questions, слиты в одной таблице, различающейся по флагу ID_constant
Вот что мне нужно (пример) :
Тема : Постэлекторат
Вопросы :
I. Вы довольны результатами выборов ?
Ответы к I:
1. Да, в полной мере.
2. Нет
3. Я не могу судить объективно.
4. Затрудняюсь ответить
II. Вы были свободны в выборе своего кандидата ?
1. Да, это был мой осознанный выбор.
2. Нет, я был не свободен в выборе кандидата.
3. Затрудняюсь ответить
III. Ваш пол :
1. Мужской.
2. Женский.
IV. Ваш возраст :
1. от 18 до 29 лет.
2. от 30 до 45 лет.
3. от 46 до 61 года
4. от 61 и старше
V. Ваша социально-профессиональная категория :
1. Рукодитель предприятия, организации
2. Работник промышленности.
3. Работник науки, культуры и образования.
4. Работник милиции, судов.
5. Военный
Так вот, III,IV,V вопросы - это константные вопросы, ответы к которым беруться из справочников, а I,II вопросы - это обычные вопросы, ради которых и проводится соц.исследование.
В таблицу "Вопросы"(questions) они заливаются вместе, с той лиш разницей, что обычные вопросы имеют в поле ID_CONSTANT=0, а "константные" в поле ID_CONSTANT=ID строки в таблице CONSTANT_LIST, и в ответах - также, ID_CONSTANT=ID элемента в соответствующем записи справочнике (например если в answers ID_CONSTANT=3, table_constant="ages",field_constant="age" это значит, что id=3 в справочнике возрастных групп, поле "age" находиться в табл. ankets, чтобы потом можно было как то запись идентифицировать. Вот .
Мне нужно чтобы отчеты формировались с перечислением I и II вопросов
в разрезе III, либо IV, либо V вопросов.
← →
evvcom © (2005-12-20 16:42) [11]
> Мне нужно чтобы отчеты формировались с перечислением I и
> II вопросов
> в разрезе III, либо IV, либо V вопросов.
И все равно это не повод, чтобы их так разносить. Флаг поставь. А как ты будешь SQL писать со своими table_constant="ages"? Опять динамически?
← →
Sergey13 © (2005-12-20 16:53) [12]2[10] jiny (20.12.05 16:29)
Интересная задача. Тут думать надо. 8-) А времени нет. 8-(
В конечном итоге тебе надо добиться группировки по "обычному" вопросу и "константному", а агрегатом должен быть "обычный" ответ.
Может тебе просто избавиться от CONSTANT_LIST? Зачем она - я так до конца и не понял. Есть вопрос и к нему ответы. Вопросы с признаком такой/сякой. Ну и фильтровать по этому признаку.
И еще. Я бы подумал о том, что бы привязку вопроса к теме опроса вынести в отдельную таблицу для того, что бы можно было "констрейнты" привязывать много раз к разным темам (они же наверняка повторяются).
← →
jiny (2005-12-20 20:19) [13]Sergey13 © (20.12.05 16:53) [12]
>>И еще. Я бы подумал о том, что бы привязку вопроса к теме опроса
>>вынести в отдельную таблицу для того, что бы можно было "констрейнты"
>>привязывать много раз к разным темам (они же наверняка повторяются).
Согласен, я уже думал об этом, только пока это не первоочередная задача.
Насчет своего основного вопроса. я сделал возможность выбора одного из доступных для конкретной темы "К" вопросов, с тем чтобы формировать данные в разрезе выбранного. пока так.На ум ничего больше не приходит
>>Может тебе просто избавиться от CONSTANT_LIST? Зачем она - я так до
>>конца и не понял. Есть вопрос и к нему ответы. Вопросы с признаком
>>такой/сякой. Ну и фильтровать по этому признаку.
constant_list - это промежуточная таблица, где РЕГИСТРИРУЮТСЯ все будущие "К" вопросы, помимо этого она служит для настройки "К" вопросов, которые будут использоваться в темах, чтобы исключить ненужные.
evvcom © (20.12.05 16:42) [11]
>>И все равно это не повод, чтобы их так разносить. Флаг поставь. А как ты
>>будешь SQL писать со своими table_constant="ages"? Опять динамически?
понимаешь, дляпользователя, равно как и для программы абсолютно по барабану "константный" это вопрос или нет, это важно для дальнейшей логики отчетов, флаг причастности или непричастности к "К" уже стоит,
а забил я "к" вопросы к обычным вопросам, т.к. на основе конкретной темы, сначала формируется анкетный лист, т.е. для живого человека, чтобы он мог ручечкой шариковой пометки сделать. Стараюсь максимально автоматизировать процесс.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c