Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.092 c
11-1119863275
RA2
2005-06-27 13:07
2006.02.19
Вопрос о KOLIB


15-1138594840
vidiv
2006-01-30 07:20
2006.02.19
Вопрос по MySQL: LEFT JOIN и RIGHT JOIN


15-1138449645
Хинт
2006-01-28 15:00
2006.02.19
Дурацкий вопрос


15-1138476997
syte_ser78
2006-01-28 22:36
2006.02.19
dma для dvd


1-1137509107
_RusLAN
2006-01-17 17:45
2006.02.19
Записать свою информацию на вкладку "Сводка" в свойствах файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский