Вторая нормальная форма (2NF) – одна из возможных нормальных форм таблицы реляционной базы данных
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от ее потенциального ключа.
Неприводимость означает, что в составе потенциального ключа отсутствует меньшее подмножество атрибутов, от которого можно также вывести данную функциональную зависимость. Для неприводимой функциональной зависимости часто используется эквивалентное понятие «полная функциональная зависимость».
Если потенциальный ключ является простым, то есть состоит из единственного атрибута, то любая функциональная зависимость от него является неприводимой (полной). Если потенциальный ключ является составным, то согласно определению второй нормальной формы в отношении не должно быть неключевых атрибутов, зависящих от части составного потенциального ключа.
Вторая нормальная форма по определению запрещает наличие неключевых атрибутов, которые вообще не зависят от потенциального ключа. Таким образом, вторая нормальная форма запрещает создавать отношения как несвязанные (хаотические, случайные) наборы атрибутов.
Примерприведения отношения ко второй нормальной форме
Исходная таблица (1NF):
Фамилия | Имя | Отчество | Пол | Дата рождения | Группа | Специальность |
Иванов | Иван | Иванович | Муж. | 19.01.1990 | ПП-119 | АСУ |
Петров | Петр | Петрович | Муж. | 20.03.1991 | Э-119 | Электронщики |
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 | ПК-129 | Прикладная Информатика |
Петров | Илья | Петрович | Муж. | 20.05.1991 | Э-119 | Электронщики |
Данные, находящиеся в столбцах «Группа» и «Специальность» могут повторяться в процессе заполнения много раз, что вызовет избыточность данных в таблице. Следовательно, данную таблицу можно разделить на 3 сущности, имеющие отношения между собой.
В результате приведения к 2NF получаются три отношения:
1) Таблица с данными о студенте:
Фамилия | Имя | Отчество | Пол | Дата рождения |
Иванов | Иван | Иванович | Муж. | 19.01.1990 |
Петров | Петр | Петрович | Муж. | 20.03.1991 |
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 |
Петров | Илья | Петрович | Муж. | 20.05.1991 |
2) Список групп:
Группа |
ПП-119 |
Э-119 |
ПК-129 |
Э-119 |
3) Список специальностей:
Специальность |
АСУ |
Электронщики |
Прикладная Информатика |
Электронщики |
Третья нормальная форма (3NF) – одна из возможных нормальных форм отношения реляционной базы данных
3NF была изначально сформулирована Э.Ф. Коддом в 1971 году.
База данных будет находиться в третьей нормальной форме, если она приведена ко второй нормальной форме и каждый не ключевой столбец независим друг от друга. Если следовать процессу нормализации правильно до этой точки, с приведением к 3НФ может и не возникнуть вопросов. Следует знать, что 3НФ нарушается, если изменив значение в одном столбце, потребуется изменение и в другом столбце.
Пример приведения отношения к третьей нормальной форме:
Чтобы привести базу к третьей нормальной форме, надо:
1. Определить, в каких полях каких таблиц имеется взаимозависимость. Как только что говорилось, поля, которые зависят больше друг от друга (студент от группы, а группа от специальности), чем от ряда в целом.
2. Создайте соответствующие таблицы. Если есть проблемный столбец в шаге 1, создавайте раздельные таблицы для него.
3. Создайте или выделите первичные ключи. Каждая таблица должна иметь первичный ключ. Для примера с клиентами это будут ID_Student, ID_gruppa, ID_Specialnost.
4. Создайте необходимые внешние ключи, которые образуют любое из отношений. В нашем примере нужно добавить ID_gruppa в таблицу студентов и ID_Specialnost в таблицу групп.
В результате приведения к 3NF получаются три отношения:
1) Таблица с данными о студенте:
ID_Student | Фамилия | Имя | Отчество | Пол | Дата рождения | ID_Gruppa |
Иванов | Иван | Иванович | Муж. | 19.01.1990 | ||
Петров | Петр | Петрович | Муж. | 20.03.1991 | ||
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 | ||
Петров | Илья | Петрович | Муж. | 20.05.1991 |
2) Список групп:
ID_Gruppa | Группа | ID_Specialnost |
ПП-119 | ||
Э-119 | ||
ПК-129 | ||
Э-119 |
3) Список специальностей:
ID_Specialnost | Специальность |
АСУ | |
Электронщики | |
Прикладная Информатика | |
Электронщики |
Целостность данных
Одно из основных требований к проектируемой базе данных – в любой момент времени данные должны быть достоверными, полными и непротиворечивыми. На уровне целостности данных обеспечивается полнота данных. То есть каждая стержневая (или ассоциативная) сущность должна обладать полным комплектом атрибутов, хранящихся в экземплярах характеристических и обозначающих сущностей. Полнота данных или целостность (integrity) в базах данных обеспечивается специальными механизмами, суть которых будет рассмотрена ниже.
Ссылочная целостность – это обеспечение непротиворечивого соответствия между значением первичного ключа характеристической сущности и значением внешнего ключа стержневой сущности.
Целостность данных может быть обеспечена по трем направлениям:
- целостность по сущностям. Здесь имеется в виду целостность атрибутов внутри каждого экземпляра сущности. В данном случае более корректно говорить о достоверности и непротиворечивости атрибутов внутри экземпляра сущности;
- целостность по ссылкам. В этом случае контролируется правильность установления связей между сущностями в соответствии с приведенным выше определением. Здесь решается вопрос о возможности выполнения каскадных операций удаления экземпляров сущностей (или редактирования значения внешних ключей), о запрете каскадных воздействий, о назначении пустых (null) значений внешним ключам;
- целостность, определяемая пользователем. Для каждого приложения базы данных могут определяться (и они определяются) конкретные правила определения условий ссылочной целостности.
По любому из указанных направлений ссылочная целостность может контролироваться при всех операциях, изменяющих информацию в базе данных, при этом возможны следующие варианты обработки событий:
- отсутствие проверки;
- проверка допустимости;
- запрет операции;
- каскадное выполнение операций обновления или удаления данных одновременно в нескольких связанных сущностях;
- установка пустого (null) значения по умолчанию.