Когда Вы создаете ограничение внешнего ключа в таблице, и Вы создаете сценарий в MS Studio управления SQL, это похоже на это.
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)
)
Разве это не достаточно?
Сначала он создает ограничение, и здесь вы можете указать, должны ли данные, уже находящиеся в таблице, проверяться на соответствие вашему новому ограничению. С {ПРОВЕРКА | NOCHECK}
Вторая часть указывает, что ограничение включено. ALTER TABLE TableName {CHECK | NOCHECK} ОГРАНИЧЕНИЕ ConstraintName
Второе утверждение вынуждается "WITH CHECK" в первом утверждении. Существует параметр, который можно переключить, чтобы не делать этого.