Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

БД / bd / Нормализация

.pdf
Скачиваний:
34
Добавлен:
22.05.2015
Размер:
212.08 Кб
Скачать

Для любого множества функциональных зависимостей существует по крайней мере одно эквивалентное множество, которое является неприводимым. Такое эквивалентное множество называется неприводимым покрытием.

Итак, метод синтеза не требует построения начальной логической схемы БД, однако сложен для выполнения, т.к. число функциональных зависимостей всей БД может быть большим (сложность формирования I).

Достоинства метода синтеза – оптимальное число отношений БД, все отношения сразу находятся в 3НФ.

2) Декомпозицию – формирование отношений БД путем разделения их на более мелкие, если эти отношения не выполняют правила необходимой нормальной формы.

2.1.Синтез реляционных баз данных.

База данных состоит из множества атрибутов и ключей. С точки зрения теоретико-множественного описания реляционной базой данных d

называется такая совокупность отношений {R1, R2, ...,Rp}, в которой каждое отношение имеет вид Ri= (Si,Ki), где Si- множество атрибутов, а Ki -

множество атрибутов образующих ключ.

Предположим на входе задано множество F- зависимостей F над R. С

их помощью требуется создать базу данных R=( R1, R2, ...,Rp). Эта БД должна удовлетворять следующим требованиям:

1.Множество F полностью характеризуется с помощью R , т.е.

F ≡ {K Ri | Ri R}

где К – выделенный ключ Ri.

2.Каждое отношение Ri находится в третьей нормальной форме.

3.Не существует базы данных с меньшим числом отношений,

удовлетворяющим пунктам 1 и 2.

4. Соединение всех полученных отношений Ri дает исходное отношение R.

Алгоритм порождающий базу данных из заданных F-зависимостей называется алгоритмом синтеза.

Определение. Если R – база данных и на ней задано множество F-

зависимостей G, то в ней существует по крайней мере |EG| отношений. Это означает, что в R столько же отношений, сколько и классов эквивалентности.

Из этого следует следующее.

Пусть F - множество F – зависимостей. Любая база данных должна иметь |EF’| отношений, где F’ неизбыточное покрытие для F.

Исходя из этого строится способ построения структуры базы данных.

Сначала находится неизбыточное покрытиеF’ для F и в EF’ вычисляем классы эквивалентности. Для каждого EF’(X) строим отношение, состоящее из всех атрибутов, появляющихся в EF’(X). При этом атрибуты левой части каждого класса эквивалентности образуют выделенный ключ.

Реализация этого способа позволяет получить следующий алгоритм:

Вход: множество F – зависимостей F над R.

Выход: полная схема баз данных для F.

1.Наити для F редуцированное минимальное покрытие G.

2.Для каждой CF – зависимости (X1,X2,…,X k) Y из G построить отношение Rj= X1X2…X kY с выделенными ключами K={X1,X2,…X k).

3.Вернуться к п. 2.

Для всякой предметной области можно построить несколько эквивалентных F-описаний. Опираясь на некоторое исходное F-описание заданной предметной области, можно найти для F эквивалентное неизбыточное представление. Неизбыточное представление представление,

лишенное избыточных ФЗ и посторонних атрибутов. Для этого существуют соответствующие алгоритмы «чистки» F-описания.

«Чистка» исходного F-описания выполняется в два этапа:

Fред.

1. вначале из F удаляются все избыточные ФЗ (они логически следуют из оставшихся). Полученное в результате множество ФЗ называют

неизбыточным покрытием F и обозначают Fнеизб;

2. далее из Fнеизб удаляются посторонние атрибуты. Этот процесс называется редуцированием, а полученное в результате множество ФЗ

называется редуцированным покрытием и обозначается Fред.

Множество ФЗ не всегда является самым экономным

(оптимальным) представлением семантической структуры предметной области. Тем не менее, использование Fред. для синтеза схемы БД обеспечивает в достаточной мере неизбыточность получаемой БД.

Известно, что к организации БД предъявляются три требования:

неизбыточность, непротиворечивость, независимость. Последнее из них – независимость данных от приложений достигается в основном средствами СУБД. Неизбыточность и непрворечивость БД можно обеспечить путём выбора подходящей схемы БД.

В теории нормализации доказано, что БД будет неизбыточной и средствами СУБД можно достичь её непротиворечивого состояния, если её схема будет эффективной относительно заданного F-описания предметной области.

Пусть R – множество имен атрибутов, значения которых требуется хранить в БД, и F – множество ФЗ, описывающих связи между атрибутами.

m

ρ = {R1 , R 2 ,..., R m | UR i = R}

i=1

Схема БД над R называется эффективной относительно F, если:

1)она сохраняет F (разбиение R на R1, R2, …, R m не приводит к потере зависимостей из F, а значит, связей между атрибутами);

2)обладает свойствами соединения без потерь информации

(представления БД в виде одной таблицы r(R) или в виде совокупности

таблиц r1(R1), r2(R2), …, r m(Rm) равносильны). Последнее означает, что любое

допустимое состояние таблицы r(R) всегда можно получить из таблиц r1(R1),

r2(R2), …, r

m(Rm) с помощью операции естественного соединения

к(К) = к11) к22) …

кьь)

3)

все подсхемы Ri ρ

нормализованы, то есть находятся в

НФБК(нормальной форме Бойса– Кодда). Это означает, что всякая ФЗ,

