Database Programming & Design
859c2d4a

Нормальная форма


Как уже отмечалось, наиболее значительным изменением изменением в статье 1970-го г. является та идея, что всегда следует нормализовывать отношения: их следует определять только на "доменах, элементы которых являются атомарными (не составными) значениями". Таким образом, "нормализация" означает "отсутствие повторяющихся групп" или то, что теперь называется первой нормальной формой - 1NF. (Нормальные формы более высокого порядка -- 2NF, 3NF и т.д. -- были определены позже.) Кодд настаивает на нормализации, потому что нормализованное отношение "может быть представлено в памяти в виде двумерного массива с однородными столбцами ... [хотя] для отношений необходимы некоторые более усложненные структуры данных [т.е. ненормализованность].

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

Кодд утверждает, что простота представления в виде массива обеспечивает преимущество "при обмене крупными порциями данных между системами, использующими различные представления данных. Для обмена данные могли бы представляться в виде сжатого представления на основе массивов и в этом представлении (a) следовало бы избегать использования указателей, (b) следовало бы избегать всех зависимостей от схем хэш-адресации и (c) не должны были бы содержаться индексы или упорядоченные поля" (цитата слегка перефразирована).

Как кажется, второе утверждение является первым явным упоминанием Кодда того факта, что реляционная модель строго исключает использование указателей -- факта, который, как вы должны знать, впоследствии стал предметом многих споров. "Применение реляционной модели данных ...
дает возможность разработки универсального подъязыка данных, основанного на прикладном исчислении предикатов. Если набор отношений находится в нормальной форме, оказывается достаточным исчисление предикатов первого порядка." Это важный момент! -- и в нем отражается основной отход от статьи 1969-го года, в которой обсуждалось исчисление предикатов второго порядка, а не первого. Для читателей, которые могут быть не знакомы с этими понятиями, позвольте мне сказать (в реляционных терминах) лишь то, что "первый порядок" означает, что мы квантифицируем только строки отношений, а "второй порядок" дает возможность расставлять кванторы над отношениями. Логика первого порядка позволяет формулировать такие запросы как "Существует ли поставщик S1 в отношении поставщиков?" Логика второго порядка дает возможность формулировать запросы типа "Существует ли поставщик S1 в каком-либо отношении?"

Я хотел бы сказать еще кое-что по поводу этого вопроса нормализации. Я согласен с Коддом, что желательно оставаться в рамках логики первого порядка, если это возможно. В то же время я отвергаю идею "атомарных значений", по крайней мере в смысле абсолютной атомарности. В Третьем манифесте [3] мы допускаем наличие доменов, содержащих значения произвольной сложности. (Они могут быть даже отношениями.) Тем не менее, мы остаемся в рамках логики первого порядка. Более подробное обсуждение этой темы увело бы нас слишком далеко; если вы хотите знать больше, детали содержатся в другой статье Дарвена [4].

В статье 1970-го года Кодд приводит простой пример, показывающий, что происходит при нормализации ненормализованного отношения. Как уже отмечалось, под "нормализацией" здесь понимается приведение к первой нормальной форме, и пример является весьма прямолинейным. Однако в статье содержатся следующие дразнящие замечания: "Возможны и операции дальнейшей нормализации. Они не обсуждаются в этой статье." Еще один намек на появление интересной области исследований!

Между прочим, Кодд также замечает, что "он не знает приложений, в которых бы потребовался первичный ключ, компонент которого определен на домене с неатомарными значениями" (значительно перефразировано). В действительности такие приложения существуют, и одно из них описано в статье Дарвена [4]. Однако только то, что такие приложения существуют, не означает невозможности нормализации существующих отношений. (Опять же, это связано с тем, как понимать "атомарность".) И снова дальнейшее обсуждение нас увело бы слишком далеко.


Содержание раздела