CONSTRAINT ProgressReportForeign FOREIGN KEY (IDReport) REFERENCES Report,
CONSTRAINT ProgressTeacherForeign FOREIGN KEY (PIN)REFERENCES Teacher )
Внешние ключи являются по своей сути двунаправленными. По умолчанию SQL Server 2000 запретит удаление строки в ссылочной таблице, если ей соответствует хотя бы одна строка в ссылающейся таблице. То есть нельзя удалить информацию о студенте, если в таблице Progress есть хотя бы одна запись, которая соответствует этому студенту.
Новая опция ON DELETE CASCADE указывает на то, что при удалении записи в ссылочной таблице, автоматически удаляются записи в ссылающейся таблице.
Пример 10
Задача.
Обеспечить каскадное удаление в таблице Progress при удалении соответствующих записей в ссылочных таблицах.
Решение.
CREATE TABLE Progress
(NRecordBook Varchar(6),
PIN INT,
IDSubject INT,
IDReport INT,
NTerm Varchar(2),
Mark SMALLINT,
CONSTRAINT ProgressPrimary PRIMARY KEY
(NrecordBook,IDSubject,IDReport,NTerm),
CONSTRAINT ProgressStudentForeign FOREIGN KEY (NRecordBook) REFERENCES StudentON DELETE CASCADE,
CONSTRAINT ProgressSubjectForeign FOREIGN KEY (IDSubject) REFERENCES SubjectON DELETE CASCADE,
CONSTRAINT ProgressReportForeign FOREIGN KEY (IDReport) REFERENCES ReportON DELETE CASCADE,
CONSTRAINT ProgressTeacherForeign FOREIGN KEY (PIN) REFERENCES TeacherON DELETE CASCADE );
Обратим внимание на тот факт, что опция ON DELETE CASCADE указывается для каждого ограничения FOREIGN KEY, если мы хотим, чтобы каскадное удаление выполнялось при выполнении операции удаления данных в каждой ссылочной таблице.