Нормализованные таблицы в базе данных позволяют уменьшить избыточность данных, в большинстве случаев увеличивают гибкость использования системы, предоставляя возможность выполнять произвольные, сколь угодно сложные запросы, что временами повышает ее производительность. Это в полном объеме относится к оперативным данным, т. е. к данным, регулярно используемым в ежедневном решении оперативных задач предметной области. Такие задачи называются задачами оперативной обработки транзакций (OLTP — Online Transaction Processing).
Нормальная форма Бойса — Кодда (BCNF) является как бы развитием третьей нормальной формы. Она запрещает в качестве столбца, входящего в состав первичного ключа, использовать столбец, который функционально зависит от неключевого столбца, т. е. значение такого столбца можно выбрать из другой таблицы базы данных. Трудно себе представить разработчиков, которые могут создавать таблицы такой изощренной (или просто неразумной) структуры.
Третья нормальная форма (3NF) требует соблюдения условий второй нормальной формы, и чтобы ни один неключевой столбец не зависел от другого неключевого столбца. Для примера рассмотрим таблицу, описывающую отделы организации (табл. 2.4) 
Вторая нормальная форма (2NF) требует, чтобы соблюдались условия первой нормальной формы и чтобы любой неключевой столбец зависел от всего первичного ключа таблицы, а не от его части. Это правило относится только к тому случаю, когда первичный ключ образован из нескольких столбцов.
Пример. Пусть таблица регионов REGION в процессе проектирования приняла следующий вид (табл. 2.3).
Первая нормальная форма (иногда в литературе используется сокращение 1НФ или 1NF — first normal form) требует, чтобы значение любого столбца было единственным, атомарным. Иными словами, в таблице не должно быть повторяющихся групп. В литературе корпорации Microsoft к первой нормальной форме предъявляется также и требование, чтобы каждая таблица имела первичный ключ.
Первая задача при проектировании базы данных — составление списка таблиц и разработка структуры каждой таблицы. В реляционных базах данных есть понятие нормализации таблиц. Существует набор стандартов проектирования данных, называемых нормальными формами. Нормальные формы определяют правила, которым должны соответствовать структуры таблиц. Общепризнанными являются шесть нормальных форм, хотя в литературе по базам данных можно найти и гораздо большее количество форм нормализации. На практике обычно используется третья нормальная форма.
Хорошим примером такого отношения является отношение между таблицей авторов и таблицей книг. Одна книга может быть написана несколькими авторами, один автор может написать несколько книг (рис. 2.3).

Отношение "один ко многим" между двумя таблицами реализуется связкой "внешний ключ/первичный ключ". Реже применяется связка "внешний ключ/уникальный ключ". Это отношение иногда в литературе называют отношением "многие к одному".
Такое отношение можно назвать универсальным — с его помощью можно представить практически любые отношения в базе данных, начиная от простой иерархии до реализации отношения "многие ко многим".
Если между двумя таблицами базы данных появляется отношение "один к одному", то лучше объединить эти таблицы в одну. Основной причиной использования этого отношения является экономия памяти и увеличение скорости выполнения запросов.
Такое отношение используется в том случае, если связь между двумя таблицами не является обязательной.
Не так часто в реальной жизни встречаются случаи, когда требуется использовать отношение "один к одному".
В базах данных существует три вида отношений: "один к одному", "один ко многим" и "многие ко многим". Отношения в реляционных базах данных чаще всего реализуются связкой "внешний ключ/первичный ключ", реже — связкой "внешний ключ/уникальный ключ". Отношение между двумя таблицами вида "многие ко многим" реализуется добавлением третьей связующей таблицы и двумя связками "внешний ключ/первичный ключ".
Рассмотрим по порядку эти три отношения. Во всех примерах мы будем использовать графическое описание данных. Прямоугольники в этих графических описаниях будут изображать таблицы, линии со стрелками или без стрелок будут представлять отношения между таблицами

Популярные новости

Опрос

Какие языки программирования вы хотите видеть на сайте

Другие опросы...