
- •Введение
- •Лабораторное занятие № 1
- •Описание учебного примера.
- •Удаление таблиц
- •Создание таблиц
- •Имена ограничений
- •Ограничения null и not null
- •Ограничение primary key
- •IdSubject, idReport, nTerm));
- •Ограничение unique
- •Ограничение Foreign key
- •Ограничение check
- •Вопросы для самоконтроля к лабораторной работе № 1
- •Лабораторная работа № 2
- •Команда вставки - insert
- •Команда обновления - update
- •Команда удаления - delete
- •Вопросы для самоконтроля к лабораторной работе № 2
- •Лабораторная работа №3
- •Команда alter table
- •Модификация ограничений
- •Добавление ограничений с ограниченной областью проверки
- •Отключение и подключение ограничений
- •Правила для изменения и модификации описания столбцов
- •Добавление столбца
- •Модификация столбца
- •Удаление столбца
- •Удаление таблицы
- •Переименование таблицы
- •Вопросы для самоконтроля к лабораторной работе № 3
- •Лабораторная работа № 4
- •Выборка данных из нескольких таблиц
- •Определение условий выборки в предложении where.
- •Групповые функции и предложение group by
- •Наиболее часто встречающиеся ошибки при выполнении group by
- •Предложение order by
- •Вопросы для самоконтроля к лабораторной работе № 4
- •Лабораторная работа № 5
- •Подзапросы
- •Inner join Student s
- •Inner join Student s
- •Inner join
- •Inner join Student s
- •Вопросы для самоконтроля к лабораторной работе № 5
- •Лабораторная работа №6
- •Представления
- •Вопросы для самоконтроля к лабораторной работе № 6
- •Лабораторная работа №7
- •Хранимые процедуры
- •Оператор use
- •Оператор declare
- •Операторы set и select
- •Функция @@identity
- •Функция @@error
- •Объявление параметров
- •Изменение хранимых процедур
- •Удаление хранимой процедуры
- •Лабораторная работа №8
- •If exists
- •Вопросы для самоконтроля к лабораторной работе № 8
- •Задания в тестовой форме
- •Литература Оглавление
Ограничение 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