БД_лабы(11 лаб, 5 семестр) / БД_ЛР6
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра Систем автоматизированного проектирования
отчет
по лабораторной работе №6
по дисциплине «Базы Данных»
Тема: Обеспечение целостности данных
Студенты гр. 3352 |
________________ |
Гареева К.Р. |
|
________________ |
Жигунова О.М. |
Преподаватель |
________________ |
Горяинов С.В. |
Санкт-Петербург
2025
Цель работы
Научиться создавать таблицы, применять и отключать ограничения.
Упражнение 1 - создание новой таблицы и применение ограничений целостности
Запрос 1
Создадим новую таблицу с помощью оператора CREATE и зададим в ней нужные столбцы и ограничения (рис. 1). В скобках мы описываем столбцы и добавляем в конце ссылочную операцию REFERENCES.
CREATE TABLE HumanResources.JobCandidateHistory
(
JobCandidateID INT NOT NULL PRIMARY KEY,
Resume XML NULL,
Rating INT NOT NULL
CONSTRAINT DF_JobCandidateHistory_Rating DEFAULT 5
CONSTRAINT CK_JobCandidateHistory_Rating CHECK(Rating BETWEEN 1 AND 10),
RejectedDate DATETIME NOT NULL,
ContactID INT NULL,
CONSTRAINT FK_JobCandidate_Contact
FOREIGN KEY (ContactID) REFERENCES Person.Contact(ContactID)
);
Рисунок 1 - Результат выполнения запроса 1
Убедимся, что в списке имеется таблица Human Resources. JobCandidate History (рис. 2).
Рисунок 2 - Таблица HumanResources.JobCandidateHistory
В обозревателе объектов развернем таблицу и также проверим наличие столбцов и ограничений (рис. 3).
Рисунок 3 - Проверка столбцов и ограничений.
Далее откроем файл TestConstraints.sql и по очереди запустим разные запросы. Первый выдаст ошибку, поскольку число для вставки не входит в диапазон допустимых значений (от 1 до 10) (рис. 4).
Рисунок 4 - Выполнение кода под примечанием This should fail.
Второй запрос выполнится корректно (рис. 5).
Рисунок 5 - Выполнение кода под примечанием This should succeed.
Упражнение 2- отключение ограничений:
С помощью запроса:
USE [AdventureWorks];
GO
ALTER TABLE HumanResources.JobCandidateHistory
NOCHECK CONSTRAINT CK_JobCandidateHistory_Rating;
GO
отключим ограничения (рис. 6).
Рисунок 6 - Отключение ограничений.
Проверим, отключено ли ограничение с помощью SELECT is_disabled, которое выводит столбец is_disabled, где: 1 - ограничение отключено, 0 - включено (рис. 7).
SELECT is_disabled
FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID('HumanResources.JobCandidateHistory')
AND name = 'CK_JobCandidateHistory_Rating';
Рисунок 7 - Проверка отключения ограничений.
С помощью запроса включим ограничения (рис. 8):
ALTER TABLE HumanResources.JobCandidateHistory
CHECK CONSTRAINT [CK_JobCandidateHistory_Rating];
GO
Рисунок 8 - Включение ограничений.
Проверим, включено ли ограничение (рис. 9).
SELECT
name AS ConstraintName,
type_desc AS ConstraintType,
is_disabled
FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID('HumanResources.JobCandidateHistory');
Рисунок 9 - Проверка включения ограничений.
Вывод
В ходе выполнения лабораторной работы была создана таблица HumanResources.JobCandidateHistory с необходимыми столбцами и ограничениями целостности, включая PRIMARY KEY, CHECK и DEFAULT для поля Rating и FOREIGN KEY для ContactID. Проверка и выполнение вставок из файла TestConstraints.sql показали, что ограничения работают корректно: попытка вставки некорректного значения Rating вызвала ошибку, корректное значение прошло успешно. С помощью команд ALTER TABLE … NOCHECK и CHECK было продемонстрировано отключение и последующее включение ограничения CHECK, что подтверждалось состоянием is_disabled в sys.check_constraints.
