| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Подскажите структуру БД |
| Автор: wer88 14.6.2009, 15:38 |
| Необходимо создать базу данных социологических опросов, в базе имеются следующие таблицы:анкета, тема опроса, вопросы и ответы по выбранной теме. Интересует структура при которой можно сохранить 3Н.Ф. Заранее благодарен за помощь. |
| Автор: Gluttton 14.6.2009, 16:24 |
| 1. Задача поставлена не полностью, т.к. не указаны атрибуты сущностей (поля таблиц). 2. Говорить о соответствии 3НФ или другой НФ можно будет лишь после выполнения п. 1. 3. Вот что пришло в голову мне в самом общем виде: ![]() В данной БД таблицы "Вопрос" и "Ответ" не что иное как словари... На сколько я понимаю условия 3НФ здесь выполняються. Но наверняка потребуется дополнить БД какой либо ещё информацией, а это в свою очередь может и повлиять на степень нормализации БД. Задача поставлена с конца... В моем понимании проектирование БД происходит следующим образом: 1. Выбор предметной обласи, которую должна описывать БД. 2. Определение основных сущностей. 3. Определение связей между сущностями. 4. Определение атрибутов сущностей. 5. Физическая реализация (преобразование логической структуры в физическую). 6. Решение вопросов оптимизации, в данном случае - нормализация (по сути тот же п.5). И как правило сколько и каких таблиц будет в БД (определяется на этапе 5) зависит от того, зачем нужна эта БД (этапы 1-4). Нормализация (не сталкивался сильно плотно, поэтому не могу сказать что всегда) как вариант может привести к изменению количества таблиц. В вашем случае БД при наложении ограничений на этапы 3, 5, 6 осуществляется попытка решить вопросы этапов 1, 2, 4... Получается, что БД уже спроектирована, а вот что она будет описывать это теперь не проблемы разработчика |
| Автор: wer88 14.6.2009, 16:46 |
| Спасибо за ответ! Теории правда слишком много) Остальные поля таблиц не существенны, там как их понимаю как сделать. Вот именно проблема с этими 3мя. Проблема в том что если так сделать то вопросы никак не будут зависеть от темы опроса. Вот полная постановка задачи что бы внести ясность: "Для заполняющих анкету используются следующие поля: возраст, пол, место жительства и т.д. Опрос должен быть произведён на различные темы, по каждой теме несколько вопросов" |
| Автор: Gluttton 14.6.2009, 17:19 | ||||
Диалог перешол в конструктивную плоскость
Ну дык 3НФ А почему собственно говоря вопросы должны зависить от темы? Я думаю вопросы типа: - место работы? - вероисповедание? - партийность? - ориентация? - и многие другие. вполне могут присутствовать в нескольких опросах.
А тут я вообще запутался Я вижу всё следующим образом: 1. Опрос (по телевизору говорят: "... по результатам опроса проведенного ... х% опрошеных ответили...) - это мероприятие по изучению мнения опрашиваемых в рамках одной темы. 2. Анкета - набор вопросов и соответстующих им ответов в рамках опроса одного респондента. 3. Как говорил выше, "Вопросы" и "Ответы" - это словари. Кстати использовать таблицу "Ответы" логично лишь в том случае, когда множество ответов строго органичено иными словами в анкетах можно отвечать только так:Да, Нет, Не знаю, хочу, не хочу, ... и при этом в анкетах не должно быть вопросам типа: "расскажите о себе". В противном случае, она (таблица) рискует вырасти до огромных размеров. |
| Автор: wer88 14.6.2009, 17:29 |
| Ну смысл такой, есть темы разные, допустим "политика", в ней вопросы только про политику, и когда будем заполнять базу то если в опросе на тему политика другие вопросы мы не можем выбрать. Поэтому и проблемы что в посатановке задачи указано что опросы могут быть на различные темы. А ответы хочу сделать только да/нет, что бы меньше проблем, т.е. ответы не зависят от тематики. |
| Автор: Gluttton 14.6.2009, 17:36 |
| У-упс Для описаной мною БД в предыдущем посте структура будет такая: ![]() Пришлось добавить дополнительную таблицу для обеспечения связи "многое ко многим", иными словами для того, что бы в одной анкете могли быть различные вопросы (больше одного) и один и тот же вопрос мог бы использоваться в различных анкетах... А вот с учетом группировки опросов по темам: ![]() |
| Автор: Gluttton 14.6.2009, 18:05 | ||
Akina, а про варианты ответов я как то и не подумал
Что то типа такого? ![]() wer88, количество таблиц строго ограничена? |
| Автор: wer88 14.6.2009, 18:14 |
| Gluttton, Вроде второй вариант самое оно) Спасибо! Надеюсь перенос БД в интербейз и далее в программу не выявит больше проблем. Ещё раз спасибо, буду сейчас пробовать! Добавлено через 2 минуты и 13 секунд Gluttton, Количество таблиц не ограничено, но дальше ещё запросы писать и анализ данных, так что чем сложнее база тем сложнее это будет делать. Добавлено через 8 минут и 26 секунд Gluttton, Третий вариант как то смущает, тут получается при заполнении анкеты мы выбираем сразу вопрос с уже указанной темой, а не тему а уже по ней вопрос. Т.е. хочу сказать что при заполнении таблицы содержания анкеты, выбирая ответ будет неизвестно по какой он теме( |
| Автор: Akina 14.6.2009, 18:37 | ||
Начните не с построения вариантов структуры, а с выделения сущностей - ведь даже этого в полном объёме не сделано... затем определите их соотношения, потом постройте связи... а то пока фигня сплошная получается.
Отличный пример фигни, кстати. Как в структуре, так и (уж извините) в голове вопрошающего. |
| Автор: wer88 16.6.2009, 12:10 |
Gluttton, Спасибо большое!!! Решил остановить свой выбор на такой структуре:![]() Только теперь другая проблема возникла, необходимо написать запрос: подсчитать соотношение количества ответов по теме к количеству положительных ответов на эту тему, при чем соотношение необходимо подсчитать для анкет где указан возраст до 30 и после 30, т.е. разные возрастные группы. Если кто что подскажет буду очень благодарен. |
| Автор: Zloxa 16.6.2009, 13:40 | ||||
|
| Автор: Akina 16.6.2009, 13:44 |
| Структура - плохая откровенно. Представь, что вопрос анкеты предполагет несколько фиксированных ответов, выбор из них (или только одного, или любого количества) - где ты будешь хранить бланк анкеты? А несколько вариантов ответа? А если допустим ответ "Свой вариант"? Представь себе, что один вопрос включён в несколько опросов - что будешь делать? Дублировать? Представь себе что один отвечающий заполняет сразу несколько бланков опросов - тоже будешь дубли плодить? И так далее, и тому подобное... |
| Автор: wer88 16.6.2009, 17:05 | ||
| Akina, Да я понимаю что плохая, но выбора у меня нету, я не специалист по бд, и знаю их поверхностно, но база очннь нужна. Zloxa, Огромное спасибо) таких конструкций никогда ещё не видел, нам в универе базы дали лишь бы было. Вбил вот такой код:
К сожалению ругается: ![]() П.с. не помню написал ли, мне нужен скрипт что бы для каждой темы считал это соотношение, буду крайне признателен, и прошу прощения за свою некомпитентность в вопросе, потому и обратился за помощью. |
| Автор: Zloxa 16.6.2009, 17:49 |
К радости ли, к горю ли, я не являюсь экспертом по IB, однако поиск в гугле по ключевым словам "http://www.google.ru/search?hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=wHF&newwindow=1&q=interbase+case&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq=" по второй же ссылке дал обсуждение http://www.sql.ru/forum/actualthread.aspx?tid=546642, в качестве солюшина было предложено сменить сервер. |
| Автор: wer88 16.6.2009, 19:18 | ||
К сожалению данный вариант не приемлим, так как с тем сервером, на котором тестировал, уже связана почти готовая программа, и работать ей предстоит на нём (( Поставил для проверки новый, он выдает: ![]() но это уже в принципе не важно, надо другой скрипт обдумывать что бы работал на том. |
| Автор: Zloxa 16.6.2009, 23:09 |
Обдумайте. Если не удастся, попробуйте обратиться за помощью в http://forum.vingrad.ru/forum/Interbase-database.html. Модератор: Пожалуйста, один топик - один вопрос. |
| Автор: Zloxa 17.6.2009, 01:07 | ||
|