действующая в рамках таблицы ri(Ri) в левой части имеет ключ таблицы ri(Ri), i =1, 2, …, m.

Теорема. Для любого множества ФЗ F, заданного на конечном

множестве атрибутов R, всегда существует схема БД

m

ρ ={R1 , R 2 ,..., R m | UR i = R}

i=1

обладающая свойством соединения без потерь, сохраняющая все ФЗ из

F и находящаяся в 3НФ.

Свойства схемы БД, удовлетворяющей условиям данной теоремы,

вполне приемлемы для практики, так как они гарантируют непротиворечивость БД. 3НФ допускает определённое избыточное дублирование данных, но с этим приходится мириться и учитывать в программах ввода и редактирования данных.

На рисунке 1.1 показана схема получения БД методом синтеза.

RF

Построение

неизбыточного

покрытия

RFнеизб

Построение

редуцированного

покрытия

RFред

 

 

 

 

 

R, ρ?

 

 

 

 

 

 

 

 

Промежуточный

 

Метод синтеза

 

 

Fред

 

 

 

вариант схемы БД

 

 

 

 

 

да/нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конечная схема БД

ρ ={R1 , R2 ,..., Rm }

Рис.1.1. Схема получения БД методом синтеза.

2.2. Пример синтеза.

Пусть дан документ в виде приходного ордера (рис.2.1)

Воспользуемся методом синтеза БД, применив определения нормальных форм и алгоритм, описанный выше.

Имя атрибута

Семантика

 

 

A

№ накладной

 

 

B

дата

 

 

C

поставщик

 

 

D

дом

 

 

E

улица

 

 

F

город

 

 

G

имя детали

 

 

K

количество

 

 

L

единица измерения

 

 

M

цена за единицу

 

 

N

стоимость

 

 

Отсюда получаем следующие функциональные зависимости: A→B - дата зависит от № накладной;

C→DEF - дом, улица и город зависят от поставщика;

G→ML - единица измерения и цена за единицу зависят от имени детали; ABCG→K - количество может зависеть от № накладной, даты, поставщика и имени детали;

GKM→N - общая стоимость зависит от имени детали, количества и цены за единицу.

Исключим последнюю ФЗ для получения неизбыточного покрытия, т.к.

стоимость может быть посчитана как произведение Количество*

Цена_за_ед.

Для построения редуцированного покрытия необходимо из левых и правых частей ФЗ удалить посторонние атрибуты.

Редуцирование левых частей: A→B

C→DEF

G→ML

AG→K

Редуцирование правых частей:

Данное множество ФЗ является редуцированным справа.

В итоге получили следующую совокупность таблиц:

Данную БД необходимо привести к 3НФ и установить связи между таблицами.

Полученное множество отношений уже находится в 1НФ, т.к.

дальнейшее деление атрибутов не возможно. Продолжим нормализацию.

Отношение находится во 2НФ, тогда и только тогда, когда оно находится в

1НФ. Все поля зависят от первичного ключа. Первичный ключ неизбыточен.

Отношение находится в 3НФ, тогда и только тогда, когда оно находится во

2НФ. В таблице не должно быть транзитивных зависимостей между неключевыми полями. Или другими словами значение неключевого поля не зависит от любого неключевого поля. Установим связь: «Поставщики» - «Накладные» (1:М) и получим следующее:

Данная база данных находится в 3НФ, что нам и требовалось.

2.3. Пример декомпозиции.

Пусть дан документ в виде приходного ордера (рис.2.1. см. пункт 2.2.

Пример синтеза).

Выполним последовательную декомпозицию пошагово, применив определения нормальных форм, которые даны выше.

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

Применив определение, выберем из документа названия полей.

Получим отношение «Приход» (рис.2.2).

Поле «Дата» не делится на день, месяц и год, т.к. существует такой тип переменной. При необходимости значения можно получить любую часть даты из общего значения. Напротив «Адрес» является составным однотипным элементом и требует разделения на «Город», «Улица» и «Дом».

Приход

Номер_накладной

Дата

Поставщик

Город

Улица

Дом

Название_Детали

Количество

Единица_изм.

Цена_за_ед.

Стоимость Рис.2.2 – Таблица «Приход» в 1НФ.

Считаем, что таблица «Приход» находится в 1НФ и дальнейшее деление атрибутов невозможно.

2НФ. Отношение находится во 2НФ, тогда и только тогда, когда оно находится в 1НФ. Все поля зависят от первичного ключа. Первичный ключ неизбыточен.

а) Определим атрибуты первичного ключа. Выберем поле «Деталь» как первичный ключ. Это поле определяет характеристики детали. Но другие поля не определяет. Значит ключ составной. Добавим к нему поле

«Поставщик», характеризующее поставщика и поля «Номер накладной» и «Дата», характеризующие документ. Получим отношение (рис.2.3).

Приход

Название_Детали Поставщик Номер_накладной Дата

Город

Улица

Дом

Количество

Единица_изм.

Цена_за_ед.

Стоимость Рис. 2.3 – Первый шаг в выборе ключа

б) Если ключ избыточен – уточнить состав полей в первичном ключе.

Проведем дополнительный анализ зависимостей внутри составного ключа.

Увидим, что «Номер накладной» однозначно определяет поля «Дата» и «Поставщик». Следовательно эти поля вернем обратно в разряд неключевых атрибутов. Получим отношение (рис.2.4)

Соседние файлы в папке bd