Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационное обеспечение3.Х.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
807 Кб
Скачать
☆
      1. Нормальные формы

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

Определено шесть нормальных форм: 1-5 нормальные формы (1НФ, 2НФ,… 5НФ) и нормальная форма Бойса-Кодда (НФБК).

НФБК является уточнением 3НФ и вводит более строгие требования к таблицам, чем 3НФ, не отменяя ее.

На практике для получения хорошего проекта обычно достаточно привести таблицы к 3НФ или к НФБК.

Первая нормальная форма – 1НФ: любое отношение с учетом ограничений целостности находится в 1НФ, таблица эквивалентная отношению с учетом ограничений целостности – реляционная таблица, также находится в 1НФ.

Вторая нормальная форма – 2НФ.

Определение 1 [4, 12]: отношение (таблица) находится во 2НФ тогда и только тогда, когда она находится в 1НФ, и каждый ее неключевой атрибут (столбец) минимально (полностью) зависит от каждого ключа.

Определение 2 [10]: отношение (таблица) находится во 2НФ тогда и только тогда, когда она находится в 1НФ, и нет неключевых атрибутов (столбцов), зависящих от части составного ключа.

Оба определения 2НФ по сути своей идентичны. Первое опирается на определение полной или минимальной функциональной зависимости, а второе включает это определение в себя.

Третья нормальная форма – 3НФ.

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

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

Оба определения 3НФ по сути своей идентичны. Первое опирается на определение транзитивной функциональной зависимости, а второе включает это определение в себя.

Нормальная форма Бойса-Кодда – НФБК.

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

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

Формализация алгоритма нормализации при рассмотрении определений нормальных форм с учетом возможных ключей достаточно затруднена. Если использовать в определениях зависимости только от первичного ключа, можно сформулировать алгоритм приведения универсального отношения к 3НФ или НФБК [2, 10].

      1. Правила нормализации

В основе алгоритма нормализации лежат два правила.

Правило №1 приведения таблицы, находящейся в 1НФ и не удовлетворяющей условиям 2НФ, к 2НФ.

Пусть задана таблица T, находящаяся в 1НФ со столбцами K1, K2, F пара столбцов K1 и K2 являются составным первичным ключом. В таблице имеется функциональная зависимость K2→F. Наличие K2→F говорит о том, что таблица T не находится в 2НФ. Рекомендуется создать новую таблицу T1, состоящую из атрибутов K2 и F и первичным ключом K2. Из исходной таблицы необходимо удалить поле F. В результате обе таблицы будут находиться в 2НФ.

В краткой форме:

Пусть T(K1,K2,F), где первичный ключ – (K1, K2) и K2→F.

Необходимо сделать:

T1(K2,F), где первичный ключ – K2 и K2→F,

T(K1,K2), где первичный ключ – (K1, K2).

Любой из столбцов и/или все K1, K2, F могут являться наборами столбцов.

Некоторые частные случаи правила.

Если таблица содержит столбец, полностью функционально зависящий от первичного ключа, то столбец остается в исходной таблице:

Пусть T(K1,K2,F1,F2), где первичный ключ – (K1, K2) и K2→F2, (K1,K2) →F1.

Необходимо сделать:

T1(K2,F2), где первичный ключ – K2 и K2→F2,

T(K1,K2, F1), где первичный ключ – (K1, K2) и (K1,K2) →F1.

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

Пусть T(K1,K2,F1,F2), где первичный ключ – (K1, K2) и K2→ (F1, F2).

Необходимо сделать:

T1(K2, F1,F2), где первичный ключ – K2 и K2→ (F1,F2),

T(K1,K2), где первичный ключ – (K1, K2) .

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

Пусть T(K1,K2,F1,F2), где первичный ключ – (K1, K2) и K1→ F1, K2→ F2.

Необходимо сделать:

T1(K1, F1), где первичный ключ – K1 и K1→ F1,

T2(K2, F2), где первичный ключ – K2 и K2→ F2,

T(K1,K2), где первичный ключ – (K1, K2).

Правило №2 приведения таблицы, находящейся в 2НФ и не удовлетворяющей условиям 3НФ, к 3НФ.

Пусть задана таблица T, находящаяся в 2НФ со столбцами K, F1,F2, где K – первичный ключ. В таблице имеется следующая функциональная зависимость F1→F2 и F1 не является возможным ключом. Наличие F1→F2 говорит о том, что таблица T не находится в 3НФ (K→F2 транзитивно). Рекомендуется создать новую таблицу T1, состоящую из атрибутов F1 и F2 и первичным ключом F1. Из исходной таблицы необходимо удалить поле F2. В результате обе таблицы будут находиться в 3НФ.

В краткой форме:

Пусть T(K,F1,F2), где первичный ключ – K и F1→F2.

Необходимо сделать:

T1(F1,F2), где первичный ключ – F1 и F1→F2,

T(K,F1), где первичный ключ – K.

Любой из столбцов и/или все K, F1,F2 могут являться наборами столбцов.

Некоторые частные случаи правила.

Если таблица содержит столбец, полностью функционально зависящий от первичного ключа, то столбец остается в исходной таблице:

Пусть T(K,F1,F2,F3), где первичный ключ – K и F1→F2, K→F3.

Необходимо сделать:

T1(F1,F2), где первичный ключ – F 1 и F 1→F2,

T(K1,K2, F1,F3), где первичный ключ – (K1, K2) и (K1,K2) →F1.

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

Пусть T(K,F1,F2,F3), где первичный ключ – K и F1→ (F2, F3).

Необходимо сделать:

T1(F1, F2,F3), где первичный ключ – F1 и F1→ (F2, F3),

T(K, F1), где первичный ключ – K.

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

Пусть T(K,F1,F2,F3,F4), где первичный ключ – K и F1→ F2, F3→ F4.

Необходимо сделать:

T1(F1, F2), где первичный ключ – F1 и F1→ F2,

T2(F3, F4), где первичный ключ – F3 и F3→ F4,

T(K, F1,F3), где первичный ключ – K.

Если таблица содержит столбец, который функционально зависит от зависимого столбца первоначальной зависимости, то правило применяется каскадно:

Пусть T(K,F1,F2,F3), где первичный ключ – K и F1→F2, F2→F3.

Необходимо сделать:

Первый шаг.

T1(F1, F2,F3), где первичный ключ – F1 и F1→F2, F2→F3,

T(K, F1), где первичный ключ – K.

Второй шаг.

T2(F2,F3), где первичный ключ – F2 и F2→F3,

T1(F1, F2), где первичный ключ – F1 и F1→F2,

T(K, F1), где первичный ключ – K.