/
arseyfullin
/
lab5
Обзор
Документация
Войти
/
arseyfullin
/
lab5
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
lab5.sql
110 строк
3 KB
arseyfullin
upload files
05 дек 2025, 17:47
05 дек 2025, 17:47
1434e79
Код
Авторство
О чём код?
-- 1. СОЗДАНИЕ БАЗЫ ДАННЫХ И ТАБЛИЦ CREATE DATABASE SPDB; GO USE SPDB; GO -- Таблица Студенты CREATE TABLE Students ( StudentID INT IDENTITY(1,1) PRIMARY KEY, FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, Email NVARCHAR(100) NOT NULL ); GO -- Таблица Статьи с базовым внешним ключом CREATE TABLE Articles ( ArticleID INT IDENTITY(1,1) PRIMARY KEY, StudentID INT NOT NULL, ArticleTitle NVARCHAR(200) NOT NULL, PublicationDate DATE NOT NULL, CONSTRAINT Articles_Students FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ); GO -- Добавление тестовых данных INSERT INTO Students (FirstName, LastName, Email) VALUES ('Иван', 'Петров', 'ivan@edu.ru'), ('Мария', 'Сидорова', 'maria@edu.ru'); GO INSERT INTO Articles (StudentID, ArticleTitle, PublicationDate) VALUES (1, 'Искусственный интеллект', '2024-09-15'), (2, 'Дифференциальные уравнения', '2024-08-20'); GO -- 2. ДОБАВЛЕНИЕ ОГРАНИЧЕНИЙ ЦЕЛОСТНОСТИ -- CHECK: дата публикации не может быть будущей ALTER TABLE Articles ADD CONSTRAINT PubDate CHECK (PublicationDate <= GETDATE()); GO -- UNIQUE: уникальность названия статьи ALTER TABLE Articles ADD CONSTRAINT ArtTitle UNIQUE (ArticleTitle); GO -- Внешний ключ с каскадным удалением ALTER TABLE Articles DROP CONSTRAINT Articles_Students; GO ALTER TABLE Articles ADD CONSTRAINT Articles_Cascade FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE CASCADE; GO -- 3. ТРАНЗАКЦИЯ С ОБРАБОТКОЙ ОШИБОК BEGIN TRANSACTION; BEGIN TRY -- Добавление новой статьи (ИСПРАВЛЕНО: другая дата и название) INSERT INTO Articles (StudentID, ArticleTitle, PublicationDate) VALUES (1, 'Новые методы шифрования', '2024-05-01'); -- Обновление email студента UPDATE Students SET Email = 'research@mtii.ru' WHERE StudentID = 1; COMMIT TRANSACTION; PRINT 'Транзакция успешно выполнена'; END TRY BEGIN CATCH ROLLBACK TRANSACTION; PRINT 'Ошибка: ' + ERROR_MESSAGE(); END CATCH; GO -- 4. ТЕСТИРОВАНИЕ ОГРАНИЧЕНИЙ (добавьте для проверки) -- Проверка CHECK (должна быть ошибка) BEGIN TRY INSERT INTO Articles (StudentID, ArticleTitle, PublicationDate) VALUES (2, 'Тестовая статья', '2025-12-31'); PRINT 'ОШИБКА: CHECK не сработал!'; END TRY BEGIN CATCH PRINT '✓ CHECK сработал: ' + ERROR_MESSAGE(); END CATCH; GO -- Проверка UNIQUE (должна быть ошибка) BEGIN TRY INSERT INTO Articles (StudentID, ArticleTitle, PublicationDate) VALUES (2, 'Дифференциальные уравнения', '2024-01-01'); PRINT 'ОШИБКА: UNIQUE не сработал!'; END TRY BEGIN CATCH PRINT '✓ UNIQUE сработал: ' + ERROR_MESSAGE(); END CATCH; GO