Первая нормальная форма

редактировать

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

Первая нормальная форма Форма - это важное свойство отношения в реляционной базе данных. Нормализация базы данных - это процесс представления базы данных в терминах отношений в стандартных нормальных формах, где первая нормальная форма является минимальным требованием.

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

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

Содержание

  • 1 Примеры
    • 1.1 Дизайн, нарушающий 1NF
    • 1.2 Дизайн, который соответствует 1NF
  • 2 Атомарность
  • 3 Таблицы 1NF как представления отношений
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература

Примеры

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

Проекты, нарушающие 1NF

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

Клиент
Идентификатор клиентаИмяФамилияНомер телефона
123ПуджаСингх555-861-2025, 192-122-1111
456СанЧжан(555) 403–1659 доб. 53; 182-929-2929
789ДжонДоу555-808-9633

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

Очевидным решением является введение большего количества столбцов:

Клиент
Идентификатор клиентаИмяФамилияНомер телефона1Телефонный номер2
123ПуджаСингх555-861-2025192-122-1111
456СанЧжан(555) 403–1659 доб. 53182-929-2929
789ДжонДоу555-808-9633

Технически эта таблица не нарушают требование о том, чтобы значения были атомарными. Однако неформально две колонки с телефонными номерами по-прежнему образуют «повторяющуюся группу»: они повторяют то, что концептуально является одним и тем же атрибутом, а именно телефонным номером. Был введен произвольный и, следовательно, бессмысленный порядок: почему 555-861-2025 помещается в столбец Номер телефона1, а не в столбец Номер телефона2? Нет причин, по которым у клиентов не может быть более двух телефонных номеров, поэтому сколько столбцов Номер телефона должно быть? Невозможно найти телефонный номер без поиска в произвольном количестве столбцов. Добавление дополнительного телефонного номера может потребовать реорганизации таблицы путем добавления нового столбца, а не просто добавления новой строки (кортежа). (Нулевое значение для номера телефона 2 для клиента 789 также является проблемой.)

Дизайн, соответствующий 1NF

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

Клиент
Идентификатор клиентаИмяФамилияНомер телефона
123ПуджаСингх555-861-2025
123ПуджаСингх192-122-1111
456СаньЧжан182-929-2929
456СаньЧжан(555) 403-1659 доб.. 53
789ДжонДоу555-808-9633

Обратите внимание, что «ID» больше не является уникальным в этом решении с дублированными клиентами. Чтобы однозначно идентифицировать строку, нам нужно использовать комбинацию (ID, Номер телефона). Значение комбинации уникально, хотя каждый столбец отдельно содержит повторяющиеся значения. Возможность однозначной идентификации строки (кортежа) является требованием 1NF.

В альтернативном варианте используются две таблицы:

Имя клиента
Идентификатор клиентаИмяФамилия
123PoojaСингх
456СанЧжан
789ДжонДоу
Телефонный номер клиента
Телефонный номер IDID клиентаТелефонный номер
1123555-861-2025
2123192-122-1111
3456(555) 403-1659 доб. 53
4456182-929-2929
5789555-808-9633

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

атомарности

Определение 1НФ, данное Эдгаром Ф. Коддом, ссылается на концепцию «атомарности». Кодд утверждает, что «значения в доменах, в которых определяется каждое отношение, должны быть атомарными по отношению к СУБД ». Кодд определяет атомарное значение как такое, которое «не может быть разложено СУБД на более мелкие части (за исключением некоторых специальных функций)», что означает, что столбец не должен делиться на части с более чем одним типом данных в нем, так что значение одной части СУБД зависит от другой части того же столбца.

Хью Дарвен и Крис Дейт предположили, что концепция Кодда об «атомарной ценности» неоднозначна, и что эта двусмысленность привела к широко распространенной путанице в отношении того, как следует понимать 1НФ. В частности, понятие «значение, которое не может быть разложено» является проблематичным, поскольку оно, казалось бы, подразумевает, что немногие типы данных, если они вообще есть, являются атомарными:

  • Символьная строка не может быть атомарной, поскольку СУБД обычно предоставляет операторы для разложения его на подстроки.
  • Число с фиксированной точкой не может быть атомарным, поскольку СУБД обычно предоставляет операторы для его разложения на целочисленные и дробные компоненты.
  • An ISBN может показаться не атомарным, поскольку он включает язык и идентификатор издателя.

Дата предполагает, что «понятие атомарности не имеет абсолютного значения»: значение может считаться атомарным для некоторых целей, но может считаться сборкой более основных элементов для других целей. Если эта позиция принята, 1НФ не может быть определена со ссылкой на атомарность. Столбцы любого мыслимого типа данных (от строковых и числовых типов до массивов типов и типов таблиц) тогда приемлемы в таблице 1NF - хотя, возможно, не всегда желательно; например, может быть более желательно разделить столбец «Имя клиента» на два отдельных столбца: «Имя» и «Фамилия».

1NF-таблицы как представления отношений

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

  1. Отсутствует порядок расположения строк сверху вниз.
  2. Порядок столбцов отсутствует слева направо.
  3. Нет повторяющихся строк.
  4. Каждое пересечение строки и столбца содержит ровно одно значение из применимого домена (и ничего больше).
  5. Все столбцы являются регулярными [т.е. строки не имеют скрытых компонентов, таких как идентификаторы строк, идентификаторы объектов или скрытые временные метки].

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

Примеры таблиц (или представлений ), которые не соответствуют этому определению первой нормальной формы:

  • Таблица, в которой отсутствует ограничение уникальности ключа. Такая таблица могла бы вместить повторяющиеся строки в нарушение условия 3.
  • Представление, определение которого требует, чтобы результаты возвращались в определенном порядке, так что упорядочение строк является внутренним и значимым аспектом вид. (Такие представления не могут быть созданы с использованием SQL, который соответствует стандарту SQL: 2003.) Это нарушает условие 1. Кортежи в истинных отношениях не упорядочиваются с по отношению друг к другу.
  • Таблица по крайней мере с одним атрибутом допускающим значение NULL. Атрибут, допускающий значение NULL, будет нарушать условие 4, которое требует, чтобы каждый столбец содержал ровно одно значение из домена его столбца. Этот аспект условия 4 является спорным. Это знаменует собой важный отход от более позднего видения Кодда реляционной модели , в котором явно предусматривались нули. Первая нормальная форма, как определено Крисом Дейтом, допускает атрибуты со значением отношения (таблицы в таблицах). Дэйт утверждает, что атрибуты со значением отношения, с помощью которых столбец в таблице может содержать таблицу, полезны в редких случаях.

См. Также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-05-20 07:02:33
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте