3.2 Логическая модель базы данных
Проектирование реализации БД(логическое проектирование) представляет собой трансформацию концептуальной модели в набор отношений в нормальной форме Бойса-Кодда(НФБК). Для приведения спроектированного универсального отношения в НФБК воспользуемся декомпозиционным методом проектирования, содержанием которого является описание семантики универсального отношения в терминах функциональных зависимостей(ФЗ) и использование последних для нормализации отношения.
Введем следующие понятия: функциональная зависимость, ключ, первичный ключ, детерминант, НФБК.
Если даны два атрибута A и B, то говорят, что B функционально зависит от A (обозначается A à B), если для каждого A существует ровно одно связанное с ним значение B. A и B могут быть не только единичными атрибутами, но и группами из двух и более атрибутов.
Ключом называется атрибут или совокупность атрибутов, которые используются для идентификации записи и обнаружения ее на ЗУ. Ключей может быть несколько.
Первичный ключ используется для уникальной идентификации кортежа.
Детерминант. Если в ФЗ A à B B не зависит от любого подмножества 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
Структура файла данных ANSWER.DB
Название поля | Тип | Назначение |
Otvet_id | autoincrement | уникальный идентификатор варианта ответа |
Quest_id | long integer | идентификатор вопроса, которому принадлежит вариант ответа |
Otvet_name | memo | текст варианта ответа на вопрос |
Trued | logical | истинность варианта ответа |
Таблица 3.7
Структура файла данных CONTROL.DB
Название поля | Тип | Назначение |
Id | autoincrement | уникальный идентификатор записи |
Name | alpha(40) | фамилия студента |
Ticket_num | long integer | номер билета, по которому проводилось тестирование |
Date | date | дата тестирования |
Time | time | время завершения тестирования |
Mark | number | относительная оценка (0..1) |
Таблица 3.8
Структура файла данных RESULT.DB
Название поля | Тип | Назначение |
Answer_id | long integer | уникальный идентификатор ответа |
Trued | logical | истинность ответа |
0 комментариев