Когда вы создаете ограничение внешнего ключа в таблице и создаете сценарий в MS SQL Management Studio, оно выглядит следующим образом.
ALTER TABLE T1 WITH CHECK ADD CONSTRAINT FK_T1 FOREIGN KEY(project_id)
REFERENCES T2 (project_id)
GO
ALTER TABLE T1 CHECK CONSTRAINT FK_T1
GO
Чего я не понимаю, так это того, для чего имеет второе изменение с проверочным ограничением.
Не достаточно ли создания ограничения FK? Нужно ли добавить проверочное ограничение, чтобы обеспечить целостность ссылки?
Другой вопрос: как бы это выглядело тогда, когда вы написали бы это прямо в определении столбца?
CREATE TABLE T1 (
my_column INT NOT NULL CONSTRAINT FK_T1 REFERENCES T2(my_column)
)
Разве этого не достаточно?