Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Потенциальные ключи и null-значения





Как разъяснялось выше в этой главе, реляционная модель традиционно требует, чтобы (для базовых отношений, по крайней мере) в качестве первичного ключа для данного отношения был выбран ровно один потенциальный ключ, а оставшиеся ключи, если они есть, были бы тогда альтернативными ключами. Вместе с понятием первичного ключа модель включает правило целостности объектов:

■ ■ Целостность объектов. Ни один элемент первичного ключа базового отношения не может быть null-значением.

Другими словами, определение каждого атрибута первичного ключа любого базового отношения должно явно или неявно включать спецификацию null not allowed.

Это правило объясняется следующим:

■ ■ Базовые отношения, точнее, кортежи базовых отношений соответствуют объектам в реальном мире. Например, базовое отношение S соответствует реальным поставщикам.

■ ■ По определению объекты реального мира различимы, т.е. они некоторым образом опознаваемы.

■ ■ Поэтому соответствующие представления объектов в базе данных также должны быть различимы (опознаваемы).

■ ■ В реляционной модели первичные ключи выполняют функцию уникальной идентификации (т.е. служат для представления необходимых идентификаторов объектов).

■ ■ Поэтому в качестве примера предположим, что базовое отношение S включает кортеж, для которого значение $# является null-значением. Тогда можно сказать, что есть реальный поставщик, который не имеет идентичности (по крайней мере, идентичность его не установлена).

■ ■ Более того, что такое null-значение означает? Если это означает, что "свойство не применяется", то, очевидно, такой кортеж не имеет смысла; как разъяснялось выше, объекты должны обладать идентичностью, следовательно, свойство должно применяться. Если это означает "неизвестное значение", то количество всевозможных проблем возрастет. Например, мы сейчас еще даже не знаем (в общем), представляет ли кортеж одного из поставщиков, о котором мы знаем (поскольку неизвестно, что значит "не знаем"!): Таким образом, например, на вопрос: "Сколько имеется поставщиков?"— следует ответ: "Не знаем".

■ ■ Точно такие же аргументы применимы и ко всем остальным возможным интерпретациям null-значения. На самом деле объект с отсутствующей идентичностью является противоречием, Которое выражается так: "Объект, который не имеет идентичности, не существует" (поэтому правило и называется правилом "целостности объекта").

■ ■ Аргументы, аналогичные предыдущим, могут использоваться для демонстрации того, что в базовом отношении с составным.первичным ключом значения первичного ключа, которые являются частично null-значениями, должны быть также запрещены.

■ ■ Подытожим: если реальный объект настолько важен, что требуется его явное представление в базе данных, то этот объект должен быть определенно и недвусмысленно идентифицируемым, в противном случае какие бы то ни было разумные рассуждения о нем не возможны. Поэтому правило целостности объектов иногда формулируют в следующей форме:

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

Мимоходом отметим общепринятое, но ошибочное мнение, что правило целостности объектов гласит нечто в духе: "Первичные ключи должны быть уникальны". Это не так. Уникальность первичных ключей требуется в части основного определения понятия первичных ключей как таковых. Правило же целостности объектов гласит (повторяем), что первичные ключи в базовых отношениях не должны содержать ни одного null-значения.

Теперь давайте поближе рассмотрим это правило. Поскольку оно использует не одно, а два понятия — первичные ключи и null-значения, в которых мы нашли нечто, подвергаемое сомнению. Здесь необходимо сделать еще несколько замечаний.

■ ■ Это правило применяется только для базовых отношений. Другие отношения действительно могут иметь первичный ключ, для которого null-значения допустимы. Приведем простой пример. Предположим, что для цвета детали "допустимы null-значения" и что в отношении Р есть дополнительный кортеж, скажем, для детали Р7, в котором атрибут COLOR (цвет) на самом деле является null-значением. Теперь рассмотрим отношение, представляющее собой результат запроса "Список всех цветов деталей". Такое отношение просто имеет один атрибут, который является потенциальным ключом и, следовательно, первичным ключом, а один из кортежей отношения имеет null-значение в области первичного ключа. Таким образом, правило целостности объектов предполагает неприятт ное (и совершенно неоправданное) разграничение между базовыми и другими отношениями. Что случится, если мы, например, попытаемся сохранить результат запроса "Список всех цветов деталей" как новое базовое отношение?

■ ■ Это правило применяется только для первичных ключей. Для альтернативных ключей null-значения могут быть запрещены или разрешены. Но если альтернативный ключ является таким, для которого разрешены null-значения, то он не может быть выбран в качестве первичного ключа по правилу целостности объектов. Так каков же точный смысл выражения, что альтернативный ключ является "потенциальным" ключом в первую очередь? И наоборот, если мы говорим, что альтернативные ключи также не должны иметь null-значений, тогда правило целостности объектов должно относиться ко всем потенциальным ключам — а не только к первичному ключу.

■ ■ В действительности объяснение правила целостности объектов, данное выше, применимо в равной мере к каждому атрибуту всех базовых отношений, а следовательно, null-значения должны быть запрещены везде! Так для чего же предназначены null-значения?

■ ■ Относительно понятия первичных ключей в [5.2] было предложено запретить ссылаться к первичным ключам, которым разрешены null-значения, именно как к первичным ключам, а ссылаться лишь как к "слабым идентификаторам". Другими словами, некоторые отношения не будут иметь собственного уникального идентификатора совсем. По нашему мнению, в этом нет ничего страшного, но весьма сомнительно поддерживать заведомо подозрительную позицию. Более того, в [4.4] автор настаивает на требовании, чтобы кортежи, которые в каждой позиции атрибута ничего кроме null-значений не содержат, "мягко и неожиданно исчезли", что кажется еще более подозрительным.

■ ■ Предположим, что мы полностью отказались от идеи null-значений и вместо представления отсутствующей информации используем значения по умолчанию (т.е. так, как мы поступаем на практике). Например, если зарплата служащего Джо не известна по некоторым причинам, мы можем представить это в базе данных с помощью значения -1 (обсуждение этого вопроса приводится в дальнейших главах книги). Тогда правило целостности объекта не имело бы больше никакого значения и могло бы быть отброшено безо всякого ущерба.

Замечание. Мы, возможно, захотим сохранить измененную версию этого правила "Никаким первичным ключам базовых отношений не разрешается принимать значения по умолчанию" в качестве генеральной линии, а не как нерушимое правило (почти так же, как идея дальнейшей нормализации служит генеральной линией, а не является нерушимым правилом). На рис. 5.1 приведен пример отношения, называемого SURVEY (отчет), для которого мы вполне можем пожелать нарушить эту генеральную линию; этот пример представляет результаты отчета по зарплате, показывающего среднюю, максимальную и минимальную зарплаты по годам рождения для определенной категории населения (BIRTHYEAR (год рождения) служит первичным ключом). А кортеж со значением года рождения по умолчанию ("????") представляет людей, которые уклонились от ответа на вопрос "Когда вы родились?".

Date: 2016-05-25; view: 952; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию