Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД подготовки к единому госэкзамену. / 20 сообщений из 20, страница 1 из 1
26.10.2003, 12:00
    #32305341
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Сперва о предметной области:
Все вы наслышаны о одином государсвенном экзамене, так вот моя программа призвана служить бедным выпускникам для подготовки к единому экзамену, а именно разделу математика.
Структура теста такова:
Имеется 3 категории: А, В, С.
Категория А: Всего в разделе А пять вопросов. Пользователь просто выбирает правильынй ответ. Причем как в вопросе так и в ответе содержаться формулы.
Правильный ответ может быть только один.
Категория В: В разделе 3 вопроса. На форме отображается Компонент Edit и пользователь вводит в него целое чисто являющееся ответом. В вопросе попрежнему может быть формула.
Категория С: В разделе 2 вопроса. Пользователь решает задание которое ему предлагает программа, просматривает решение задачи, нажав на соответсвующую кнопку, и выставляет себе оценку от 0 до 3 баллов.

Всего таких тестов в районе 80 и состаляться эта БД будет на несколькиз компьютерах с последующей её сборкой в единое целое на одном. Вот тут то и проблема. Сперва я подумывал каждому тесту присвоить свой автоинкрементный id но так как разрабатываться она будет на разных компьютерах, то я так понимаю id будут совпадать и склеить правильно не получиться, вобщем выскажите всё что думаете, по поводу ключевых полей в таких случаях. Еще я бы хотел сравнить свой эскиз Бд с вашим чтобы придти к чему то оптимальному.
Всем заранее спасибо!
...
Рейтинг: 0 / 0
26.10.2003, 12:55
    #32305357
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Пока что я имею:
Бд из из 5 таблиц:
1)Таблица тем - хранение имен тестов и кол-ва вариантов
Уравнения и системы неравенств | 2
2)Таблица вопросов из части А
Сссылка на тему | Номер варианта | Номер вопроса | Вопрос (тип BLOB)
3)таблица ответов А
Ссылка на вопрос | Ответ (тип BLOB) | Метка (правильно/неправильно)
4)Таблица раздела В
Ссылка на тему | Номер вопроса | Вопрос (тип BLOB) | Ответ
5)Таблица раздела С
Ссылка на тему | Номер вопроса | Вопрос (тип BLOB) | Ответ (тип BLOB)

Как правильно ссылаться в данной ситуации?
...
Рейтинг: 0 / 0
27.10.2003, 09:23
    #32305638
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Имеется 3 категории: А, В, С.

Извиняюсь, но я немного не понял: "3 категории: А, В, С" - это категории или типы тестов , называемых "разделы"? Например...

Категория А: Всего в разделе А пять вопросов. Пользователь просто выбирает правильынй ответ. Причем как в вопросе так и в ответе содержаться формулы.

...т.е имеется раздел "А", в к-ром 5 заданий ("вопросов") и к-рые одного типа , т.е выглядят так:

Чему равно число е ? Выберите правильный вариант ответа:

А. 2,71828
Б. 3,14159
В. пределу последовательности (1 + 1/n) n при n -> ∞
Г. пределу последовательности (1 - 1/n) n при n -> -∞

Всего таких тестов в районе 80 и состаляться эта БД будет на несколькиз компьютерах с последующей её сборкой в единое целое на одном. Вот тут то и проблема. Сперва я подумывал каждому тесту присвоить свой автоинкрементный id но так как разрабатываться она будет на разных компьютерах, то я так понимаю id будут совпадать и склеить правильно не получиться, вобщем выскажите всё что думаете, по поводу ключевых полей в таких случаях.

Если создатели тестов будут разрабатывать разные тесты, то это не проблема, т.к для столбца ID с автоинкрементом (например, IDENTITY под MSSQL) можно задавать свой seed - начальное значение для каждого компьютера, т.е у вас на разных компьютрах ID будут в разных диапазонах, к-рые не пересекаются. Еще на всякий случай к столбцу ID можно привязать соответствующее ограничение, чтобы значения ID оставались в заданном диапазоне

Еще я бы хотел сравнить свой эскиз Бд с вашим чтобы придти к чему то оптимальному.

А что не запостили DDL? Просто обсуждать было бы удобнее

