
- •А.В. Брешенков
- •Проектирование баз данных на основе информации табличного вида
- •1. Анализ проблемы проектирования реляционных баз данных на основе использования информации табличного вида 8
- •5. Назначение ключевых полей 142
- •6. Выявление и формирование связей между заполненными таблицами 157
- •7. Объединение таблиц 190
- •8. Разработка и исследование модели методики проектирования реляционных баз данных на основе использования информации табличного вида 220
- •Предисловие
- •Глава 5 посвящена методу назначения ключевых полей в заполненных нереляционных таблицах.
- •1. Анализ проблемы проектирования реляционных баз данных на основе использования информации табличного вида
- •1.1. Понятие информации табличного вида
- •1.2. Мотивы преобразования информации табличного вида в файлы реляционных баз данных
- •1.3. Основные требования к средствам преобразования информации табличного вида в реляционные таблицы
- •1.4. Задачи объединения и разбиения реляционных таблиц
- •1.5. Задачи нормализации реляционных таблиц
- •1.6. Преобразование реляционных нормализованных таблиц в файлы бд
- •1.7. Вопросы преобразования электронных таблиц
- •Упражнения и вопросы для самоконтроля
- •2. Постановка задачи проектирования реляционных баз данных на основе использования информации табличного вида
- •2.1. Укрупненная модель реляционной базы данных
- •2.2. Укрупненная модель информации табличного вида
- •2.3. Задачи преобразования заполненных нереляционных таблиц в реляционные таблицы Преобразование нереляционных таблиц в реляционные таблицы
- •Нормализация заполненных таблиц
- •Назначение ключевых полей для заполненных таблиц
- •Выявление и формирование связей между заполненными реляционными таблицами
- •Упражнения и вопросы для самоконтроля
- •3. Преобразование нереляционных таблиц в реляционные таблицы
- •3.1. Приведение значений атрибутов заполненных таблиц к одному типу
- •3.2. Исключение дублирования записей
- •Упражнения и вопросы для самоконтроля
- •4. Нормализация заполненных реляционных таблиц.
- •4.1. Проблемы нормализации
- •4.2. Модели информации табличного вида и реляционных таблиц.
- •4.2.1. Модель информации табличного вида
- •4.2.2. Модель реляционной таблицы
- •4.3. Преобразование заполненных таблиц к первой нормальной форме
- •4.3.1. Избавление от сложных атрибутов
- •4.3.2. Исключение подзаголовков расположенных внутри таблицы
- •4.3.3. Нормализация заполненных таблиц с подзаголовками в первом столбце.
- •4.4. Преобразование заполненных таблиц ко второй нормальной форме
- •4.5. Преобразование заполненных таблиц к третьей нормальной форме
- •Избавление от функциональной зависимости.
- •4.6. Преобразование заполненных таблиц к четвертой нормальной форме.
- •Упражнения и вопросы для самоконтроля
- •5. Назначение ключевых полей
- •5.1. Задача назначения ключевых полей в заполненных реляционных таблицах
- •5.2. Алгоритмы назначения ключевых полей в заполненных реляционных таблицах
- •Упражнения и вопросы для самоконтроля
- •6. Выявление и формирование связей между заполненными таблицами
- •6.1. Выявление и формирование связей один - к одному
- •6.2. Выявление и формирование связей один - ко многим
- •6.3. Выявление и формирование связей многие - ко многим.
- •Формирование 3-й таблицы для реализации многозначных связей.
- •Упражнения и вопросы для самоконтроля
- •7. Объединение таблиц
- •7.1. Проблемы объединения таблиц
- •Исходные таблицы по своей природе удовлетворяют требованиям совместимости, а по форме – нет.
- •Исходные таблицы удовлетворяют требованиям совместимости, результирующую таблицу необходимо обновлять.
- •Исходные таблицы частично удовлетворяют требованиям совместимости.
- •7.2. Объединение и обновление совместимых таблиц
- •7.3. Объединение таблиц, частично удовлетворяющих требованиям совместимости
- •Упражнения и вопросы для самоконтроля
- •8. Разработка и исследование модели методики проектирования реляционных баз данных на основе использования информации табличного вида
- •8.1. Постановка задачи разработки модели методики
- •8.2. Операторная модель преобразования информации табличного вида к реляционным базам данных
- •8.3. Исследование методики преобразования информации табличного вида в реляционные базы данных
- •8.4. Исследование динамических свойств функционирования системы.
- •8.5. Исследование временных свойств системы.
- •Упражнения и вопросы для самоконтроля
- •Список литературы
4.5. Преобразование заполненных таблиц к третьей нормальной форме
Рассмотрим пример заполненной таблицы, которая удовлетворяет изложенным выше требованиям, но не удовлетворяет 3-й нормальной форме. Рассмотрим пример приведенный в виде (табл. 4.5.1).
Т а б л и ц а 4.5.1
Табельный № |
Преподаватель |
Должность |
Шифр кафедры |
Название кафедры |
Телефон |
11 |
Иванов |
Доцент |
И6 |
Компьютерные системы |
111-22-33 |
21 |
Соколов |
Профессор |
И6 |
Компьютерные системы |
111-22-33 |
35 |
Романов |
Доцент |
И6 |
Компьютерные системы |
111-22-33 |
44 |
Наумов |
Доцент |
И8 |
Защита информации |
444-55-66 |
55 |
Степанов |
Профессор |
И8 |
Защита информации |
444-55-66 |
… |
… |
… |
… |
… |
|
В данном примере легко визуально выявить зависимые атрибуты. Это “Шифр кафедры” и “Название кафедры”. Даже из этого небольшого примера очевидна избыточность таблицы: шифры кафедр и названия кафедр будут дублироваться столько раз, сколько сотрудников на кафедре.
Избыточность в реляционных БД, как правило, недопустима. Кроме того, такое представление данных способствует ошибкам при ее заполнении. Действительно, вводя много раз значения “Шифр кафедры” и ее название, легко ошибиться. В конечном счете, это может привести к противоречивости БД.
В реальных таблицах могут быть сотни атрибутов и тысячи записей, причем эти записи зачастую не сгруппированы, как в примере. В связи с этим необходимы автоматизированные, а лучше автоматические средства исключения зависимых атрибутов.
Суть этих средств сводится к выявлению зависимых атрибутов, выделению этих атрибутов в отдельную таблицу и формированию связей между оставшимися и выделенными атрибутами.
Неформальный алгоритм выявления зависимых атрибутов состоит в следующем: необходимо выявить атрибуты с повторяющимися значениями, проверить, есть ли для этих атрибутов зависимые атрибуты, если таковые есть, отметить все зависимые атрибуты. Важно иметь в виду, что в таблице может быть несколько групп зависимых атрибутов. Это следует учесть при разработке алгоритма.
Более детально алгоритм выявления зависимых атрибутов сформулирован ниже:
П1: Перебираются атрибуты от 1-го до предпоследнего, исключая ключевые. Для каждого атрибута выполняется подсчет совпадений их значений. Если совпадения есть, то запоминаются номера кортежей с одинаковыми атрибутами для каждой группы. Каждая выявленная группа проверяется на принадлежность к зависимым атрибутам. Для этого для каждой группы выполняются следующие действия:
П2: Перебираются все элементы группы и анализируются значения ближайшего справа атрибута в соответствующих кортежах.
П3: Если все значения в соответствующих кортежах равны между собой, то выявлена функциональная зависимость для группы. Проверку необходимо выполнить для всех групп рассматриваемого атрибута. Если выявлена функциональная зависимость для всех групп, то это означает, что анализируемый атрибут является зависимым. Кроме того, зависимым является и атрибут (сосед справа), их номера запоминаются.
П4: Если для двух атрибутов выявлена функциональная зависимость, то для выявленных атрибутов осуществляется попытка нахождения других зависимых атрибутов. Для этого выбирается следующий атрибут справа и выполняется П2. П2 выполняется до тех пор, пока не исчерпаются все атрибуты. После того, как исчерпаны все атрибуты, то алгоритм завершает работу, выдаются номера зависимых атрибутов – функциональная зависимость найдена и будет обрабатываться.
П5: Если в П4 не все значения в соответствующих кортежах равны между собой, то выбирается следующая группа совпадающих атрибутов и выполняется переход к П3.
Если перебраны все группы текущего атрибута, то выполняется переход к П1.
П6: Если перебраны все k-1 атрибутов отношения, то функциональная зависимость не найдена, о чем выдается соответствующее сообщение.
Т.к. в отношении может быть несколько сочетаний зависимых атрибутов, то после избавления от найденных зависимых атрибутов алгоритм следует применить повторно. Причем алгоритм следует применять повторно до тех пор, пока не перестанут выявляться зависимые атрибуты.
Так как алгоритм несколько запутан, то перед его формализованным описанием оправданно его проиллюстрировать на приведенном примере.
Первый столбец пропускается, т.к. он ключевой. Выбирается второй столбец ”Преподаватель”. Анализируются его значения: одинаковых значений нет. Поэтому выбирается следующий столбец “Должность”. Анализируются его значения. Выявлено 2-е группы с совпадающими значениями – “Доцент” и “Профессор”. Значит атрибут “Должность” необходимо проверить на функциональную зависимость.
Проверяем значения соседнего справа атрибута для группы “Доцент” на совпадения. В первом кортеже, где есть значение “Доцент”, значение “Шифр кафедры” – И6, в третьем – И6, в пятом – И8. Не все значения атрибута “Шифр кафедры” совпадают. Поэтому нет необходимости рассматривать группу “Профессор”. Функциональной связности с атрибутом “Шифр кафедры” нет.
Проверяем, не связан ли атрибут “Должность” со следующим атрибутом “Название кафедры”. Оказывается, что значению “Доцент” соответствует значение и “Компьютерные системы” и “Защита информации”. Таким образом, нет функциональной зависимости у атрибута “Должность” и с атрибутом “Название кафедры”. Таким образом, атрибут “Должность” ни с каким атрибутом не связан функциональной зависимостью.
Выбираем следующий атрибут для анализа функциональной зависимости – “Шифр кафедры”. Анализируем значения этого атрибута на совпадение. В результате выявляются две группы – “И6” и “И8”.
Проверяем для группы “И6” зависимость в соседнем справа столбце. Получается следующий результат: 'Компьютерные системы' соответствуют всем вхождениям “И6”. Проверяем для следующей группы “И8” зависимость в соседнем справа столбце. Получаем следующий результат: столбец ”Защита информации” соответствует всем вхождениям “И8”. Больше групп для проверки нет, поэтому делается вывод, что атрибуты “Шифр кафедры” и “Название кафедры” функционально зависимы.
Следует отметить, что ошибка в принципе возможна, хотя маловероятна. Например, если бы на кафедрах работали преподаватели, занимающие одну должность, то был бы сделан ошибочный вывод о том, что между должностью и кафедрой имеется функциональная зависимость, хотя таковой в соответствии с семантикой таблицы нет. В связи с этим некоторое участие разработчика необходимо. Только он может оценить смысловые нюансы. Поэтому предлагаемый метод – человеко-машинный.
Далее предлагается формализованное описание алгоритма выявления функциональной зависимости. В описании используются значения, принятые в Табл. 4.1.
FOR r = 1 то k – 1, k NK
ZAV = 0
F = 0
FOR r1 = r + 1 то k -1, k NK
FOR f = 1 TO m
Smr = SELECT COUNT(amr ) FROM Ar
IF Smr 1 THEN
Smr1 = SELECT COUNT(amr1 ) FROM Ar1
IF Smr1 1 and Smr1 = Smr
THEN
Fr = 1
Fr1 = 1
ZAV = 1
ELSE
ZAV = 0
GOTO M
END IF
NEXT f
M:NEXT r1
IF ZAV = 1 THEN
PRINT (“Зависимые атрибуты”)
FOR i= 1 то k – 1, k NK
PRINT (Fi)
NEXT i
END IF
NEXT r
Здесь NK – номер ключевого атрибута. Конструкция SELECT COUNT (amr) FROM Ar означает количество повторений значения атрибута amr. F – множество номеров зависимых атрибутов.
Дадим краткое пояснение алгоритму.
Во внешнем цикле перебираются все столбцы, кроме ключевого столбца. Флажок ZAV и множество F обнуляется. В следующем цикле перебираются остальные столбцы. В цикле по f перебираются все значения текущего столбца, и для каждого значения подсчитывается число его повторений. Если это число повторений больше 1, то подсчитывается количество повторений значения атрибута, находящегося в той же строке и соседнем столбце. Если количества повторений совпадает, то может быть это и есть зависимый атрибут. Поэтому, на всякий случай, в массиве F запоминается номера столбцов и флажку ZAV присваивается 1. Если нет, то функциональной зависимости наверняка нет, поэтому выполняется обнуление ZAV и принудительный выход из цикла. Если по окончанию цикла по r1 переменная ZAV оказалась равной 1, то это значит, что ни разу не произошло принудительного выхода из цикла. А это означает то, что в обоих столбцах количество совпадений элементов, находящихся в одноименных строках всегда было равно друг другу, что косвенно свидетельствует о функциональной зависимости.
Следует отметить, что алгоритм позволяет выявлять только группы из двух зависимых атрибутов. Для выявления групп из трех и более зависимых атрибутов алгоритм необходимо несущественно преобразовать.
Следующим шагом методики является приведение отношения к 3 – й нормальной форме, т.е. избавление от функциональной зависимости.