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

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

Как правильно ссылаться в данной ситуации?
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #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
БД подготовки к единому госэкзамену.
    #32306715
UiDzerO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Репликант ты всё правильно понял со структурой, но вот проблема БД не сетевая. Просто наполнить её надо будет за короткий срок, поэтому и создаваться она будет на разных компьютерах с последующим соединением.
Но всеравно большое спасибо за ответ! :) Жду дальнейших! :)
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32306723
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UiDzerO,
Какая используется СУБД?
Не поможет ли Вам репликация в этом деле?
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32306740
UiDzerO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте ещё раз!
СУБД - paradox как имхо наиболее удобная в использовании вместе с Delphi
Что такое репликация я пока ещё не знаю, если подскажете толковый линк где про это можно прочитать буду очень признателен.
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32306760
UiDzerO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вопщем то насколько я понял из рассказов репликация связана с объединением таблиц в сетевых СУБД что в данный момент меня мало интересует. Интересует меня другое, какие использовать ссылки и индексы.
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32306902
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 UiDzerO:
Репликант ты всё правильно понял со структурой, но вот проблема БД не сетевая. Просто наполнить её надо будет за короткий срок, поэтому и создаваться она будет на разных компьютерах с последующим соединением.

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

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

А есть уже какая-нибудь эксизная модель данных или DDL? Хотя бы основные таблицы и столбцы, чтобы говорить более предметно или начинаем с "нуля"? :о)
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32307218
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"репликация связана с объединением таблиц в сетевых СУБД" - какое-то странное понимание репликации
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #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
БД подготовки к единому госэкзамену.
    #32307722
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Репликация - это не решение данной проблемы - а просто метод синхронизации данных - вопрос с повторяющимся ключем там тоже автоматически не решается. Для эого традиционно используются способы - типа игр с различным прирощением для ID различных БД или указание диапазонов и т.д.
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #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
БД подготовки к единому госэкзамену.
    #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
БД подготовки к единому госэкзамену.
    #32309771
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходя из общения с вами и с другими умными людьми, я сделал вывод что в моём случае (Paradox) лучше использовать естественные ключи, в связи стем что иначе тяжело будет исключить их дублирование, хотя и мне давали хороший совет поставить начало отсчёта на автоинкрементном поле id, тоесть распределить темы и рассчитать, но это относилось к СУБД Interbase.

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

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

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

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


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

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

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

Есественные/Искуственные:
БД будет заполняться на разных компьютерах (никак не связанных) по частям, а потом сливаться в единое целое (ну я думаю наваять программку делающую эту, просто) на разных компьютерах. В связи с этим по моим рассуждения, если сделать автоинкрементное поле - первичный ключ, то при объединении произойдёт их дублирование. Если мне ктонибудь подскажет как можно склеить БД в данном случае с использованием искусственных ключей (например как нибудь изменить автоинкрементные поля) буду очень признателен.
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #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
БД подготовки к единому госэкзамену.
    #32312279
UiDzerO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) А дальше выставляешь себе оценку, система для _подготовки_ к экзамену, а не для _проведения_ самого единого экзамена.
2)Ну со структурой я разобрался... скоро появяться вопросы по использованию :)
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32312284
UiDzerO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да кстати вопрос по существу!
А каким образом принято объединять таблицы в моём случае?
...
Рейтинг: 0 / 0
БД подготовки к единому госэкзамену.
    #32312679
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) А дальше выставляешь себе оценку, система для _подготовки_ к экзамену, а не для _проведения_ самого единого экзамена.

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

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

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


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