
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное
учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМУПРАВЛЕНИЯ И РАДИОЭЛЕКТРИКИ (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
СОЗДАНИЕ СВЯЗАННЫХ ТАБЛИЦ В СУБД «ORACLE» С ДЕКЛАРАТИВНЫМИ ОГРАНИЧЕНИЯМИ ДАННЫХ
Отчет по лабораторной работе №2
по дисциплине «Базы данных»
Выполнил студент гр. 361-2
____________П.В. Можаев
«___» __________ 2024 г.
Проверил ст. препод. каф. ПрЭ
_________ А.И. Муравьев
«___» __________2024 г.
ВВЕДЕНИЕ
Целью работы является формирование навыков создания таблиц с помощью стандартного языка запросов SQL работы с реляционными базами данных. В работе необходимо создать две связанных таблицы (родительская и дочерняя). Список данных задается вариантом. Для 11 варианта необходимо создать следующие таблицы:
Родительская - фирма, дочерняя – предоставляемые услуги.
В таблице фирма должны содержаться следующие данные:
Название фирмы
ФИО директора
Адрес фирмы
Количество работающих сотрудников больше 5
Специализация
В таблице предоставляемые услуги должны содержаться следующие данные: 1) Название услуги
2) Стоимость услуги
3) Продолжительность услуги больше 0
4) Количество сотрудников, обеспечивающих услугу
5) Вид оборудования, используемое при услуге
2 ХОД РАБОТЫ
На рисунках 2.1 и 2.2 представлены заполненные родительская и дочерняя таблицы (соответственно).
2.1 Код для создания родительской таблицы
CREATE TABLE Firm ( Firm_ID NUMBER PRIMARY KEY, -- Уникальный идентификатор фирмы Firm_Name VARCHAR2(100) NOT NULL, -- Название фирмы Director_Name VARCHAR2(100), -- ФИО директора Address VARCHAR2(200), -- Адрес фирмы Employee_Count NUMBER CHECK (Employee_Count > 5), -- Количество сотрудников больше 5 Specialization VARCHAR2(100) -- Специализация фирмы )2.2
Строки для заполнения родительской таблицы
NSERT
INTO Firm
(Firm_ID, Firm_Name, Director_Name, Address, Employee_Count,
Specialization) VALUES
(1,
'СтройГарант',
'Иванов
Иван Иванович',
'г. Москва,
ул. Ленина,
д. 10', 25,
'Строительные
услуги');
INSERT INTO
Firm (Firm_ID, Firm_Name, Director_Name, Address, Employee_Count,
Specialization) VALUES
(2, 'ТехСервис',
'Петрова
Анна Сергеевна',
'г.
Санкт-Петербург,
Невский пр.,
д. 15', 12,
'Ремонт и
обслуживание техники');
INSERT INTO
Firm (Firm_ID, Firm_Name, Director_Name, Address, Employee_Count,
Specialization) VALUES
(3, 'Чистый
Дом', 'Сидоров
Алексей Павлович',
'г. Новосибирск,
ул. Советская, д. 5', 8,
'Уборка помещений')
Рисунок 2.1 – Заполненная родительская таблица
2.3 Код для создания дочерней таблицы
CREATE TABLE Provided_Services ( Service_ID NUMBER PRIMARY KEY, -- Уникальный идентификатор услуги Firm_ID NUMBER NOT NULL, -- Внешний ключ к таблице Firm Service_Name VARCHAR2(100) NOT NULL, -- Название услуги Cost NUMBER(10, 2) CHECK (Cost > 0), -- Стоимость услуги (должна быть больше 0) Duration NUMBER CHECK (Duration > 0),-- Продолжительность услуги (должна быть больше 0) Employee_Count NUMBER, -- Количество сотрудников, обеспечивающих услугу Equipment_Type VARCHAR2(100), -- Вид используемого оборудования CONSTRAINT fk_firm FOREIGN KEY (Firm_ID) REFERENCES Firm(Firm_ID) )2.4 Строки для заполнение дочерней таблицы
INSERT
INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(1, 1,
'Ремонт
квартир',
150000, 30,
5,
'Электроинструменты');
INSERT INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(2, 1,
'Монтаж
кровли',
200000, 20,
7, 'Кровельное
оборудование');
INSERT INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(3, 2,
'Ремонт
смартфонов',
3000, 2,
2, 'Паяльная
станция');
INSERT INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(4, 2,
'Настройка
компьютеров',
1500, 1,
1, 'Компьютерное
ПО'); INSERT
INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(5, 3,
'Генеральная
уборка',
10000, 8,
3,
'Профессиональные
пылесосы');
INSERT INTO
Provided_Services (Service_ID, Firm_ID, Service_Name, Cost, Duration,
Employee_Count, Equipment_Type) VALUES
(6, 3,
'Мытье
окон', 5000,
4, 2,
'Моющие
средства')
Рисунок 2.2 – Заполненная дочерняя таблица
2.5 Команды модификации данных, нарушающие целостность ссылок, для родительской таблицы:
1) Удаление строки из родительской таблицы
Если дочерняя таблица ссылается на строку в родительской таблице, удалений этой строки приведет к нарушению целостности ссылок.
DELETE FROM Firm WHERE Firm_ID = 1;
ORA-02292: integrity constraint (D3612MPV.FK_FIRM) violated - child record found – ошибка возникает в дочерней таблице, если в ней есть строки, подходящие под условие Firm_ID = 1.
2) Изменение значения первичного ключа.
Обновление значения первичного ключа в родительской таблице, на который ссылаются строки в дочерней таблице, также нарушается целостность ссылок.
UPDATE Firm SET Firm_ID = 99 WHERE Firm_ID = 1;
ORA-02292: integrity constraint (D3612MPV.FK_FIRM) violated - child record found
Для дочерней таблицы
Удаление строки из дочерней таблицы
Если в родительской таблице есть строк, на которые ссылаются внешние ключи в дочерней таблице, и вы удаляете эти строки из дочерней таблицы, это нарушает целостность ссылок.
DELETE FROM Provided_Services WHERE Service_ID = 1; ORA-02291: integrity constraint (SCHEMA.CONSTRAINT_NAME) violated - parent key not found
Изменение значения внешнего ключа в дочерней таблице
Если изменить значение внешнего ключа в дочерней таблице, который ссылается на родительскую таблицу, это также приведет к нарушению целостности ссылок.
UPDATE Provided_Services SET Firm_ID = 99 WHERE Service_ID = 1
ORA-02291: integrity constraint (D3612MPV.FK_FIRM) violated - parent key not found
2024