Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про размещение данных в таблице  (Прочитано 9482 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 04-07-2008 15:27 » 

Пишется программа для анкетирования пользователей на Visual C++ с использованием бд MySql.
Существует 3 таблицы:
1. Таблица с вопросами. 1 запись,-1 вопрос.
2. Таблица с вариантами ответов для каждого вопроса.
3. Таблица с ответами пользователя.
Вопрос в том, как наиболее оптимально в данном случае расположить варианты ответов для каждого вопроса во 2 таблице?
Например, вопрос:
"Укажите ваш возраст:" -запись в таблице с вопросами, а ниже радио кнопки с вариантами ответа: "14-18","18-30","30-40","40-50","50-60","60 и более". Получается что 1му вопросу, соответствуют 6 возможных вариантов ответа и только 1 ответ из них будет помещён в таблицу с ответом пользователя. Разумеется вопросы и варианты ответов будут загружаться программно из таблицы,-но как тогда прикрепить 6 вариантов ответа к 1му вопросу?
а) В таблице с вариантами ответов добавить поле, в котором прописывать к какому вопросу принадлежит вопрос, но в таком случае получиться 10 записей с вопросами, и более 40-60 записей с предложенными ответами
б) Перечислять варианты ответов через разделительный символ в 1м поле
Что ещё можно придумать?

2Чёто я подумал немного, и понял что похоже спорол горячку.
в) Самое оптимальное наверно создать таблицу с вариантами ответов, в которой будет столько полей-сколько максимальных ответов для вопросов существует. Но тогда может получиться, что для 1 вопроса существует 2 ответа "Да","Нет" а 4 других поля будут пустыми, а для другого все 6 будут заполнены
« Последнее редактирование: 04-07-2008 16:01 от FallenSoul » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-07-2008 17:13 » 

я бы вот так таблицы сделал:

T1: ID_Q , Question

T2: ID_A , ID_Q , Answer

T3: ID_U , ID_Q , ID_A
Записан

FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 04-07-2008 18:19 » 

я бы вот так таблицы сделал:

T1: ID_Q , Question

T2: ID_A , ID_Q , Answer

T3: ID_U , ID_Q , ID_A


Тоесть:

T1: 1, Ваш возраст?
Т1: 2, Ваше любимое время года?

Т2: 1, 1, 14-18
Т2: 2, 1, 18-30
T2: 1, 2, Зима
Т2: 2, 2, Лето

Т3: User0001, 1, 1
Т3: User0001, 2, 2

Пользователь 0001.
 Возраст: 14-20
 Время года: Зима

Я правильно понял?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 04-07-2008 18:28 » 

ага

T1:
    ID_Q   Question
    1          возраст ?
    2          пол?
    3          полезные привычки ? (рит.)
...
...


T2:
    ID_A    ID_Q    Answer
    1          1            7 лет
    2          1            100 лет 
    3          1            80 лет 
    4          2            мужской
    5          2            женский
    6          3            есть
    7          3            нет
...
...


T3:
    ID_U       ID_Q      ID_A
    1               1             3
    1               2             4
...
...
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 04-07-2008 18:40 » 

с одной стороны Алексей1153++ прав, почему бы и нет
с другой
пол = может быть м, ж, с. Улыбаюсь = отдельная таблица, а вдруг появится еще один пол Улыбаюсь куак в случае с залогами в русском языке Ага
возраст = бла...бла, ... - а вдруг появится что-то промежуточное?

и т.д.

Я к чему? На разные по смыслу данные  - разные таблицы.
В случае корректировки - триггера  и т.п.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 05-07-2008 05:23 » 

Sla, появилсо пол Z - добавили запись

T2:
    ID_A    ID_Q    Answer
    1          1            7 лет
    2          1            100 лет 
    3          1            80 лет 
    4          2            мужской
    5          2            женский
    6          3            есть
    7          3            нет
    8          2            Z
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 05-07-2008 10:01 » new

Имеют право на существование оба варианта:
1. Каждая запись таблицы ответов относится только к одному вопросу.
2. Каждая запись таблицы ответов может относиться к любому числу вопросов.

В первом случае номер вопроса включается в запись ответа, а во втором случае создается от дельная таблица для линковки вопрос/ответы.
Плюсы: 1 - удобнее для управления и внесения новых анкет, 2 - компактнее для часто повторяющихся вопросов.

Стоит рассмотреть несколько типовых анкет, которые надо будет вносить в базу, и понять, какой вариант предпочтительнее.
Если ответы очень часто повторяются, то, возможно, второй вариант даст какой-то выйгрыш.
Еще стоит прикинуть, как часто будут создаваться анкеты. Если редко, то лучше выбрать первый вариант.

По личному опыту: только ради часто повторяющихся "да", "нет", "муж.", "жен." не стоит использовать вариант 2.

И еще мысль: наверняка в анкете есть вопросы, смысл отвечать на которые есть только по результатам ответа на предыдущие вопросы.
Напр,:
1. Пьете?
2. Часто пьете?
3. Закусывать не пробовали?
4. Как настроение?
Нужно ветвление с обходом п.п. 2 и 3 при ответе "нет" на п.1.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines