Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите структуру БД, предметная область:соц. опрос 
:(
    Опции темы
wer88
Дата 14.6.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Необходимо создать базу данных социологических опросов, в базе имеются следующие таблицы:анкета, тема опроса, вопросы и ответы по выбранной теме. Интересует структура при которой можно сохранить 3Н.Ф. 
Заранее благодарен за помощь.
PM MAIL   Вверх
Gluttton
Дата 14.6.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 10
Всего: 54



1. Задача поставлена не полностью, т.к. не указаны атрибуты сущностей (поля таблиц).
2. Говорить о соответствии 3НФ или другой НФ можно будет лишь после выполнения п. 1.
3. Вот что пришло в голову мне в самом общем виде:
user posted image

В данной БД таблицы "Вопрос" и "Ответ" не что иное как словари...
На сколько я понимаю условия 3НФ здесь выполняються. Но наверняка потребуется дополнить БД какой либо ещё информацией, а это в свою очередь может и повлиять на степень нормализации БД.

Задача поставлена с конца... В моем понимании проектирование БД происходит следующим образом:
1. Выбор предметной обласи, которую должна описывать БД.
2. Определение основных сущностей.
3. Определение связей между сущностями.
4. Определение атрибутов сущностей.
5. Физическая реализация (преобразование логической структуры в физическую).
6. Решение вопросов оптимизации, в данном случае - нормализация (по сути тот же п.5).

И как правило сколько и каких таблиц будет в БД (определяется на этапе 5) зависит от того, зачем нужна эта БД (этапы 1-4).
Нормализация (не сталкивался сильно плотно, поэтому не могу сказать что всегда) как вариант может привести к изменению количества таблиц.

В вашем случае БД при наложении ограничений на этапы 3, 5, 6 осуществляется попытка решить вопросы этапов 1, 2, 4... Получается, что БД уже спроектирована, а вот что она будет описывать это теперь не проблемы разработчика smile . 


--------------------
Слава Україні!
PM MAIL   Вверх
wer88
Дата 14.6.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Спасибо за ответ! Теории правда слишком много) 
Остальные поля таблиц не существенны, там как их понимаю как сделать. Вот именно проблема с этими 3мя. Проблема в том что если так сделать то вопросы никак не будут зависеть от темы опроса. 
Вот полная постановка задачи что бы внести ясность:
"Для заполняющих анкету используются следующие поля: возраст, пол, место жительства и т.д.
Опрос должен быть произведён на различные темы, по каждой теме несколько вопросов"
PM MAIL   Вверх
Gluttton
Дата 14.6.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 10
Всего: 54



Диалог перешол в конструктивную плоскость smile .

Цитата

Проблема в том что если так сделать то вопросы никак не будут зависеть от темы опроса.

Ну дык 3НФ smile ...

А почему собственно говоря вопросы должны зависить от темы? Я думаю вопросы типа:
- место работы?
- вероисповедание?
- партийность?
- ориентация?
- и многие другие.
вполне могут присутствовать в нескольких опросах.

Цитата

Опрос должен быть произведён на различные темы, по каждой теме несколько вопросов"

А тут я вообще запутался  smile ... Если в рамках одного опроса могут быть различные темы, то собственно говоря, что идентифицирует опрос?

Я вижу всё следующим образом:
1. Опрос (по телевизору говорят: "... по результатам опроса проведенного ... х% опрошеных ответили...) - это мероприятие по изучению мнения опрашиваемых в рамках одной темы.
2. Анкета - набор вопросов и соответстующих им ответов в рамках опроса одного респондента.
3. Как говорил выше, "Вопросы" и "Ответы" - это словари. Кстати использовать таблицу "Ответы" логично лишь в том случае, когда множество ответов строго органичено иными словами в анкетах можно отвечать только так:Да, Нет, Не знаю, хочу, не хочу, ... и при этом в анкетах не должно быть вопросам типа: "расскажите о себе". В противном случае, она (таблица) рискует вырасти до огромных размеров.


--------------------
Слава Україні!
PM MAIL   Вверх
wer88
Дата 14.6.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Ну смысл такой, есть темы разные, допустим "политика", в ней вопросы только про политику, и когда будем заполнять базу то если в опросе  на тему политика другие вопросы мы не можем выбрать. Поэтому и проблемы что в посатановке задачи указано что опросы могут быть на различные темы.  А ответы хочу сделать только да/нет, что бы меньше проблем, т.е. ответы не зависят от тематики.  
PM MAIL   Вверх
Gluttton
Дата 14.6.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 10
Всего: 54



У-упс smile ...

Для описаной мною БД в предыдущем посте структура будет такая:

user posted image

Пришлось добавить дополнительную таблицу для обеспечения связи "многое ко многим", иными словами для того, что бы в одной анкете могли быть различные вопросы (больше одного) и один и тот же вопрос мог бы использоваться в различных анкетах...

А вот с учетом группировки опросов по темам:

user posted image

Это сообщение отредактировал(а) Gluttton - 14.6.2009, 17:41


--------------------
Слава Україні!
PM MAIL   Вверх
Akina
Дата 14.6.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Gluttton @  14.6.2009,  17:24 Найти цитируемый пост)
В данной БД таблицы "Вопрос" и "Ответ" не что иное как словари...

На самом деле не должно быть так. Сама совокупность данных (Тема - Вопрос - Варианты ответа - Ответ) явно тянет на больше, чем быть словарями.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gluttton
Дата 14.6.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 10
Всего: 54



Akina, а про варианты ответов я как то и не подумал smile ...
Цитата

