2012-06-04 2 views
2

я скопировал следующий абзац из http://msdn.microsoft.com/en-us/library/ms175464(v=sql.105).aspxнулевого значения внешнего ключа в

ограничение внешнего ключа может содержать нулевые значения; однако, если какой-либо столбец составного ограничения FOREIGN KEY содержит нулевые значения, то проверка всех значений, составляющих ограничение FOREIGN KEY, равна . Чтобы убедиться, что все значения составного ограничения FOREIGN KEY подтверждены, укажите NOT NULL для всех участвующих столбцов .

Может ли кто-нибудь предоставить мне простой пример, чтобы помочь мне понять вышеизложенное? Какая проверка ограничивает внешние ограничения? Я думаю, что это имеет какое-то отношение к ссылочной целостности.

Большое спасибо.

+0

Еще одна причина не использовать составные PKS. – HLGEM

ответ

1

Вот пример:

create table t1 (id1 int, id2 int, 
    constraint PK_T1 primary key (id1, id2)) 
create table t2 (id1 int, id2 int) 

insert t2 values (1,null) 

alter table t2 add constraint FK_T2_T1 foreign key (id1, id2) references t1(id1, id2) 

Последняя строка должна вызывать ошибку. В конце концов, t1 пуст, поэтому одна строка в t2 не может ни о чем. Но поскольку один из столбцов содержит значение null, проверка пропускается.

2

Вам не нужен пример, если вы думаете об этом по-другому.

Если любого поле в композитном внешнем ключе NULL то ни один из других полей не проверяется на целостность до не предусмотрено все поле ключа.

2

Говорят, что если у вас есть комбинированный внешний ключ, использующий два столбца ниже, связь не будет применяться (поскольку имя равно NULL для OtherId 2).

OtherId Name 
------- ------- 
1  Abe 
2  NULL 
3  Jim 
4  Bob 

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

 Смежные вопросы

  • Нет связанных вопросов^_^