Программирование >>  Хронологические базы данных 

1 ... 222 223 224 [ 225 ] 226 227 228 ... 348


Замечание. Эта проблема интерпретации является далеко не единственной проблемой, возникающей в связи с использованием неопределенных значений и трехзначной логики (подробное обсуждение аналогичных вопросов можно найти в [18.1]-[18.11]). Она даже не является наиболее фундаментальной (см. следующий подраздел). Но, по мнению автора, именно эта проблема имеет наибольщее практическое значение и вызывает наибольший интерес.

Еще раз о предикатах

Предположим, что отношение, являющееся текущим значением переменной-отношения ЕМР, содержит только два кортежа: (E2,D2) и (Е1 ,UNK). Первое соответствует утверждению В отделе с номером D2 есть сотрудник с номером Е2 , а второе - Существует сотрудник с номером Е1 . (Напомним, утверждение Кортеж включает величину UNK означает, что на самом деле этот кортеж вообще не содержит никакого значения в данной позиции кортежа. Таким образом, кортеж (Е1 ,UNK), если такое сомнительное обозначение вообще можно назвать кортежем, на самом деле следует рассматривать как кортеж (Е1).) Иначе говоря, эти два кортежа являются реализациями двух разных предикатов, а все отношение вовсе не является отношением; это всего лишь некоторое объединение двух разных отношений с двумя разными заголовками (в данном частном случае).

Теперь можно предположить, что сложившуюся ситуацию можно было бы исправить, утверждая, что на самом деле сушествует всего один предикат, содержащий оператор OR.

Существует сотрудник с номером Ei, работающий в отделе с номером Di OR существует сотрудник с номером Ei.

Обратите внимание, что теперь (следуя допущению о замкнутости мира) отношение должно содержать кортеж вида (Ei,UNK) для всех сотрудников Ei! Страшно даже подумать о результатах обобщения подобной попытки исправления дел на тот случай, когда отношение содержит величину UNK в нескольких разных атрибутах . (В любом случае полученное подобным образом отношение вовсе не будет являться отношением, что будет показано в следующем абзаце.)

Перефразируем сказанное выше. Если значение данного атрибута в данном кортеже данного отношения представлено величиной UNK , то (повторим это еще раз) в позиции атрибута на самом деле вообще ничего не содержится. А это означает, что данный атрибут не является атрибутом, данный кортеж не является кортежем, а данное отношение не является отношением и все последующие действия с этими объектами (какими бы они ни были) уже не могут быть обоснованы с помощью математической реляционной теории. Иначе говоря, использование величины UNK и трехзначной логики противоречит основам реляционной .модели.

18.4. Отсутствующие значения и ключи

Замечание. Далее аместо термина UNK мы будем (в основно.м, по историческим причинам) использовать более традиционную тер.минологию, т.е. термин NULL.

Вопреки всему сказанному в предыдущем разделе на практике неопределенные значения (NULL) и трехзначная логика широко поддерживаются в большинстве современных программных продуктов. Резонно предположить, что такая поддержка имеет очень важные последствия, особенно в отношении ключей. Именно это и будет предметом нашего краткого рассмотрения.



Первичные ключи

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

Правило сохранения целостности сущности. Ни один компонент первичного ключа любой базовой переменной-отношения не может содержать неопределенные значения (NULL).

Обоснование этого ограничения построено на приведенной ниже последовательности умозаключений.

1. Кортежи базовых переменных-отношений представляют сущности реального мира.

2. Сущности реального мира всегда должны допускать возможность их идентификации (по определению).

3. Следовательно, их аналоги в базе данных также должны допускать возможность идентификации.

4. В базе данных значения первичного ключа используются в качестве идентификаторов.

5. Следовательно, значение любого первичного ключа не может быть неопределенным .

В связи с этим приведем ряд соображений.

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

2. Далее заметим, что это правило применимо только для первичных ключей, а альтернативные ключи могут содержать неопределенные значения (NULL). Но если некий ключ АК является альтернативным ключом, в котором допускаются неопределенные значения (NULL), то он не может использоваться в качестве первичного ключа, поскольку для него нарушается требование сохранения целостности сущности. Тогда в каком смысле ключ АК является потенциальным? И наоборот, если выдвинуть требование, что альтернативные ключи не могут содержать неопределенные значения (NULL), то правило сохранения целостности сущности будет относиться ко всем потенциальным ключам, а не только к первичным ключам. В любом из этих двух вариантов указанное правило выглядит не вполне корректно.

3. Наконец, заметим, что правило сохранения целостности сущности применимо только для базовых переменных-отношений, тогда как другие переменные-отношения могут содержать первичные ключи с неопределенными значениями (NULL). В качестве тривиального и очевидного примера рассмотрим проекцию переменной-отношения R по атрибуту А, в котором допускается присутствие неопре-



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

Замечание. Допустим, что мы отказались от идеи применять неопределенные значения (NULL) и для представления недостающей информации вместо них использовали специальные значения аналогично тому, как это делается в реальном мире (подробности приводятся в разделе 18.6). Тогда модифицированная версия правила сохранения целостности сущности будет иметь следующий вид: Никакой компонент первичного ключа любой базовой переменной-отношения не может содержать подобных специальных значений . Это требование может использоваться как рекомендация, но не является непреложным законом (так же, как идеи дальнейшей нормализации служат в качестве рекомендаций, а не строгих законов). На рис. 18.2 приведен пример (взятый из [5.7]) базовой переменной-отношения SURVEY, для которой может потребоваться нарушить эту рекомендацию. В ней представлены результаты опроса сотрудников о размере их зарплаты, которые включают среднее, максимальное и минимальное значения для группы сотрудников с определенным годом рождения. (Здесь атрибут BIRTHYEAR является первичным ключом.) Кортеж со специальным значением ???? атрибута BIRTHYEAR представляет тех служащих, которые постеснялись ответить на вопрос о годе рождения.

SURVEY


BIRTHYEAR

AVGSAL

MAXSAL

MINSAL

1960

130K

1961

125K

1962

1963

1970

????

117K

Рис. 18.2. Пример значений данных в переменной-отношении SURVEY

Внешние ключи

Еще раз обратимся к базе данных отделов и сотрудников, содержимое которой показано на рис. 18.1. Возможно, вы не обратили на это внимания, однако в свое время я намеренно не сказал, что на данном рисунке атрибут DEPTI переменной-отношения ЕМР является внешним ключом. Предположим теперь, что это так. Сразу становится понятно следующее: требуется уточнить формулировку определения ограничений ссылочной целостности с учетом того, что внешние ключи могут содержать неопределенные значения (NULL), а это, очевидно, противоречит исходной формулировке данного ограничения, приведенной в главе 8.

Ограничение ссылочной целостности (исходная формулировка). База данных не должна содержать никаких несогласованных значений внешних ключей.



1 ... 222 223 224 [ 225 ] 226 227 228 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика