Смекни!
smekni.com

Обучающе-контроллирующая система для подготовки студентов (стр. 2 из 13)

Для усвоения материала книги требуется понимание основ объектно-ориентированного программирования и принципов построения программ, управляемых событиями. Какую-то часть кода сгенерирует за вас Delphi, но для серьезной работы потребуется и серьезное знание языка Паскаль. Некоторые неосновные свойства компонентов, описанных в книге, ссылаются напрямую на программный интерфейс Windows. Его знание, конечно, не будет лишним, но и не является обязательным. Та часть книги, которая посвящена работе Delphi с базами данных, требует наличия у читателя основ знаний в этой области.


3. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ

3.1 Концептуальная модель базы данных

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

Наш набор атрибутов - следующий:

ТЕМА№ - порядковый номер темы с вопросами;

ТЕМА - название раздела(темы);

ВОПРОС№ - уникальный номер вопроса;

ВОПРОС - текст вопроса;

ОТВЕТ№ - уникальный номер варианта ответа на вопрос;

ОТВЕТ - текст варианта ответа на вопрос;

ИСТИННОСТЬ - истинность варианта ответа на вопрос(правда или ложь).

Сведем все атрибуты и принимаемые ими на некоторый момент времени значения в следующую таблицу:

Таблица 3.1

Сводная таблица атрибутов ПРО и их значений

ТЕМА№ ТЕМА ВОПРОС№ ВОПРОС ОТВЕТ№ ОТВЕТ ИСТИННОСТЬ
1 тема1 1 вопрос1 1 ответ1 True
2 ответ2 False
3 ответ3 False
2 вопрос2 4 ответ4 False
5 ответ5 True
2 тема2 3 вопрос3 6 ответ6 True
7 ответ7 False
4 вопрос4 8 ответ8 False
9 ответ9 True
10 ответ10 False
3 тема3 5 вопрос5 11 ответ11 True
12 ответ12 False

Эта таблица не является отношением, так как значения первых четырех полей в ней - атомарные, а значения оставшихся трех - множественные. Чтобы таблица стала отношением, ее нужно реконструировать таким образом, чтобы каждый элемент кортежа имел атомарное значение. Это делается с помощью простого процесса вставки (табл.3.2.).

Хотя вставка добавила большой объем избыточных данных, новая таблица получает статус отношения, которое называют универсальным отношением проектируемой БД. Такое отношение включает все представляющие интерес атрибуты и все данные, которые предполагается размещать в БД. Таким образом, получена концептуальная модель проектируемой БД.

Таблица 3.2

Концептуальная модель БД

ТЕМА№ ТЕМА ВОПРОС№ ВОПРОС ОТВЕТ№ ОТВЕТ ИСТИННОСТЬ
1 тема1 1 вопрос1 1 ответ1 True
1 тема1 1 вопрос1 2 ответ2 False
1 тема1 1 вопрос1 3 ответ3 False
1 тема1 2 вопрос2 4 ответ4 False
1 тема1 2 вопрос2 5 ответ5 True
2 тема2 3 вопрос3 6 ответ6 True
2 тема2 3 вопрос3 7 ответ7 False
2 тема2 4 вопрос4 8 ответ8 False
2 тема2 4 вопрос4 9 ответ9 True
2 тема2 4 вопрос4 10 ответ10 False
3 тема3 5 вопрос5 11 ответ11 True
3 тема3 5 вопрос5 12 ответ12 False

3.2 Логическая модель базы данных

Проектирование реализации БД(логическое проектирование) представляет собой трансформацию концептуальной модели в набор отношений в нормальной форме Бойса-Кодда(НФБК). Для приведения спроектированного универсального отношения в НФБК воспользуемся декомпозиционным методом проектирования, содержанием которого является описание семантики универсального отношения в терминах функциональных зависимостей(ФЗ) и использование последних для нормализации отношения.

Введем следующие понятия: функциональная зависимость, ключ, первичный ключ, детерминант, НФБК.

Если даны два атрибута A и B, то говорят, что B функционально зависит от A (обозначается A-B), если для каждого A существует ровно одно связанное с ним значение B. A и B могут быть не только единичными атрибутами, но и группами из двух и более атрибутов.

Ключом называется атрибут или совокупность атрибутов, которые используются для идентификации записи и обнаружения ее на ЗУ. Ключей может быть несколько.

Первичный ключ используется для уникальной идентификации кортежа.

Детерминант. Если в ФЗ A-BB не зависит от любого подмножества A(т.е. функциональная зависимость полна), то A является детерминантом B.

НФБК определяется следующим образом: отношение находится в НФБК, если каждый детерминант отношения является ключом. Проверим находится ли универсальное отношение R(ТЕМА, ТЕМА, ВОПРОС, ВОПРОС, ОТВЕТ, ОТВЕТ, ИСТИННОСТЬ) в НФБК.

Выпишем ФЗ для универсального отношения:

ТЕМА№- ТЕМА,

ТЕМА№, ВОПРОС№- ВОПРОС,

ВОПРОС№, ОТВЕТ№- ОТВЕТ,

ВОПРОС№, ОТВЕТ№-ИСТИННОСТЬ.