На самом деле не должно быть так. Сама совокупность данных (Тема - Вопрос - Варианты ответа - Ответ) явно тянет на больше, чем быть словарями.

Что то типа такого?
user posted image

wer88, количество таблиц строго ограничена?


--------------------
Слава Україні!
PM MAIL   Вверх
wer88
Дата 14.6.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Gluttton, Вроде второй вариант самое оно) Спасибо! Надеюсь перенос БД в интербейз и далее в программу не выявит больше проблем.

Ещё раз спасибо, буду сейчас пробовать!

Добавлено через 2 минуты и 13 секунд
Gluttton, Количество таблиц не ограничено, но дальше ещё  запросы писать и анализ данных, так что чем сложнее база тем сложнее это будет делать.

Добавлено через 8 минут и 26 секунд
Gluttton, Третий вариант как то смущает, тут получается при заполнении анкеты мы выбираем сразу вопрос с уже указанной темой, а не тему а уже по ней вопрос. Т.е. хочу сказать что при заполнении таблицы содержания анкеты, выбирая ответ будет неизвестно по какой он теме(
PM MAIL   Вверх
Akina
Дата 14.6.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Начните не с построения вариантов структуры, а с выделения сущностей - ведь даже этого в полном объёме не сделано... затем определите их соотношения, потом постройте связи... а то пока фигня сплошная получается.
Цитата(wer88 @  14.6.2009,  19:14 Найти цитируемый пост)
получается при заполнении анкеты мы выбираем сразу вопрос с уже указанной темой, а не тему а уже по ней вопрос. Т.е. хочу сказать что при заполнении таблицы содержания анкеты, выбирая ответ будет неизвестно по какой он теме( 

Отличный пример фигни, кстати. Как в структуре, так и (уж извините) в голове вопрошающего.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wer88
Дата 16.6.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Gluttton, Спасибо большое!!! Решил остановить свой выбор на такой структуре:
user posted image
Только теперь другая проблема возникла, необходимо написать запрос:
подсчитать соотношение количества ответов по теме к количеству положительных ответов на эту тему, при чем соотношение необходимо подсчитать для анкет где указан возраст до 30 и после 30, т.е. разные возрастные группы. Если кто что подскажет буду очень благодарен. 
PM MAIL   Вверх
Zloxa
Дата 16.6.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(wer88 @  16.6.2009,  12:10 Найти цитируемый пост)
подсчитать соотношение количества ответов по теме к количеству положительных ответов на эту тему, при чем соотношение необходимо подсчитать для анкет где указан возраст до 30 и после 30, т.е. разные возрастные группы.


Код

select 
     max(тема.тема) "Тема"
    ,count(*) "Ответов всего"
    ,count(ответ.код) "Положительных Всего"
    ,count(*)/count(ответ.код) "Отношение положительных" 
    ,count(ответ.код)/count(case when анкета.возраст < 30 then 1 end) "Отношение Положительных до 30"
    ,count(ответ.код)/count(case when анкета.возраст >30 then 1 end) "Отношение Положительных после 30"
  from данные
  left join ответ on ответ.код = данные.код_ответа and ответ.ответ = 'Да'
  inner join анкета on анкета.код = данные.код_анкеты
  inner join опрос on анкета.код_опроса = опрос.код
  inner join тема on опрос.код_темы = тема.код
group by тема.код





--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 16.6.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Структура - плохая откровенно.
Представь, что вопрос анкеты предполагет несколько фиксированных ответов, выбор из них (или только одного, или любого количества) - где ты будешь хранить бланк анкеты? А несколько вариантов ответа? А если допустим ответ "Свой вариант"?
Представь себе, что один вопрос включён в несколько опросов - что будешь делать? Дублировать?
Представь себе что один отвечающий заполняет сразу несколько бланков опросов - тоже будешь дубли плодить?
И так далее, и тому подобное... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wer88
Дата 16.6.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2009

Репутация: нет
Всего: нет



Akina, Да я понимаю что плохая, но выбора у меня нету, я не специалист по бд, и знаю их поверхностно, но база очннь нужна. 

Zloxa, Огромное спасибо) таких конструкций никогда ещё не видел, нам в универе базы дали лишь бы было. 
Вбил вот такой код: 
Код

select
     max(tema.nazv)
    ,count(*) 
    ,count(otvet.kod)  
    ,count(*)/count(otvet.kod) 
    ,count(otvet.kod)/count(case when anket.vozr < 30 then 1 end) 
    ,count(otvet.kod)/count(case when anket.vozr >30 then 1 end) 
  from anket_t
  left join otvet on otvet.kod = anket_t.k_otv and otvet.otvet = 'Да'
  inner join anket on anket.kod = anket_t.k_anket
  inner join opros on anket.k_opr = opros.kod
  inner join tema on opros.k_temi = tema.kod
group by tema.kod

К сожалению ругается: 
user posted image
П.с. не помню написал ли, мне нужен скрипт что бы для каждой темы считал это соотношение, буду крайне признателен, и прошу прощения за свою некомпитентность в вопросе, потому и обратился за помощью. 
PM MAIL   Вверх
Zloxa
Дата 16.6.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(wer88 @  16.6.2009,  17:05 Найти цитируемый пост)
К сожалению ругается: 

К радости ли, к горю ли, я не являюсь экспертом по IB, однако поиск в гугле по ключевым словам "Interbase Case" по второй же ссылке дал обсуждение схожей проблемы, в качестве солюшина было предложено сменить сервер.


Это сообщение отредактировал(а) Zloxa - 16.6.2009, 17:50


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.