Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курс лекций СБД.doc
Скачиваний:
23
Добавлен:
13.11.2019
Размер:
1.94 Mб
Скачать
    1. Н ормальные формы, обоснованные функциональными зависимостями

В п. 5.1 мы упоминали о первой нормальной форме (1НФ). Приведем более строгое ее определение, а также определения других нормальных форм.

Таблица находится в первой нормальной форме (1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто.

Например, этим требованиям не удовлетворяет таблица, изображенная на рис. 5.3.1 (данные в поле Д№ не атомарные):

П№

Гор

Д№

Кол

П4

Минск

Д2,Д4,Д5

400

Рис. 5.3.1. Пример таблицы, которая не является реляционным отношением

Такие таблицы даже не рассматриваются в реляционных моделях.

Если мы разрабатываем реляционную базу данных, то на первом этапе может быть создана таблица, объединяющая все рассматриваемые данные, например, Поставщики, Детали, Поставки. Таблица на рис. 5.3.2 представляет собой корректное реляционное отношение. Его называют универсальным отношением проектируемой базы данных. В одно универсальное отношение включаются все представляющие интерес атрибуты и оно может содержать все данные, которые предполагается размещать в базе данных в будущем. Для малых баз данных универсальное отношение может использоваться в качестве отправной точки при их проектировании. Первичным ключом таблицы является комбинация полей П№ и Д№. Эта таблица удовлетворяет всем требованиям 1НФ.

П№

Статус

Гор_П

Д№

Имя_Д

Цв

Вес

Гор_Д

Кол

П1

20

Брест

Д1

Тестер

Черный

250

Борисов

300

П1

20

Брест

Д2

Дозиметр

Серый

700

Минск

200

П1

20

Брест

Д3

Радиометр

Черный

1400

Минск

400

П1

20

Брест

Д4

Часы

Желтый

140

Брест

200

П1

20

Брест

Д5

Рулетка

Красный

200

Пинск

100

П1

20

Брест

Д6

Лом

Черный

5000

Могилев

100

П2

10

Минск

Д1

Тестер

Черный

250

Борисов

300

П2

10

Минск

Д2

Дозиметр

Серый

700

Минск

400

П3

30

Гродно

Д2

Дозиметр

Серый

700

Минск

200

П4

10

Минск

Д2

Дозиметр

Серый

700

Минск

200

П4

10

Минск

Д4

Часы

Желтый

140

Брест

300

Рис. 5.3.2. Отношение в первой нормальной форме

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

Рассматриваемое отношение, которое находится в 1НФ, обладает структурой, которая по некоторым причинам не совсем желательна. Например, очевидна избыточность информации. Это приводит не только к увеличению размера базы данных, но и к разным аномалиям:

  • Вставка (Insert). Нельзя вставить данные о поставщике (П5), не указав деталь (Null-значение в ключевом поле недопустимо).

  • Удаление (Delete). При удалении некоторого кортежа приходится удалять слишком много другой информации (удаление информации о поставке удаляет информацию о поставщике).

  • Обновление (Update). Избыточная информация может привести к несовместимым результатам. Если поставщик П1 переехал в другой город, а обновление сделано не во всех кортежах, то база данных будет содержать противоречивую информацию.

Эти аномалии могут быть устранены путем приведения отношения ко второй нормальной форме, разбив его на два.

Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны неприводимой зависимостью с первичным ключом (или находятся в полной функциональной зависимости с первичным ключом).

Ф ункциональные зависимости отношений нашей базы данных, приведенных ко 2НФ, показаны на рис. 5.3.4, а соответствующие таблицы – на рис. 5.3.5.

Сейчас в базу данных можно вводить сведения о поставщиках без сведений об их товаре, при удалении сведений о товаре остаются остальные данные (о поставщиках, например), сведения о городе встречаются один раз и это снимает проблему, связанную с избыточностью информации. Т.е., благодаря декомпозиции мы избавились от многих проблем, присутствовавших в отношении в 1НФ. В то же время, отношения, приведенные на рис. 5.3.5, могут быть объединены и тогда мы вернемся к отношению, изображенному на рис. 5.3.3 – значит декомпозиция проведена без потери данных.

Таким образом, первым этапом процедуры нормализации отношения является создание проекций для исключения «приводимых» функциональных зависимостей.

П№

Статус

Гор_П

П1

20

Брест

П2

10

Минск

П3

30

Гродно

П4

10

Минск

П5

20

Брест

П№

Д№

Кол

П1

Д1

300

П1

Д2

200

П1

Д3

400

П1

Д4

200

П1

Д5

100

П1

Д6

100

П2

Д1

300

П2

Д2

400

П3

Д2

200

П4

Д2

200

П4

Д4

300

Д№

Имя_Д

Цв

Вес

Гор_Д

Д1

Тестер

Черный

250

Борисов

Д2

Дозиметр

Серый

700

Минск

Д3

Радиометр

Черный

1400

Минск

Д4

Часы

Желтый

140

Брест

Д5

Рулетка

Красный

200

Пинск

Д6

Лом

Черный

5000

Могилев



Рис. 5.3.5. Отношения в 2НФ

Однако структура отношений, показанных на рис. 5.3.5, может создать некоторые проблемы, связанные с отношением Поставщик, в котором неключевые атрибуты не являются взаимно независимыми. Зависимость атрибута Статус от атрибута П№ является функциональной и неприводимой, но эта зависимость также транзитивна через атрибут Город – каждое значение П№ определяет значение Город, а каждое значение Город определяет значение Статус. Но если выполняются зависимости АВ и ВС, то выполняется также зависимость АС. Транзитивные зависимости могут опять привести к аномалиям обновления:

  • Вставка – нельзя включить данные о некотором городе и его статусе, пока в нем нет поставщика.

  • Удаление – при удалении поставщика теряется информация о статусе города (очевидно, что причиной такой проблемы является совместная информация – в таблице содержится информация и о поставщиках, и о городе).

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

П роблема решается приведением отношения Поставщик к третьей нормальной форме через его декомпозицию:

Эта процедура исключает транзитивную зависимость и разрешает все трудности.

Отношение находится в третьей нормальной форме (3НФ) тогда и только тогда, когда оно находится в 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

Другими словами: таблица находится в третьей нормальной форме (3НФ), если она находится в 2НФ и ни одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.

Таким образом, вторым этапом нормализации является создание проекций для исключения транзитивных зависимостей.

В процессе выполнения процедуры нормализации часто возникают ситуации, когда отношение может быть подвергнуто операции декомпозиции несколькими способами. Например, отношение Поставщик (рис. 5.3.5) с функциональными зависимостями П№Город и ГородСтатус и, следовательно, транзитивной зависимостью П№ Статус. Возможны варианты декомпозиции этого отношения на две проекции, находящиеся в 3НФ:

А: (П№, Город) и (Город, Статус) (так было предложено ранее) и В: (П№, Город) и (П№, Статус)

Третий вариант декомпозиции на проекции (П№, Статус) и (Город, Статус) не может быть применен, поскольку выполняется с потерей информации – несколько городов могут иметь одинаковый статус, тогда будет потеряна информация о городе, где находится поставщик.

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

В декомпозиции А обе проекции независимы друг от друга в том смысле, что обновления в каждой из проекций могут быть выполнены совершенно независимо друг от друга. В декомпозиции В обновление любой из двух проекций должно контролироваться, чтобы не нарушить исходную зависимость ГородСтатус. Т.е., проекции декомпозиции В не являются независимыми друг от друга.

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

  • каждая функциональная зависимость в отношении R является логическим следствием функциональных зависимостей в проекциях R1 и R2;

  • общие атрибуты проекций R1 и R2 образуют потенциальный ключ, по крайней мере, для одной из них.

В рассматриваемом примере в декомпозиции А две проекции независимы, поскольку их общий атрибут Город является потенциальным ключом для второй проекции и каждая функциональная зависимость исходного отношения сохраняется в проекциях. Наоборот, в декомпозиции В две проекции не являются независимыми, т.к. зависимость ГородСтатус не может быть получена из функциональных зависимостей этих проекций, хотя их общий атрибут П№ является потенциальным ключом для обеих проекций.

Идея нормализации с декомпозицией на независимые проекции предложена Риссаненом (Rissanen) и называется декомпозицией с сохранением зависимости.