Сссылка на тему | Номер варианта | Номер вопроса | Вопрос (тип BLOB)

А зачем BLOB? Я очень давно разрабатывал похожую систему - тесты для студентов по механике, но правда на основе браузера (просто и сердито), т.е локального HTML с JavaScript и TDC компонентом для доступа к локальной "БД" (текстовый файл с разделителем). Там тоже были формулы в виде GIF-картинок. Не думали насчет того, чтобы хранить в БД текст вопроса (столбец типа VARCHAR), к-рый содержит ссылку на соответствующую картинку и к-рая потом вставляется
...
Рейтинг: 0 / 0
27.10.2003, 19:28
    #32306715
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Репликант ты всё правильно понял со структурой, но вот проблема БД не сетевая. Просто наполнить её надо будет за короткий срок, поэтому и создаваться она будет на разных компьютерах с последующим соединением.
Но всеравно большое спасибо за ответ! :) Жду дальнейших! :)
...
Рейтинг: 0 / 0
27.10.2003, 19:48
    #32306723
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
UiDzerO,
Какая используется СУБД?
Не поможет ли Вам репликация в этом деле?
...
Рейтинг: 0 / 0
27.10.2003, 20:05
    #32306740
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Здравствуйте ещё раз!
СУБД - paradox как имхо наиболее удобная в использовании вместе с Delphi
Что такое репликация я пока ещё не знаю, если подскажете толковый линк где про это можно прочитать буду очень признателен.
...
Рейтинг: 0 / 0
27.10.2003, 20:22
    #32306760
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Ну вопщем то насколько я понял из рассказов репликация связана с объединением таблиц в сетевых СУБД что в данный момент меня мало интересует. Интересует меня другое, какие использовать ссылки и индексы.
...
Рейтинг: 0 / 0
28.10.2003, 08:24
    #32306902
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
2 UiDzerO:
Репликант ты всё правильно понял со структурой, но вот проблема БД не сетевая. Просто наполнить её надо будет за короткий срок, поэтому и создаваться она будет на разных компьютерах с последующим соединением.

Даже если она не сетевая, то ты можешь выгрузить таблицы в текстовые/бинарные файлы, а потом сделать их загрузку на машине, где будет конечная БД с объединенными данными. Я просто не знаю есть там такая возможность в Paradox - вставка значений из файла в таблицу, у к-рой есть столбец с автоинкрементом?

Интересует меня другое, какие использовать ссылки и индексы.

А есть уже какая-нибудь эксизная модель данных или DDL? Хотя бы основные таблицы и столбцы, чтобы говорить более предметно или начинаем с "нуля"? :о)
...
Рейтинг: 0 / 0
28.10.2003, 12:05
    #32307218
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
"репликация связана с объединением таблиц в сетевых СУБД" - какое-то странное понимание репликации
...
Рейтинг: 0 / 0
28.10.2003, 15:17
    #32307624
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
2Репликант:
Свою модель я описал во втором посте, и ссылать

1)Таблица тем - хранение имен тестов и кол-ва вариантов

Строковый тип (name) | Целочисленный тип
Уравнения и системы неравенств | 2

2)Таблица вопросов из части А

name? (из табл1)|
Сссылка на тему | Номер варианта | Номер вопроса | Вопрос (тип BLOB)
______________________________________________ - ключ? (key)
3)таблица ответов А
Ссылка на вопрос (key?) | Ответ (тип BLOB) | Метка (правильно/неправильно)
4)Таблица раздела В
Ссылка на тему (name) | Номер вопроса | Вопрос (тип BLOB) | Ответ (тип BLOB)
5)Таблица раздела С
Ссылка на тему (name) | Номер вопроса | Вопрос (тип BLOB) | Ответ (тип BLOB)

Будет ли такая структура работать в нужном мне направлении?
И ещё я не понимаю зачем использовать картнки или файлы, если всё поидее хорошо храниться и в базе, а отображается в TRxRichEdit (доработанном компоненте в Delphi - RTF + OLE)
2Varan
Принимаю всё поправки и дополнения по этому поводу.
...
Рейтинг: 0 / 0
28.10.2003, 16:00
    #32307722
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Репликация - это не решение данной проблемы - а просто метод синхронизации данных - вопрос с повторяющимся ключем там тоже автоматически не решается. Для эого традиционно используются способы - типа игр с различным прирощением для ID различных БД или указание диапазонов и т.д.
...
Рейтинг: 0 / 0
29.10.2003, 10:08
    #32308368
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
2 UiDzerO:
Свою модель я описал во втором посте, и ссылать