Из записанных ФЗ видно, что рассматриваемое отношение имеет только один ключ, а именно набор атрибутов < ТЕМА№, ВОПРОС№, ОТВЕТ№>. То есть это минимальный набор значений атрибутов, которые, если они известны, определяют значения других атрибутов кортежа. Детерминантами отношения являются левые части всех ФЗ, а именно: <ТЕМА№>, <ТЕМА№, ВОПРОС№>, <ВОПРОС№, ОТВЕТ№>.

Легко обнаружить, что ни один детерминант не является ключом. Из чего следует, что рассматриваемое отношение не находится в НФБК и подлежит декомпозиции.

Алгоритм декомпозиционного проектирования выглядит так:

1) разрабатывается универсальное отношение для БД;

2) определяются все ФЗ между атрибутами отношения;

3) определяется, находится ли отношение в НФБК. Если ДА, то проектирование завершено, если НЕТ, отношение должно быть разложено на два;

4) шаги 2 и 3 повторяются для каждого нового отношения, полученного в результате декомпозиции. Проектирование завершается, когда все отношения будут находиться в НФБК.

Детерминант <ВОПРОС№, ОТВЕТ№> не является ключом и имеет два зависимых от него атрибута

ВОПРОС№, ОТВЕТ№- ОТВЕТ

ВОПРОС№, ОТВЕТ№-ИСТИННОСТЬ,

что можно рассматривать в качестве единичной ФЗ с составными правой и левой частями ВОПРОС№, ОТВЕТ№-ОТВЕТ,ИСТИННОСТЬ.

Таким образом, получаются два новых отношения R1 и R2:

R1(ТЕМА, ТЕМА, ВОПРОС, ВОПРОС)

ФЗ: ТЕМА№- ТЕМА,

ТЕМА№, ВОПРОС№- ВОПРОС.

Возможные ключи: <ТЕМА№, ВОПРОС№>.

Детерминанты:<ТЕМА№>,< ТЕМА№,ВОПРОС№>.

R2(ВОПРОС, ОТВЕТ, ОТВЕТ, ИСТИННОСТЬ)

ФЗ: ВОПРОС№, ОТВЕТ№-ОТВЕТ,ИСТИННОСТЬ.

Возможные ключи: <ВОПРОС№, ОТВЕТ№>.

Детерминанты: <ВОПРОС№, ОТВЕТ№>.

Отношение R2(ВОПРОС, ОТВЕТ, ОТВЕТ, ИСТИННОСТЬ) находится в НФБК, т.к. его детерминант является ключом, а потому в дальнейшей декомпозиции не нуждается.

В отношении R1(ТЕМА, ТЕМА, ВОПРОС, ВОПРОС) детерминант <ТЕМА№> не является возможным ключом, поэтому R1 не находится в НФБК и подлежит дальнейшему расщеплению. Результатом расщепления отношения R1 являются отношения R3,R4:

R3(ТЕМА, ВОПРОС, ВОПРОС)

ФЗ: ТЕМА№, ВОПРОС№- ВОПРОС.

Возможные ключи: <ТЕМА№, ВОПРОС№ >.

Детерминанты: <ТЕМА№, ВОПРОС№ >.

R4(ТЕМА, ТЕМА)

ФЗ: ТЕМА№- ТЕМА.

Возможные ключи: <ТЕМА№>.

Детерминанты: <ТЕМА№>.

Эти два отношения находятся в НФБК, следовательно проектирование завершается и его результатом является логическая модель БД в НФБК:

R2(ВОПРОС, ОТВЕТ, ОТВЕТ, ИСТИННОСТЬ),

R3(ТЕМА, ВОПРОС, ВОПРОС),

R4(ТЕМА, ТЕМА).

3.3 Структура файлов базы данных

В качестве формата для разрабатываемой базы данных был избран Paradox, т.к. он предоставляет следующие возможности:

· Широкий выбор типов полей, включая авто-инкремент, BLOBs и т.п.

· Соблюдение целостности данных, контроля данных, обновления индексов на уровне ядра BDE.

· Первичный индекс таблицы автоматически соблюдает уникальность записей, вторичные индексы обеспечивают отсортированный «вид» на записи таблицы.

В результате анализа поставленной задачи были разработаны следующие файлы данных:

1) TEMA - содержит информацию о имеющихся разделах(темах);

2) QUESTION - предназначен для хранения вопросов к темам из таблицы TEMA;

3) ANSWER- содержит варианты ответов на вопросы из таблицы QUESTION;

4) TICKETS - предназначен для хранения информации о билетах;

5) CONTROL- содержит информацию о результатах тестирования;

6) RESULT - предназначен для сбора информации об истинности ответов студента.

Структуры файлов данных приводятся ниже в табличной форме.

Таблица 3.3

Структура файла данных TEMA.DB

Название поля Тип Назначение
Tema_id autoincrement уникальный идентификатор раздела(темы)
Tema_name alpha(100) название раздела(темы)

Таблица 3.4

Структура файла данных QUESTION.DB

Название поля Тип Назначение
Quest_id autoincrement уникальный идентификатор вопроса
Tema_id long integer номер темы, которой принадлежит вопрос
Quest_name memo текст вопроса

Таблица 3.5

Структура файла данных TICKETS.DB

Название поля Тип Назначение
Ticket_id autoincrement уникальный идентификатор записи
Ticket_num long integer номер билета
Quest_id long integer идентификатор вопроса

Таблица 3.6