Консультация № 170616
20.07.2009, 14:42
0.00 руб.
0 6 3
Добрый день. Решил сделать программу по проведению тестов, вопрос возник в реализации базы вопросов. есть 5 типов вопросов, каждый тип хранится в отдельной таблице. Есть ли смысл разделять эти таблицы ещё на таблицы по предметам? То есть делать на каждый предмет по 5 таблиц, или проще так и оставить 5 таблиц всего? Заранее спасибо. Надеюсь сделать на этой программе диплом, и применять её дальше, то есть интересует прикладной аспект. СУБД MySQL 5. Язык программирования С++. Спасибо всем кто откликнется.

Обсуждение

Неизвестный
20.07.2009, 15:17
общий
это ответ
Здравствуйте, Сердюков Павел.

Я бы оставил разделение только по 5-ти типам. Насколько я понял, данные типы вопросов между собой несовместимы (требуют разной обработки).
Ну а для предметов разницы нет, нужен только признак принадлежности вопроса определенному предмету.
Не забудьте только проиндексировать поле "Предмет".
Неизвестный
20.07.2009, 15:35
общий
Сердюков Павел:
По Вашему описанию - достаточно ОДНОЙ таблицы (!).
Приведите структуру Ваших уже имеющихся таблиц. Может мы предложим более элегантное (правильное) решение.
Неизвестный
20.07.2009, 16:01
общий
_Ayl_:
А производительность не будет страдать? То что за каждым вопросом придется все вопросы в базе перебирать?
Неизвестный
20.07.2009, 16:04
общий
это ответ
Здравствуйте, Сердюков Павел.
Я бы советовал сделать одну таблицу. Только добавить два поля: код предмета и код типа. Так говорит заратустра по имени теория реляционных баз данных
Неизвестный
20.07.2009, 16:43
общий
Сердюков Павел:
Для того, чтобы не перебирать ВСЕ вопросы, в базах данных существуют индексы.
Запрос, который требует FULL SCAN - плохой запрос (кроме случаев, когда нам действительно необходимы все (или почти все) записи).
При грамотной организации таблиц и индексов, а также нормальном написании запроса все должно летать. Не вижу, где здесь требуется полный перебор вопросов.
На самом деле непонятно, что скрывается за понятием "тип вопроса".
Если вопросы разного типа сильно различаются своими характеристиками в базе, то лучше иметь 5 таблиц, по одной на каждый тип.
Если они различаются второстепенными признаками - достаточно одной таблицы и поля "тип вопроса" (индексированного)
давно
Академик
320937
2216
20.07.2009, 23:27
общий
это ответ
Здравствуйте, Сердюков Павел.

1. Прежде всего необходимо отметить, что сам вопрос несколько поспешен,
нужно детальное описание бизнес-процесса, в том числе используемых объектов.
Количество таблиц - следствие общей стратегии.

2. Ответ на Ваш вопрос в общем виде я бы сформулировал так:
а) таблиц должно быть не меньше, чем описываемых классов объектов. Больше - наверняка.
К примеру, Вам захочется знать, кто, когда и каким образом редактировал вопросы.
Кто и как отвечал на них. Если это обучающая система, вопросы должны быть как-то связаны.
Все это привносит дополнительные таблицы.
б) должен быть использован принцип разумной достаточности.
При очень сильной нормализации теряется скорость при запросах
к связанным таблицам,при недостаточной - дублирование и проблемы
целостности.
Рассмотрим нашу модель тестов. В любом случае у Вас есть классы и,
соответственно, таблицы:
Предмет (id, Название);
Вопрос(id, Текст, idПредмета,..., idТипаВопроса)
Допустим, есть вопросы, содержащие картинки (тип 1).
Есть вопросы, где нужно сделать выбор из нескольких ответов. (тип 2).
Есть вопросы, где нужно по формуле записать ответ (тип 3).
Эти типы (классы) являются наследниками от класса "Вопрос".
Появляется таблица "Типы вопросов" (id, Название, Описание)
Например, для вопросов с картинками можно указать имя файла картинки.
Появляется таблица "ВопросыСКартинкой" (id, idВопроса, ИмяФайла)
..
Каждый вопрос может относиться к некоему предмету или, точнее, предметной области.
Каждый вопрос может относиться к некоторому уровню, как, например, в RFPRO.RU

3. Бизнес-логика, как правило, описывается в триггерах и хранимых процедурах.
одними таблицами не обойдешься.

4. Для квалифицированной работы с базами данных необходимо изучать специальную
литературу, и первой книгой я посоветовал бы Мартина Грубера "Понимание SQL"

В любом случае, чтобы более компетентно ответить на Ваш вопрос, необходимо более пространное объяснение, того что будет представлять собой Ваша тест-система.
Форма ответа