Первая нормальная форма (1NF ) свойство отношения в реляционной базе данных. Отношение находится в первой нормальной форме тогда и только тогда, когда домен каждого атрибута содержит только атомарные (неделимые) значения, а значение каждого атрибута содержит только одно значение из этого домена. Первое определение этого термина в документе конференции 1971 года, сделанном Эдгаром Коддом, определяло отношение как имеющее первую нормальную форму, когда ни один из его доменов не имеет никаких наборов в качестве элементов.
Первая нормальная форма Форма - это важное свойство отношения в реляционной базе данных. Нормализация базы данных - это процесс представления базы данных в терминах отношений в стандартных нормальных формах, где первая нормальная форма является минимальным требованием.
Первая нормальная форма обеспечивает соблюдение следующих критериев:
В следующих сценариях сначала показано, как проект базы данных может нарушать первую нормальную форму, а затем приведены соответствующие примеры.
Ниже представлена таблица, в которой хранятся имена и номера телефонов клиентов. Одно из требований - сохранить несколько телефонных номеров для некоторых клиентов. Самый простой способ удовлетворить это требование - разрешить столбцу «Номер телефона» в любой заданной строке более одного значения:
Идентификатор клиента | Имя | Фамилия | Номер телефона |
---|---|---|---|
123 | Пуджа | Сингх | 555-861-2025, 192-122-1111 |
456 | Сан | Чжан | (555) 403–1659 доб. 53; 182-929-2929 |
789 | Джон | Доу | 555-808-9633 |
Столбец телефонных номеров содержит несколько телефонных номеров в одном значении. Например, в первой строке два телефонных номера, разделенных запятой. Значения столбца не атомарны: его можно разделить на два числа. Это нарушает первую нормальную форму.
Очевидным решением является введение большего количества столбцов:
Идентификатор клиента | Имя | Фамилия | Номер телефона1 | Телефонный номер2 |
---|---|---|---|---|
123 | Пуджа | Сингх | 555-861-2025 | 192-122-1111 |
456 | Сан | Чжан | (555) 403–1659 доб. 53 | 182-929-2929 |
789 | Джон | Доу | 555-808-9633 |
Технически эта таблица не нарушают требование о том, чтобы значения были атомарными. Однако неформально две колонки с телефонными номерами по-прежнему образуют «повторяющуюся группу»: они повторяют то, что концептуально является одним и тем же атрибутом, а именно телефонным номером. Был введен произвольный и, следовательно, бессмысленный порядок: почему 555-861-2025 помещается в столбец Номер телефона1, а не в столбец Номер телефона2? Нет причин, по которым у клиентов не может быть более двух телефонных номеров, поэтому сколько столбцов Номер телефона должно быть? Невозможно найти телефонный номер без поиска в произвольном количестве столбцов. Добавление дополнительного телефонного номера может потребовать реорганизации таблицы путем добавления нового столбца, а не просто добавления новой строки (кортежа). (Нулевое значение для номера телефона 2 для клиента 789 также является проблемой.)
Чтобы привести модель к первой нормальной форме, мы разбиваем строки, которые мы использовали для храните информацию о нашем номере телефона в «атомарных» (то есть неделимых) объектах: отдельных телефонных номерах. И мы гарантируем, что ни одна строка не содержит более одного телефонного номера.
Идентификатор клиента | Имя | Фамилия | Номер телефона |
---|---|---|---|
123 | Пуджа | Сингх | 555-861-2025 |
123 | Пуджа | Сингх | 192-122-1111 |
456 | Сань | Чжан | 182-929-2929 |
456 | Сань | Чжан | (555) 403-1659 доб.. 53 |
789 | Джон | Доу | 555-808-9633 |
Обратите внимание, что «ID» больше не является уникальным в этом решении с дублированными клиентами. Чтобы однозначно идентифицировать строку, нам нужно использовать комбинацию (ID, Номер телефона). Значение комбинации уникально, хотя каждый столбец отдельно содержит повторяющиеся значения. Возможность однозначной идентификации строки (кортежа) является требованием 1NF.
В альтернативном варианте используются две таблицы:
|
|
В этом дизайне столбцы не содержат более одного телефонного номера. Вместо этого каждая ссылка «Клиент-телефонный номер» отображается в отдельной строке. При использовании идентификатора клиента в качестве ключа между именем и числовыми таблицами существует связь «один ко многим». Строка в «родительской» таблице Имя клиента может быть связана со многими строками телефонных номеров в «дочерней» таблице Телефонный номер клиента, но каждый номер телефона принадлежит одному, и только один покупатель. (В «реальном» мире это не было бы хорошим предположением.) Стоит отметить, что эта конструкция отвечает дополнительным требованиям для второй и третьей нормальной формы.
Определение 1НФ, данное Эдгаром Ф. Коддом, ссылается на концепцию «атомарности». Кодд утверждает, что «значения в доменах, в которых определяется каждое отношение, должны быть атомарными по отношению к СУБД ». Кодд определяет атомарное значение как такое, которое «не может быть разложено СУБД на более мелкие части (за исключением некоторых специальных функций)», что означает, что столбец не должен делиться на части с более чем одним типом данных в нем, так что значение одной части СУБД зависит от другой части того же столбца.
Хью Дарвен и Крис Дейт предположили, что концепция Кодда об «атомарной ценности» неоднозначна, и что эта двусмысленность привела к широко распространенной путанице в отношении того, как следует понимать 1НФ. В частности, понятие «значение, которое не может быть разложено» является проблематичным, поскольку оно, казалось бы, подразумевает, что немногие типы данных, если они вообще есть, являются атомарными:
Дата предполагает, что «понятие атомарности не имеет абсолютного значения»: значение может считаться атомарным для некоторых целей, но может считаться сборкой более основных элементов для других целей. Если эта позиция принята, 1НФ не может быть определена со ссылкой на атомарность. Столбцы любого мыслимого типа данных (от строковых и числовых типов до массивов типов и типов таблиц) тогда приемлемы в таблице 1NF - хотя, возможно, не всегда желательно; например, может быть более желательно разделить столбец «Имя клиента» на два отдельных столбца: «Имя» и «Фамилия».
Согласно определению Дейта, таблица находится в первой нормальной форме тогда и только тогда, когда она «изоморфна некоторому отношению», что означает, в частности, что он удовлетворяет следующим пяти условиям:
Нарушение любого из этих условий означало бы, что таблица не является строго реляционной и, следовательно, не находится в первой нормальной форме.
Примеры таблиц (или представлений ), которые не соответствуют этому определению первой нормальной формы: