Иногда требуется возможность обозначить отсутствие информации, которая является необязательной в данном отношении. Например, для отношения Students таким необязательным атрибутом может являться Height (рост студента). Проблему можно решить двумя способами.
1. Использовать специальные значения того же типа данных, что и сам атрибут. Например, атрибут Height имеет тип int, тогда можно использовать –1 для обозначения отсутствия информации о росте студента, а любое другое число будет указывать сам рост.
2. Использовать специальные универсальные маркеры – NULL-значения.
Эдгар Кодд[1] предложил второй вариант, главным преимуществом которого является то, что NULL-значение некоторого атрибута свидетельствует именно о его отсутствии, т.е. это не то же самое, что и число ноль или пустая строка. Однако такие неопределённые значения могут вызвать осложнения при обеспечении целостности БД.
Среди специалистов разделились мнения относительно необходимости этих меток. Э. Кодд считает, что они должны быть неотъемлемой частью БД, а К. Дейт[2], наоборот, полагает, что они даже вредны.
В общем случае в БД для каждого атрибута можно задать, разрешено или не разрешено содержать NULL-значение.
Рассмотрим влияние NULL-значения на различные ключи. С использованием этого значения вводится правило целостности объектов: ни один элемент первичного ключа базового отношения не может быть NULL‑значением. Это правило объясняется следующим: кортежи отношений соответствуют объектам реального мира, следовательно, эти объекты различны, т.е. некоторым образом опознаваемы, а первичные ключи выполняют функцию уникальной идентификации.
Правило обеспечения целостности применимо только:
1) к базовым отношениям, а не вычисляемым (производным);
2) к первичным ключам, а для альтернативных может быть разрешено или запрещено использование NULL-значения.
NULL-значения могут использоваться либо при вставке и изменении записи (для обозначения отсутствия информации) или при каскадном удалении. Например, мы хотим удалить группу, но при этом не удалять студентов этой группы. В этом случае в поле GroupID отношения Students мы можем указать NULL-значение для всех студентов, которые принадлежат удаляемой группе.
StudentID
Name
GroupID
BirthDate
Казаков Петр
23.04.1990
Васильев Иван
11.05.1991
Шишкина Дарья
23.09.1991
GroupID
Name
ПМ-41
ПМ-51
После удаления группы ПМ-51, получим следующее состояние отношения Students:
StudentID
Name
GroupID
BirthDate
Казаков Петр
NULL
23.04.1990
Васильев Иван
11.05.1991
Шишкина Дарья
NULL
23.09.1991
Краткие итоги. Рассмотрены основные элементы реляционных баз данных, а также вопросы целостности данных. Даны определения первичных и внешних ключей.
[1] Эдгар Ф. Кодд (Edgar F. Codd) (1923-2003) – американский ученый английского происхождения. Долгое время работал в корпорации IBM. Создал основы теории реляционных баз данных. Сформулировал 12 законов аналитической обработки данных и ввел термин OLAP (On-Line Analytical Processing – оперативная аналитическая обработка).
[2] Кристофер Дж. Дейт (Christopher J. Date) (р.1941) – английский ученый, работавший над теорией реляционных баз данных совместно с Э.Коддом.