Третья нормальная форма (3NF) в базе Oracle

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

Таблица сотрудников (приводившаяся в этом посте - таблица 1) удовлетворяет требованиям первой нормальной формы, поскольку не содержит никаких повторяющихся групп. Она также удовлетворяет и требованиям второй нормальной формы (2NF), поскольку не имеет составного ключа. Роль первичного ключа в ней, однако, выполняет столбец номера сотрудника (Employee Number), а, как видно, столбцы названия (Department Name) и расположения отдела (Department Location) от него никак не зависят — они зависят от значений в столбце номера отдела (Department Number). Поэтому для приведения этой таблицы к третьей нормальной форме нужно перенести из нее все атрибуты отделов в отдельную таблицу. Эту новую таблицу можно назвать таблицей отделов (Departments) и сделать для нее первичным ключом столбец номера отдела (Department Number).

Причина для разбиения таблицы сотрудников на две отдельных таблицы вполне очевидна: это позволит избежать вероятности возникновения аномалий удаления и обновления. Предположим, что в организации появился новый отдел, для которого пока не было нанято ни одного сотрудника. Текущая модель не позволит внести запись об этом отделе в таблицу сотрудников. В табл. 1 показано, как в рассматриваемом примере должны выглядеть таблицы в третьей нормальной форме.

Таблица 1. Таблицы в третьей нормальной форме

Таблица сотрудников (Employees Table) Таблица отделов (Departments Table) Таблица навыков (Skills Table) Таблица навыков сотрудника Employee Skills Table)
Номер сотрудника (Employee Number) Номер отдела (Department Number) Идентификатор навыка (Skill ID) Номер сотрудника (Employee Number)
Имя сотрудника (Employee Name) Название отдела (Department Name) Наименование навыка (Skill Name) Идентификатор навыка (Skill ID)
Номер отдела (Department Number) Расположение отдела (Department Location)   Уровень владения навыком (Skill Level)

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

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

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

 

Вас заинтересует / Intresting for you:

Oracle IDE: JDeveloper, SQL De...
Oracle IDE: JDeveloper, SQL De... 4544 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Oracle и Java: использование P...
Oracle и Java: использование P... 5775 просмотров sepia Tue, 08 May 2018, 08:52:34
Значения NULL в PL/SQL Oracle
Значения NULL в PL/SQL Oracle 4826 просмотров Дэн Wed, 01 Jul 2020, 08:10:56
Apex Oracle обучающий видеокур...
Apex Oracle обучающий видеокур... 8822 просмотров Дэн Sun, 05 Aug 2018, 16:36:33
Войдите чтобы комментировать

anders7777 аватар
anders7777 ответил в теме #7948 7 года 3 мес. назад
Все отлично разжевано! Кстати, вопрос к разработчикам. Все ли соблюдают досконально правила нормализации данных при разработке баз данных?