Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Ограничение Foreign key

Ограничение FOREIGN KEY устанавливает внешний ключ и организует ссылку по внешнему ключу на заданное в предложении REFERENCES отношение. После добавления внешнего ключа любая запись, добавляемая в ссылаемую таблицу должна иметь запись в ссылочной таблице. Ограничение FOREIGN KEY в таблице может быть несколько, в идеале столько, сколько таблица имеет внешних (чужих) ключей. Следует напомнить, что внешний ключ может быть подмножеством первичного ключа, как это и продемонстрировано в следующем примере (см. Пример 9).

Пример 9

Задача.

Назначить в таблице Успеваемость (Progress) внешний ключ и организовать ссылку по внешнему ключу на все ссылочные таблицы.

Решение.

Ссылочными по отношению к отношению Progress являются таблицы Student, Teacher, Subject, Report, следовательно, в таблице будет четыре внешних ключа.

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 Student,

CONSTRAINT ProgressSubjectForeign FOREIGN KEY (IDSubject) REFERENCES Subject,

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 Student ON DELETE CASCADE,

CONSTRAINT ProgressSubjectForeign FOREIGN KEY (IDSubject) REFERENCES Subject ON DELETE CASCADE,

CONSTRAINT ProgressReportForeign FOREIGN KEY (IDReport) REFERENCES Report ON DELETE CASCADE,

CONSTRAINT ProgressTeacherForeign FOREIGN KEY (PIN) REFERENCES Teacher ON DELETE CASCADE );

Обратим внимание на тот факт, что опция ON DELETE CASCADE указывается для каждого ограничения FOREIGN KEY, если мы хотим, чтобы каскадное удаление выполнялось при выполнении операции удаления данных в каждой ссылочной таблице.

Ограничение check

С помощью ограничения CHECK задаются ограничения на значения атрибутов.

Cинтаксис ограничения CHECK на уровне столбца

[СONSTRAINT <имя ограничения>] CHECK (<условие>)

Пример 11

Задача.

Создать таблицу Progress, назначить ограничения PRIMARY KEY и запретить ввод в таблицу оценок, отличных от 2,3,4,5, т.е. создать ограничение для значений столбца Mark в таблице Progress.

Решение.

CREATE TABLE Progress

(NRecordBook Varchar(6)

CONSTRAINT ProgressStudentForeign FOREIGN KEY

REFERENCES Student,

PIN INT,

IDSubject INT,

IDReport INT,

NTerm Varchar(2),

Mark SMALLINT

CONSTRAINT ProgressMarkCheck CHECK(Mark BETWEEN 2 AND 5 ),

CONSTRAINT ProgressPrimary PRIMARY KEY

(NrecordBook,IDSubject,IDReport,Nterm),

CONSTRAINT ProgressSubjectForeign FOREIGN KEY (IDSubject) REFERENCES Subject ON DELETE CASCADE,

CONSTRAINT ProgressReportForeign FOREIGN KEY

(IDReport) REFERENCES Report ON DELETE CASCADE,

CONSTRAINT ProgressTeacherForeign FOREIGN KEY

(PIN) REFERENCES Teacher ON DELETE CASCADE )

Команда CHECK также не может ссылаться на значения столбцов в других строках.

Задание 2

Удалить все созданные таблицы. Повторить создание учебного примера2 согласно описаниям приведенным выше.

Если таблицы созданы и связаны правильно, то на диаграмме созданной в Enterprise Manager это будет выглядеть так, как показано на следующем рисунке (см. Рисунок 1).

Рисунок 1