Oracle - NULLS во внешних ключах? - PullRequest
1 голос
/ 18 мая 2009

Я пытаюсь ответить на следующий вопрос ...

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

Может ли кто-нибудь указать мне правильное направление относительно того, что представляют собой эти «правила соответствия»? Сначала я думал, что они имеют в виду OUTER JOINS, но я больше не уверен.

Любой совет будет оценен. Спасибо.

1 Ответ

3 голосов
/ 18 мая 2009

Если я правильно помню, эти правила касаются составных внешних ключей. Например, рассмотрим адресную таблицу, определенную как:

deliveryaddressid - order - orderline - street - ...

Где (заказ, строка заказа) - это внешний ключ к таблице строки заказа. Правила соответствия определяют поведение соединений, когда одна часть внешнего ключа имеет значение NULL. Например, строка вроде:

32 - null - 1123 - 'Main Street 1' - ...

Вот статья о частичных внешних ключах (загрузка в формате PDF, 6 страниц).

Разрешения ANSI SQL 92 и базы данных, такие как Oracle поддерживает альтернативное сопоставление правила для составных внешних ключей, в том числе:

Соответствует полному - Частично нуль иностранный ключи не разрешены. Либо все компоненты внешнего ключа должны быть ноль или комбинация значений содержащийся во внешнем ключе должен появляются как первичный или уникальный ключ значение одного ряда ссылочная таблица. [По умолчанию]
Частичное совпадение - частично нулевой композит внешние ключи разрешены. Либо все компоненты внешнего ключа должны быть ноль или комбинация ненулевых значения, содержащиеся во внешнем ключе должен появиться в соответствующем часть первичного или уникального ключа значение одной строки в ссылочная таблица.
Совпадение отсутствует - Частично нулевые составные внешние ключи разрешены Если какой-либо столбец составной внешний ключ равен нулю, тогда ненулевые части ключа делают не должны соответствовать ни одному соответствующему часть родительского ключа.

...