Мне нравится ответ AlexCuse, но при добавлении ограничения внешнего ключа следует обращать внимание на то, как вы хотите обрабатывать обновления столбца, на который ссылаются, в строке таблицы, на которую ссылаются, и особенно на то, как вы хотите удалять строки. в ссылочной таблице для лечения.
Если ограничение создано следующим образом:
alter table MyTable
add constraint MyTable_MyColumn_FK FOREIGN KEY ( MyColumn )
references MyOtherTable(PKColumn)
.. затем обновления или удаления в ссылочной таблице будут с ошибкой, если в ссылочной таблице есть соответствующая строка.
Это может быть поведение, которое вы хотите, но по моему опыту, гораздо чаще это не так.
Если вместо этого вы создадите его следующим образом:
alter table MyTable
add constraint MyTable_MyColumn_FK FOREIGN KEY ( MyColumn )
references MyOtherTable(PKColumn)
on update cascade
on delete cascade
.. затем обновления и удаления в родительской таблице приведут к обновлениям и удалению соответствующих строк в ссылочной таблице.
(Я не предполагаю, что значение по умолчанию должно быть изменено, ошибки по умолчанию на стороне предостережения, что хорошо. Я просто говорю, что это то, что человек, создающий константы должен всегда обращайте внимание на .)
Кстати, это можно сделать при создании таблицы, например:
create table ProductCategories (
Id int identity primary key,
ProductId int references Products(Id)
on update cascade on delete cascade
CategoryId int references Categories(Id)
on update cascade on delete cascade
)