Мимоходом отметим общепринятое, но ошибочное мнение, что правило
целостности объектов гласит нечто в духе: "Первичные ключи должны быть
уникальны". Это не так. Уникальность первичных ключей требуется в части
основного определения понятия первичных ключей как таковых. Правило же
целостности объектов гласит (повторяем), что первичные ключи в базовых
отношениях не должны содержать ни одного null-значения.
Теперь давайте поближе рассмотрим это правило. Поскольку оно использует не
одно, а два понятия — первичные ключи и null-значения, в которых мы нашли
нечто, подвергаемое сомнению. Здесь необходимо сделать еще несколько
замечаний.
■ ■BBBBBBB Это правило применяется только для базовых отношений. Другие отношения
действительно могут иметь первичный ключ, для которого null-значения
допустимы. Приведем простой пример. Предположим, что для цвета детали
"допустимы null-значения" и что в отношении Р есть дополнительный кортеж,
скажем, для детали Р7, в котором атрибут COLOR (цвет) на самом деле является
null-значением. Теперь рассмотрим отношение, представляющее собой результат
запроса "Список всех цветов деталей". Такое отношение просто имеет один
атрибут, который является потенциальным ключом и, следовательно, первичным
ключом, а один из кортежей отношения имеет null-значение в области
первичного ключа. Таким образом, правило целостности объектов предполагает
неприятт ное (и совершенно неоправданное) разграничение между базовыми и
другими отношениями. Что случится, если мы, например, попытаемся сохранить
результат запроса "Список всех цветов деталей" как новое базовое отношение?
■ ■BBBBBBB Это правило применяется только для первичных ключей. Для
альтернативных ключей null-значения могут быть запрещены или разрешены.
Но если альтернативный ключ является таким, для которого разрешены null-
значения, то он не может быть выбран в качестве первичного ключа по правилу
целостности объектов. Так каков же точный смысл выражения, что
альтернативный ключ является "потенциальным" ключом в первую очередь? И
наоборот, если мы говорим, что альтернативные ключи также не должны иметь
null-значений, тогда правило целостности объектов должно относиться ко всем
потенциальным ключам — а не только к первичному ключу.
■ ■BBBBBBB В действительности объяснение правила целостности объектов, данное
выше, применимо в равной мере к каждому атрибуту всех базовых отношений,
а следовательно, null-значения должны быть запрещены везде! Так для чего же
предназначены null-значения?
■ ■BBBBBBB Относительно понятия первичных ключей в [5.2] было предложено
запретить ссылаться к первичным ключам, которым разрешены null-значения,
именно как к первичным ключам, а ссылаться лишь как к "слабым
идентификаторам". Другими словами, некоторые отношения не будут иметь
собственного уникального идентификатора совсем. По нашему мнению, в этом
нет ничего страшного, но весьма сомнительно поддерживать заведомо
подозрительную позицию. Более того, в [4.4] автор настаивает на требовании,
чтобы кортежи, которые в каждой позиции атрибута ничего кроме null-значений
не содержат, "мягко и неожиданно исчезли", что кажется еще более
подозрительным.
■ ■BBBBBBB Предположим, что мы полностью отказались от идеи null-значений и вместо