МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут комп’ютерних технологій, автоматики та метрології
кафедра “Електронних обчислювальних машин”
/
Звіт
до лабораторної роботи № 5
з дисципліни «Організація баз даних»
на тему:
«Створення та використання представлень, функцій та тригерів»
Варіант
Львів 2025
ЛАБОРАТОРНА РОБОТА №4
Створення та використання представлень, функцій та тригерів
Мета роботи: отримати навики використання функцій, представлень та тригерів
ЗАВДАННЯ
До кожної таблиці,що була створена у попередніх лабораторних роботах створити представлення
До довільної таблиці додати колонку із типом datetime, яка буде автоматично заповнюватись за допомогою тригера під час INSERT операції.
Написати 3 запити із довільними вбудованими функціями
Написати одну користувацьку функцію, яка повертає скалярне значення
і одну користувацьку функцію, яка повертатиме таблицю
При захисті лабораторної роботи взяти індивідуальне завдання у викладача.
Вхідні дані
Варіант
Завдання
Виконання завдання
-- Створюємо базу даних для автосалонуCREATE DATABASE CAR_DEALERSHIP;GOUSE CAR_DEALERSHIP;GO-- Таблиця співробітниківCREATE TABLE Employees( employee_id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, position VARCHAR(100) NOT NULL, salary DECIMAL(10, 2) NOT NULL);GO-- Таблиця автомобілівCREATE TABLE Cars( car_id INT PRIMARY KEY, brand VARCHAR(100) NOT NULL, model VARCHAR(100) NOT NULL, year INT NOT NULL, price DECIMAL(10, 2) NOT NULL);GO-- Таблиця клієнтів (посилається на менеджера із таблиці Employees)CREATE TABLE Customers( customer_id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, date_of_birth DATE, -- можна використовувати DATE або DATETIME phone VARCHAR(25), email VARCHAR(100), personal_manager_id INT, FOREIGN KEY (personal_manager_id) REFERENCES Employees (employee_id));GO-- Таблиця особливостей автомобілів (ключова комбінація car_id + feature_name)CREATE TABLE Car_Features( car_id INT NOT NULL, feature_name VARCHAR(100) NOT NULL, PRIMARY KEY (car_id, feature_name), FOREIGN KEY (car_id) REFERENCES Cars (car_id));GO-- Таблиця продажів (посилається на автомобілі та співробітників)CREATE TABLE Sales( sale_id INT PRIMARY KEY, car_id INT, employee_id INT, sale_date DATE, total_price DECIMAL(10, 2), FOREIGN KEY (car_id) REFERENCES Cars (car_id), FOREIGN KEY (employee_id) REFERENCES Employees (employee_id));GO-- Додавання даних до таблиці EmployeesINSERT INTO Employees (employee_id, first_name, last_name, position, salary)VALUES (1, 'John', 'Smith', 'Sales Manager', 60000.00), (2, 'Emily', 'Johnson', 'Sales Representative', 45000.00), (3, 'Michael', 'Brown', 'Service Manager', 55000.00), (4, 'Sarah', 'Davis', 'Finance Specialist', 50000.00), (5, 'David', 'Wilson', 'Sales Representative', 45000.00), (6, 'Jennifer', 'Martinez', 'Customer Service', 40000.00), (7, 'Robert', 'Anderson', 'Mechanic', 48000.00), (8, 'Lisa', 'Taylor', 'Marketing Specialist', 52000.00), (9, 'Thomas', 'Jones', 'Sales Representative', 45000.00), (10, 'Jessica', 'Clark', 'General Manager', 75000.00);-- Додавання даних до таблиці CarsINSERT INTO Cars (car_id, brand, model, year, price)VALUES (1, 'Toyota', 'Camry', 2023, 28999.99), (2, 'Honda', 'Accord', 2023, 30499.99), (3, 'Ford', 'Mustang', 2023, 40999.99), (4, 'Chevrolet', 'Silverado', 2023, 45500.00), (5, 'BMW', 'X5', 2023, 65000.00), (6, 'Mercedes', 'C-Class', 2023, 55000.00), (7, 'Audi', 'A4', 2023, 52000.00), (8, 'Tesla', 'Model 3', 2023, 48000.00), (9, 'Nissan', 'Altima', 2023, 26500.00), (10, 'Volkswagen', 'Golf', 2023, 28000.00);-- Додавання даних до таблиці CustomersINSERT INTO Customers (customer_id, first_name, last_name, date_of_birth, phone, email, personal_manager_id)VALUES (1, 'William', 'Johnson', '1985-05-15', '555-123-4567', 'william.johnson@email.com', 1), (2, 'Emma', 'Williams', '1990-03-22', '555-234-5678', 'emma.williams@email.com', 2), (3, 'Oliver', 'Brown', '1978-12-10', '555-345-6789', 'oliver.brown@email.com', 1), (4, 'Sophia', 'Miller', '1995-08-05', '555-456-7890', 'sophia.miller@email.com', 5), (5, 'James', 'Davis', '1982-06-30', '555-567-8901', 'james.davis@email.com', 2), (6, 'Charlotte', 'Garcia', '1988-11-18', '555-678-9012', 'charlotte.garcia@email.com', 9), (7, 'Benjamin', 'Rodriguez', '1975-04-25', '555-789-0123', 'benjamin.rodriguez@email.com', 1), (8, 'Amelia', 'Wilson', '1992-09-12', '555-890-1234', 'amelia.wilson@email.com', 5), (9, 'Henry', 'Anderson', '1980-07-08', '555-901-2345', 'henry.anderson@email.com', 9), (10, 'Mia', 'Thomas', '1998-01-20', '555-012-3456', 'mia.thomas@email.com', 2);-- Додавання даних до таблиці Car_FeaturesINSERT INTO Car_Features (car_id, feature_name)VALUES (1, 'Bluetooth'), (1, 'Backup Camera'), (1, 'Cruise Control'), (2, 'Bluetooth'), (2, 'Navigation'), (3, 'Leather Seats'), (3, 'Sunroof'), (4, 'Four-Wheel Drive'), (4, 'Towing Package'), (5, 'Premium Sound System'), (5, 'Heated Seats'), (5, 'Adaptive Cruise Control'), (6, 'Lane Departure Warning'), (6, 'Parking Sensors'), (7, 'Blind Spot Detection'), (8, 'Autopilot'), (8, 'Electric Range 300 miles'), (9, 'Fuel Efficiency'), (10, 'Compact Size');-- Додавання даних до таблиці SalesINSERT INTO Sales (sale_id, car_id, employee_id, sale_date, total_price)VALUES (1, 1, 1, '2023-01-15', 28999.99), (2, 3, 2, '2023-01-22', 40999.99), (3, 5, 1, '2023-02-05', 65000.00), (4, 7, 5, '2023-02-18', 52000.00), (5, 9, 9, '2023-03-10', 26500.00), (6, 2, 2, '2023-03-25', 30499.99), (7, 4, 1, '2023-04-08', 45500.00), (8, 6, 5, '2023-04-20', 55000.00), (9, 8, 9, '2023-05-12', 48000.00), (10, 10, 2, '2023-05-30', 28000.00);-- Представлення для EmployeesCREATE VIEW dbo.EmployeesView ASSELECT employee_id, first_name, last_name, positionFROM Employees;-- Представлення для CarsCREATE VIEW dbo.CarsView ASSELECT car_id, brand, model, yearFROM Cars;-- Представлення для CustomersCREATE VIEW dbo.CustomersView ASSELECT customer_id, first_name, last_name, emailFROM Customers;-- Представлення для Car_FeaturesCREATE VIEW dbo.CarFeaturesView ASSELECT car_id, feature_nameFROM Car_Features;-- Представлення для SalesCREATE VIEW dbo.SalesView ASSELECT sale_id, car_id, employee_id, sale_dateFROM Sales;ALTER TABLE Sales ADD created_at DATETIME;CREATE TRIGGER SetSalesCreatedAt ON Sales AFTER INSERT ASBEGIN SET NOCOUNT ON; UPDATE Sales SET created_at = GETDATE() FROM inserted WHERE Sales.sale_id = inserted.sale_id;END;GOINSERT INTO Sales (sale_id, car_id, employee_id, sale_date, total_price)VALUES (11, 1, 1, '2023-06-01', 28999.99);SELECT *FROM SalesWHERE sale_id = 11;SELECT COUNT(*) AS total_employeesFROM Employees;SELECT COUNT(*) AS total_employeesFROM Employees;SELECT AVG(price) AS average_priceFROM Cars;SELECT MAX(salary) AS max_salaryFROM Employees;CREATE FUNCTION dbo.GetTotalSales() RETURNS INTASBEGIN DECLARE @TotalSales INT; SELECT @TotalSales = COUNT(*) FROM Sales; RETURN @TotalSales;END;SELECT dbo.GetTotalSales() AS TotalSalesCount;CREATE FUNCTION dbo.GetCarsAbovePrice(@min_price DECIMAL(10, 2)) RETURNS TABLE AS RETURN(SELECT * FROM Cars WHERE price > @min_price);SELECT *FROM dbo.GetCarsAbovePrice(30000.00);
Висновок: Я отримав навики використання функцій, представлень та тригерів