Сорри, я опять написал "модель" - не модель, а DDL, т.к я кое-что опять не догоняю: Уравнения и системы неравенств | 2 - это что за столбец? К сожалению, СУБД Paradox не поддерживается в Sybase PowerDesigner и я не в курсе какая СУБД к нему ближе всего по синтаксису поэтому пока для MSSQL (тип image - это BLOB):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
 /*
Table: TEST_NAMES
Comment: Названия и ИД тестов категорий "A", "B" и "C", содержащих вопрос и варианты ответов.
*/ 
create table test_names (
 test_id              tinyint              identity( 1 , 1 ),   -- Уникальный ИД теста.
 
 testname             varchar( 50 )          not null,   -- Название теста.
 
 testype              tinyint              not null,   -- Тип теста.
 
 testcnt              tinyint              not null,   -- Кол-во вариантов ответов на вопрос теста.
 
constraint ucpk_tests primary key clustered (test_id)
)
go

 /*
Table: AANSWERS
Comment: Варианты ответов на вопросы категории "A".
*/ 
create table aanswers (
 answer_id            tinyint              identity( 1 , 1 ),   -- ИД варианта ответа.
 
 test_id              tinyint              not null,   -- ИД теста, к-рому принадлежит ответ.
 
 answer               image                not null,   -- Текст вопроса - RTF OLE объект.
 
 constraint ucpk_employee_address primary key clustered (answer_id),
 constraint fk_aanswers__test_names foreign key (test_id)
      references test_names (test_id)
      on delete cascade
)
go

 /*
Table: AQUESTIONS
Comment: Вопросы для тестов категории "A".
*/ 

create table aquestions (
 question_id          tinyint              not null,   -- Уникальный ИД вопроса или теста, к-рому принадлежит вопрос.
 
 answer_id            tinyint              not null,   -- ИД варианта ответа.
 
 question             image                not null,   -- Текст вопроса - RTF OLE объект.
 
constraint ucpk_employee_telefon primary key clustered (question_id),
constraint fk_aquestions__test_names foreign key (question_id)
      references test_names (test_id)
      on delete cascade,
constraint fk_aquestions__aanswers foreign key (answer_id)
      references aanswers (answer_id)
)
go


похоже на концептуальную модель для тестов категории A?

Я просто не использовал предложенное тобой имя "Тема", т.к это все-таки тест. Можно теоретически предположить и темы - группа вопросов из любых категорий A, B и C на одну тему, например, "Комплексные числа" или "Производные и интегралы"?

Будет ли такая структура работать в нужном мне направлении?

В смысле обеспечивать целостность данныъх?

И ещё я не понимаю зачем использовать картнки или файлы, если всё поидее хорошо храниться и в базе, а отображается в TRxRichEdit (доработанном компоненте в Delphi - RTF + OLE)

Нет, тогда картинки не надо! Я просто не знал какой именно вариант ты будешь использовать для отображения формул вот и спросил наугад
...
Рейтинг: 0 / 0
29.10.2003, 14:32
    #32309004
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Исходя из общения с вами и с другими умными людьми, я сделал вывод что в моём случае (Paradox) лучше использовать естественные ключи, в связи стем что иначе тяжело будет исключить их дублирование, хотя и мне давали хороший совет поставить начало отсчёта на автоинкрементном поле id, тоесть распределить темы и рассчитать, но это относилось к СУБД Interbase.

Теперь попдробнее о структуре так как возникли вопросы:
1)Таблица _тем_ - хранение имен тем и кол-ва вариантов.

В данном случае это всётаки тема, так как это помоему понятие более охватывающее, тоесть одна тема но два варианта - _теста_, помоему так правильнее, но это не очень важно :)
_________________________________________________
Строковый тип (name) | Целочисленный тип
Уравнения и системы неравенств | 2
Ключевое поле здесь - имя темы

2)Таблица вопросов из части А

