Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Microsoft SQL Server 2008 исправленная1.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
8.11 Mб
Скачать

Нормализация

С точки зрения нормализации, существует 6 нормальных форм:

  • 1-я НФ (обычно обозначается также 1НФ)

  • 2НФ

  • 3НФ

  • НФ Бойса-Кодда (НФБК)

Но на практике обычно используется только три. Вначале - о первой нормальной форме.

Формальное определение ее очень сурово:

Схема отношения R находится в первой нормальной форме, если значения в dom(A) являются атомарными для каждого атрибута A в R.

Но на обычный язык переводится достаточно просто: каждый атрибут отношения должен хранить одно-единственное значение и не являться ни множеством, ни списком.

Предположим, что у нас есть таблица следующего вида:

Атрибут "контактные лица" здесь, конечно, не является атомарным, поскольку в нем попадаются списки из нескольких лиц. Можно разделить его так:

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

Теперь наше отношение находится в первой нормальной форме. На практике часто бывает очень сложно определить, когда атрибут является атомарным, а когда нет - все зависит от того, как он будет использоваться. Вполне может быть, что для разных пользователей потребуется разная степень дробности атрибутов. Здесь необходимо помнить, что объединять данные из базы легко, а дробить их после занесения информации - сложно. На практике нарушения первой нормальной формы встречаются.

Формальное определение второй нормальной формы выглядит так:

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

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

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

Формальное определение третьей нормальной формы выглядит так:

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

Переводя на человеческий язык: чтобы привести отношение к третьей нормальной форме, необходимо устранить функциональные зависимости между неключевыми атрибутами отношения. То есть данные, хранимые в таблице, должны зависеть только от ключа. В нашем случае присутствует функциональная зависимость между атрибутами "Ф.И.О", "Должность" и "Телефон". Чтобы от нее избавиться, можно разбить нашу таблицу на две.

Первая таблица будет хранить данные, относящиеся к непосредственно к самому предприятию:

Вторая таблица будет хранить факты, относящиеся к конкретному лицу, исполняющему некоторые обязанности на данном предприятии:

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]