
- •А.В. Брешенков
- •Проектирование баз данных на основе информации табличного вида
- •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.2.2. Модель реляционной таблицы
Реляционная таблица (RT) представляется множеством RT = {Z, D}, где Z – множество заголовков, D - множество данных.
Z
= {,…,
,…,
},
i = 1,n;
n>=1,
где n
- степень множества заголовков.
Должно
быть обеспечено условие
≠
, i
= 1,n
; m = 1,n;
i
≠ m
(8), где n
– степень множества заголовков, т.е.
недопустимо совпадение заголовков.
D = {SD} (9), где SD – множество строк данных.
SD = {SD1,…,SDi…,SDn}, i = 1,n; n >> 1, где n - мощность множества строк данных.
SDi = {EDi1...,EDij,…,EDik}, j = 1,k; k >= 1, где k - степень множества i-ой строки данных; EDij – элемент данных.
Недопустима ситуация, когда внутри таблицы данных могут встретиться заголовки, т.е. должно выполнятся условие:
SDi
≠
,
i = 1,n; n >> 1; j=
1,k;
k >= 1 (10), где
n - мощность множества строк данных;
k - степень множества заголовков.
Для реляционных таблиц выполняется правило:
(ED)(SD
ED) ((
z(Z
z)
(z
ED)
Т.е. каждому элементу данных соответствует только один заголовок.
(ED)
(ED
SD ) ((
TED (ED
TED)),
где TED = string V integer V datetime V real V logical
Т.е. каждому элементу данных соответствует определенный тип данных.
В реляционных таблицах обязательно выполнение следующего требования:
TED11=,…,=TE Di1=,…,=TE Dn1
… … … … … … … … … … …
TE D1j=,…,=TE Dij=,…,=TE Dnj
… … … … … … … … … … …
TE D1k=,…,=TE Dik =,…,=TE Dnk, i = 1,n; n>>1; j = 1,k; k >= 1,
где n - мощность множества строк данных, k - степень множества i-ой строки данных; EDij – элемент данных. Другими словами, значения типов данных одного столбца должны совпадать.
Недопустима ситуация, когда SDi = S Dj , i = 1,n ; j=1,n; i≠j , где n – мощность множества данных.
Т.е. невозможно полное совпадение строк данных.
Несмотря на некоторое сходство модели данных табличного вида и модели реляционной таблицы, в них имеются существенные различия. Сравнивая условия (1-7) в модели данных табличного вида и условия (9-10) в модели реляционной таблицы, нетрудно заметить, что эти условия не совпадают. В связи с этим для преобразования данных табличного вида в реляционные таблицы необходимо как минимум добиться выполнения условий (9 -10).
При этом целевая функция для условий (1-4) выглядит следующим образом:
((min(j)…
min(i)
…
min(t))…
…
…
((min(m)…
min(k)
…
min(r)),где
j - количество подзаголовков 1-го уровня 1-го заголовка;
t - количество подзаголовков 1-го уровня последнего заголовка;
m - количество подзаголовков 2-го уровня первого подзаголовка заголовка 1-го уровня;
r - количество подзаголовков 2-го уровня последнего подзаголовка заголовка 1-го уровня.
Другими словами число подзаголовков 1-го и 2-го уровней нужно минимизировать, а точнее совсем от них избавиться. Таким образом, будет реализована 1-ая нормальная форма - атрибуты реляционной таблицы должны быть атомарными.
4.3. Преобразование заполненных таблиц к первой нормальной форме
4.3.1. Избавление от сложных атрибутов
В работах [7,8] обоснована актуальность проблемы преобразования заполненных нереляционных таблиц в реляционные таблицы, сформулированы задачи преобразования, намечены пути решения отдельных задач. Здесь рассматривается одна из этих задач - избавление от сложных атрибутов в заполненных нереляционных таблицах. Простые атрибуты - это первое условие нормализации реляционных таблиц. При проектировании таблиц баз данных это условие закладывается изначально. В нереляционных таблицах или в данных табличного вида оно, как правило, не обеспечивается.
Для того, чтобы исключить подзаголовки 1-го и 2-го уровней и не потерять смысл атрибутов можно выполнить конкатенации заголовков и подзаголовков всех уровней и значениям подзаголовков нижнего уровня приписать значения конкатенации. После этого необходимо удалить строки с заголовками 1-го и, если есть таковые, строки с заголовками 2-го уровня. Этот процесс можно формализовать и соответственно реализовать его в виде машинных процедур. Однако полностью исключить участие человека из процесса преобразования данных табличного вида к реляционному виду удается не всегда, поэтому речь идет о человеко-машинных процедурах.
Для формализации процесса избавления от сложных атрибутов определим необходимые понятия.
Ячейка – это фрагмент таблицы, который имеет четыре ограничителя: верхний, нижний, левый и правый. В зависимости от формата представления данных табличного вида в качестве ограничителей могут выступать пробелы, символы табуляции, точки, вертикальные линии, горизонтальные линии или другие специальные символы. В электронных таблицах ячейка имеет адрес. В связи с этим одной из причин участия человека в процессе преобразования является необходимость указания символов ограничителей ячеек. Ячейка характеризуется номером строки таблицы данных и номером в строке. Таким образом, Яij - это область таблицы, выделенная ограничителями, находящаяся в i-ой строке таблицы и занимающая j-ю позицию. ЛГ(Яij) – левый ограничитель Яij; ПГ(Яij) – правый ограничитель Яij; УГ – указатель на правую или левую границу ячейки. С(Яij) – содержимое ячейки; СТi – i-ая строка.
Алгоритм избавления от сложных атрибутов выглядит следующим образом:
П1: {Подсчет числа ячеек в 1-ой, 2-ой, и 3-ей строках таблицы.}
{Подсчет выполняется для того, чтобы узнать есть ли в таблице подзаголовки, а также узнать, сколько уровней подзаголовков.}
М1 := 1;
УГ := ЛГ(Я11);
WHILE ПГ(Я1М1) not EMPTY M1 := M1 + 1;
М2 := 1;
УГ := ЛГ(Я21);
WHILE ПГ(Я2М2) not EMPTY M2 := M2 + 1;
М3 := 1;
УГ := ЛГ(Я31);
WHILE ПГ(Я3М3) not EMPTY M3 := M3 + 1;
IF М2 = М1 THEN GOTO П4; {нет подзаголовков}
IF (М2 > М1) and (M2 = M3) THEN GOTO П2;
IF М3 > М2 THEN GOTO П3;
{один уровень подзаголовков}
П2: k := 1;
j := 1;
УГ:= ЛГ(Я21);
WHILE j <> M2
WHILE ПГ(Я1K) <> ПГ (Я2J)
C(Я2J)= Concat(C(Я1K),' ',C(Я2J));
j := j + 1;
END WHILE;
k := k + 1;
j := j + 1;
END WHILE;
DELETE CT1;
GOTO П4;
{два уровня подзаголовков}
П3: к := 1;
n := 1;
j := 1;
WHILE j <> M3
WHILE ПГ(Я2n) <> ПГ (Я3j)
C(Я3j) = Concat(C(Я1k),' ',C(Я2n),' ',C(Я3j));
j := j + 1;
END WHILE;
IF ПГ(Я1k) = ПГ(Я3j) THEN k :=k + 1;
n := n + 1;
j := j + 1;
END WHILE;
DELETE CT1;
DELETE CT2;
П4: END.
Нетрудно заметить, что многие команды алгоритма несколько напоминают команды языка программирования Pascal. Так сделано в связи с тем, что при исключении подзаголовков очень вероятна работа с текстовыми файлами, сам алгоритм неочевиден и оправданна его изначальная ориентация на предполагаемый язык реализации.
В алгоритме задействован оператор DELETE, применение которого реализует удаление строк. В П2 удаляется 1-ая строка CT1 со сложными атрибутами. В П3 удаляется 1-ая и 2-ая строки (CT1 , CT2) со сложными атрибутами. Следует обратить внимание, что алгоритм предназначен для реализации в человеко-машинных процедурах. Это связано с тем, что сформированные в соответствии с алгоритмом атрибуты могут быть длинными и не удовлетворять требованиям инструментальной СУБД. Они могут оказаться семантически избыточными и нуждаться в корректировке. Кроме того, в атрибутах могут быть символы, недопустимые с точки зрения инструментальной СУБД. В качестве таких символов могут выступать “!”, “.”, “@” и другие. В связи с этим при реализации алгоритма необходимо предусмотреть автоматизированное исключение из атрибутов символов, указанных пользователем.
Нетрудно доказать, что алгоритм корректный, т.е. алгоритм сходится. П1 алгоритма конечен, т.к. число ячеек любой строки таблицы данных ограничено. П2 и П3 также конечны, так как циклы, которые в них задействованы, ограничены фиксированными значениями параметров.
Кроме того, алгоритм обладает малой вычислительной сложностью, которую можно оценить следующим образом. Для П1 максимальное число итераций оценивается как N*3, где N – число простых атрибутов или количество ячеек в строках с данными или степень таблицы данных. Для П2 и П3 максимальное число операций N. Так как П2 и П3 алгоритма альтернативны, то общая вычислительная сложность алгоритма N*4, т.е. линейна. Причем значение коэффициента невелико.
Нетрудно показать, что таблица, полученная в результате работы алгоритма, удовлетворяет 1-ой нормальной форме. Действительно, в соответствии с требованиями алгоритма (П1), преобразование сложных атрибутов в простые начинает выполняться, когда количество атрибутов (заголовков) будет равным числу элементов в строке с данными - N. Если бы в результате выполнения алгоритма атрибуты остались сложными, то количество заголовков должно было получиться меньшим количества элементов в строке с данными, а это противоречит предыдущему высказыванию. Таким образом, число атрибутов после выполнения алгоритма соответствует количеству ячеек в строках с данными и эти атрибуты неделимы. Кроме того, в соответствии с пунктами алгоритма (П2, П3) вся необходимая информация о семантике столбцов собирается и сохраняется в простых атрибутах. В связи с этим после удаления строк со сложными атрибутами смысловое назначение столбцов таблицы не утрачивается.
Следует отметить, что проблемы с заголовками в данных табличного вида полностью не исчерпываются посредством применения предложенного алгоритма. В соответствии с моделью данных табличного вида заголовки могут позиционироваться внутри таблиц. Для исключения таких заголовков чаще всего недостаточно простого удаления соответствующих записей. Как правило, для выбора способа избавления от заголовков, расположенных внутри таблицы, необходим анализ нескольких факторов. Одним из результатов анализа могут быть выводы о необходимости реструктуризации таблицы.
Иногда для решения проблемы избавления от сложных атрибутов оправданно использование существующих средств. Рассмотрим пример таких средств. В качестве исходной таблицы рассмотрим фрагмент реальной таблицы, сформированной в Microsoft Excel, представленный на рис. 4.3.1.
Рис. 4.3.1. Исходная таблица со сложными атрибутами
Как видно из рис. 4.3.1, в таблице имеются два сложных атрибута - “Тип оборудования” и ”Цена”. Выполним импорт этой таблицы в СУБД Access. Для этого используется меню Файл/Внешние данные/Импорт. В процессе выполнения шагов мастера импорта указывается лист рабочей книги Microsoft Excel, назначается строка заголовка, имя создаваемой таблицы. Окно мастера на его очередном шаге имеет вид рис 4.3.2.
Рис. 4.3.2. Окно мастера импорта таблиц
При выполнении следующих шагов мастера можно назначить индексные поля, в отдельных случаях можно назначить типы полей, назначить ключевое поле. В результате выполнения всех шагов мастера исходная таблица в формате Microsoft Access примет вид рис 4.3.3.
Рис. 4.3.3. Исходная таблица в формате Microsoft Access
Даже из поверхностного анализа заголовков таблицы и содержимого полей видно, что в таком виде таблица неприемлема для использования. В связи с этим для избавления от сложных атрибутов необходимо, в соответствии с алгоритмом, сформировать простые заголовки и избавиться от подзаголовков, которые попали в значения атрибутов. В значения атрибутов, как видно из рис. 4.3.3 попали части и некоторых простых заголовков.
Редактирование заголовков реализуется, когда таблица открыта в режиме Конструктора; редактирование полей таблицы реализуется, когда таблица открыта в режиме Просмотра.
После выполнения необходимых действий в режиме Конструктора и в режиме Просмотра таблица примет вид рис. 4.3.4.
Рис. 4.3.4. Преобразованная таблица в формате Microsoft Access
Для рассмотренного фрагмента таблицы описанные выше манипуляции не составили большого труда. Однако даже эта таблица в полном объеме включает в себя более сорока полей, причем многие из них входят в состав сложных атрибутов. Нередко встречаются таблицы с несколькими сотнями столбцов, в этом случае рассмотренные мероприятия могут оказаться нетривиальными.