name (из табл1) |
Сссылка на тему | Номер варианта | Номер вопроса | Вопрос (тип BLOB)
______________________________________________ - ключ (Akey) единственная проблема что ключ слишком большой :(

3)таблица ответов А
Ссылка на вопрос (Akey) | Ответ (тип BLOB) | Метка (правильно/неправильно)
4)Таблица раздела В
Ссылка на тему (name) | Номер вопроса | Вопрос (тип BLOB) | Ответ (тип BLOB)
5)Таблица раздела С
Ссылка на тему (name) | Номер вопроса | Вопрос (тип BLOB) | Ответ (тип BLOB)

Espessially for Репликант: За такую выкладку конечно спасибо, но нужды в ней нет, всё создаётся вручную в DataBase Desktop.

Жду ваш вердикт! Очень хотелось бы перестраховаться, знате ли... =)
...
Рейтинг: 0 / 0
30.10.2003, 08:55
    #32309771
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Исходя из общения с вами и с другими умными людьми, я сделал вывод что в моём случае (Paradox) лучше использовать естественные ключи, в связи стем что иначе тяжело будет исключить их дублирование, хотя и мне давали хороший совет поставить начало отсчёта на автоинкрементном поле id, тоесть распределить темы и рассчитать, но это относилось к СУБД Interbase.

Спасибо за комплимент :о) А почему ты сделал такой вывод, что лучше использовать естественные (натуральные) ключи, а не суррогатные в случае с Paradox? Вообще у суррогатных ключей есть преимущества, например, они числовые, т.е данные и индекс меньше занимают и быстрее происходит поиск. Что касается дублирования, то это без разницы - суррогатный ключ или натуральный, т.к есть ограничения PK и UNIQUE

В данном случае это всётаки тема, так как это помоему понятие более охватывающее, тоесть одна тема но два варианта - _теста_, помоему так правильнее, но это не очень важно :)

Ты решаешь как называть, но просто пример, к-рый я приводил выше с вопросом про число е - это называется "тест" ("вопрос") или это называется "тема"?

