Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
доп.docx
Скачиваний:
37
Добавлен:
26.03.2016
Размер:
115.88 Кб
Скачать

2.7.3 Вторая нормальная форма таблицы.

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

Код заказа

Дата заказа

Код товара

Сумма заказа

11

08/04/99

ПР1

60.00

11

08/04/99

ПР2

60.00

11

08/04/99

ПР3

60.00

Из-за преобразования для соответствия первой нормальной форме, поле Код заказа перестало быть уникальным, поскольку его значение теперь повторяется в нескольких записях. То же самое произошло и с другими одиночными полями. Сочетание же значений полей Код заказа и Код товара ни в одной строке не повторяется, поэтому его можно принять за новый уникальный ключ. После этого необходимо проверить, все ли остальные поля зависят от комбинации Код заказа и Код товара.

Нетрудно заметить, что дата заказа и сумма заказа является свойствами заказа и, следовательно, зависит от кода заказа, и не зависит от кода товара, который может принадлежать различным заказам. Поэтому, согласно правилу второй нормальной формы эти, два поля надо поместить в отдельную таблицу вместе с полем Код заказа, от которого они зависят. Это приведет к образованию двух таблиц: «Заказы» и «Содержание заказов». Таблица «Заказы» использует в качестве индексного поля Код заказа, а таблица «Содержание заказов» использует качестве индекса комбинацию полей Код заказа и Код товара.

Таблица «Заказы»

Код заказа

Дата заказа

Сумма заказа

11

08/04/99

60.00

22

08/05/99

10.00


Таблица «Содержание заказов 1»

Код заказа

Код товара

Позиция в заказе

11

ПР1

001

11

ПР2

002

11

ПР3

003

22

ПР4

001


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

Чтобы связать информацию в таблице «Заказы» с таблицей «Содержание заказов», нужно определить отношение между ними. Отношение будет основано на поле Код заказа. Такое отношение называется "один - ко - многим", поскольку каждый заказу, представленному одной строкой в таблице «Заказы», может соответствовать несколько строк в таблице «Содержание заказов». Теперь клиент может заказывать любое количества товаров!

2.7.4 Третья нормальная форма таблицы.

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

Таблица с деталями заказов не имеет поля, однозначно определяющего запись. В ней может быть более одной записи с одинаковыми значениями Код заказа, да и значения Код товара может появляться несколько раз - как в одном заказе, так и в разных. Значения поля Позиция в заказе повторяются начиная с 1 для каждого заказа. А вот сочетание полей Код заказа и Позиция в заказе уникально для каждой записи. Даже если один товар повторяется в заказе дважды, то для него значения поля Позиция в заказе все равно будут разными. Поэтому говорят, что таблица «Содержание заказов» имеет составной первичный ключ.

Для иллюстрации третьей нормальной формы добавим к таблице еще одно поле с наименованием товара Наименование товара. Таблица примет следующий вид:

Таблица «Содержание заказов 2»

Код заказа

Код товара

Позиция в заказе

Наименование товара

11

ПР1

001

Процессор

11

ПР2

002

Модем

11

ПР3

003

Мышь

22

ПР4

001

Модем

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

Зависит ли код товара от названия товара? Лишь в некоторой степени зависит, поскольку один и тот же вид товара может иметь разные размеры, расцветку, и соответственно разные коды. Поэтому одному названию товара может соответствовать несколько кодов, но каждый код однозначно соответствует своему названию.

Зависит ли название товара только от ключевых полей? Нет, вместо них оно однозначно зависит от кода товара Код товара. Поэтому поле Наименование товара не удовлетворяет условию третьей нормальной формы.

В качестве решения можно поместить название товара и его код (и, быть может, ряд других его свойств: цена, количество на складе и т.п.) в отдельную таблицу «Товары», где код товара будет индексным полем. Получится структура, показанная в таблицах «Содержание заказов 4» и «Товары».

Таблица «Содержание заказов 4»

Код заказа

Код товара

Позиция в заказе

11

ПР1

001

11

ПР2

002

11

ПР3

003

22

ПР4

001

Таблица «Товары»

Код товара

Наименование товара

ПР1

Процессор

ПР2

Модем

ПР3

Мышь

ПР4

Модем

Проведя подобный анализ для всех таблиц, составляющих базу данных, её можно считать нормализованной. (Хотя имеются ещё два правила нормализации, потребность в них возникает чрезвычайно редко).