Сссылка на тему | Номер варианта | Номер вопроса | Вопрос (тип BLOB)
______________________________________________ - ключ (Akey) единственная проблема что ключ слишком большой :(


Извини, но опять вопрос: в теме (тесте) может быть 1 и более вопросов? Ты не мог бы тогда привести типичные примеры для категорий "A", "B" и "C"?

Espessially for Репликант: За такую выкладку конечно спасибо, но нужды в ней нет, всё создаётся вручную в DataBase Desktop.

Да выкладка - 2 минуты отношения протянуть да столбцы и комментарии в таблицах набросать в PowerDesigner. Просто когда есть DDL его гораздо проще обсуждать - не возникает неоднозначностей
...
Рейтинг: 0 / 0
30.10.2003, 13:15
    #32310251
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Терминология:
Тема - раздел математики на который ориентирован тест, читай глава, к примеру "Уравнения и системы неравенств" (храниться в главной таблице).
Тест - В каждой теме есть несколько тестов (их количество указано в главной талице во втором столбце), читай варианты.
Раздел - Читай категория: А, В , С.
Вопрос - Вопрос в разделе. А - 5 штук, В - 3 штуки, С -2 штуки. Соответсвенно о числе "е" это вопрос, причём в разделе А, из за его структуры (4 варинта ответа).
Примером А служит твой вопрос о числе е
Пример В:
Реишите уравнение ~, и введите правильный ответ в окно ввода. (Ответ целое число)
Пример С: Решите уравнение ~, просмотрите решение и поствьте себе оценку от 0 до 3.

Есественные/Искуственные:
БД будет заполняться на разных компьютерах (никак не связанных) по частям, а потом сливаться в единое целое (ну я думаю наваять программку делающую эту, просто) на разных компьютерах. В связи с этим по моим рассуждения, если сделать автоинкрементное поле - первичный ключ, то при объединении произойдёт их дублирование. Если мне ктонибудь подскажет как можно склеить БД в данном случае с использованием искусственных ключей (например как нибудь изменить автоинкрементные поля) буду очень признателен.
...
Рейтинг: 0 / 0
31.10.2003, 12:09
    #32311561
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Терминология:
Тема - раздел математики на который ориентирован тест, читай глава, к примеру "Уравнения и системы неравенств" (храниться в главной таблице). ....


Теперь все понтно и тогда без суррогатных ключей если я правильно понял будет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 /*
Table: THEMES
Comment: Темы.
         Тема - раздел математики на который ориентирован тест, читай глава, к примеру
 "Уравнения и системы неравенств" (храниться в главной таблице).
*/ 
create table themes (
 themename            varchar( 50 )          not null,   -- Уникальное название темы.
 
 numtests             tinyint              not null,   -- Количество тестов в теме.
 

constraint ucpk_theme primary key clustered (themename)
)
go

 /*
Table: TESTS
Comment: Тесты категорий "A" или "B", содержащих вопросы и ответы.
*/ 
create table tests (
 test_id              tinyint              not null
     constraint chk_tests_test_id check (test_id between  1  and  80 ),   -- Уникальный ИД теста.
 
 themename            varchar( 50 )          not null,       -- Название темы, к-рой принадлежит тест.
 
 testcategory         char( 1 )              not null
     constraint chk_tests_testcategory check (testcategory in ('A','B','C')),   -- Категория теста (A, B, C).
 
 testcnt              tinyint              not null
     constraint chk_tests_testcnt check (testcnt between  1  and  5 ),   -- Кол-во вариантов ответов на вопрос теста.
 

constraint ucpk_tests primary key clustered (test_id),
constraint fk_tests__themes foreign key (themename)
      references themes (themename)
      on delete cascade
)
go

create   index nc_tests on tests (
 themename
)
go


Пример С: Решите уравнение ~, просмотрите решение и поствьте себе оценку от 0 до 3.

А здесь как происходит проверка правильного ответа? т.е я нахожу решение (число) и что дальше?

Есественные/Искуственные:
БД будет заполняться на разных компьютерах (никак не связанных) по частям, а потом сливаться в единое целое (ну я думаю наваять программку делающую эту, просто) на разных компьютерах. В связи с этим по моим рассуждения, если сделать автоинкрементное поле - первичный ключ, то при объединении произойдёт их дублирование. ....


Это неважно, что они несвязаны, если б можно было задать диапазоны для значений автоикрементного ID для каждого компьютера. Но раз в Paradox нельзя задавать начальное значение для столбца с автоинкрементным ID, то тогда такой суррагатный ключ тебе не подойдет
...
Рейтинг: 0 / 0
31.10.2003, 18:11
    #32312279
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
1) А дальше выставляешь себе оценку, система для _подготовки_ к экзамену, а не для _проведения_ самого единого экзамена.
2)Ну со структурой я разобрался... скоро появяться вопросы по использованию :)
...
Рейтинг: 0 / 0
31.10.2003, 18:17
    #32312284
UiDzerO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
Да кстати вопрос по существу!
А каким образом принято объединять таблицы в моём случае?
...
Рейтинг: 0 / 0
02.11.2003, 00:01
    #32312679
Репликант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД подготовки к единому госэкзамену.
1) А дальше выставляешь себе оценку, система для _подготовки_ к экзамену, а не для _проведения_ самого единого экзамена.

Ясно, но просто подготовка как бы предполагает проверку знаний и умение решать те же уравнения/неравенства, т.е твоя программа по идее и должна это делать, подсчитывая баллы на основе кол-ва правильных ответов и "стоимости" (если есть) вопросов. По крайней в приложении, к-рое писал я так и было - подсчет баллов и вывод статистики по разделам, например, как в программе Prometric для тестирования знаний при подготовке к экзамену MCP. Но это так, просто размышления :о)

А каким образом принято объединять таблицы в моём случае?

Точно также - join по имени, например, для получения всех тестов из раздела. Это если такая функция у тебя будет - выбор и прохождение тестов определенного раздела или подборка тестов из каких-то разделов. А так можно и случайным образом, но чтобы не повторялись
...
Рейтинг: 0 / 0
04.11.2003, 17:12
    #32315139
БД подготовки к единому госэкзамену.
Раз тест идет на несвязанных РС, с дальнейшей перегонкой в единую базу, то вполне логично смотрится составной ключ из ID машины и ID выполняемого(выполненого) теста. По скорости дальнейшей обработки это даст большой плюс по сравнению с естественными ключами.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД подготовки к единому госэкзамену. / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]