МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут комп’ютерних технологій, автоматики та метрології
кафедра “Електронних обчислювальних машин”
/
Звіт
до лабораторної роботи № 5
з дисципліни «Організація баз даних»
на тему:
«Створення та використання представлень, функцій та тригерів»
Варіант
Львів 2025
ЛАБОРАТОРНА РОБОТА №4
Створення та використання представлень, функцій та тригерів
Мета роботи: отримати навики використання функцій, представлень та тригерів
ЗАВДАННЯ
До кожної таблиці,що була створена у попередніх лабораторних роботах створити представлення
До довільної таблиці додати колонку із типом datetime, яка буде автоматично заповнюватись за допомогою тригера під час INSERT операції.
Написати 3 запити із довільними вбудованими функціями
Написати одну користувацьку функцію, яка повертає скалярне значення
і одну користувацьку функцію, яка повертатиме таблицю
При захисті лабораторної роботи взяти індивідуальне завдання у викладача.
Вхідні дані
Варіант
Завдання
Виконання завдання
-- Створюємо базу даних для автосалону
CREATE DATABASE CAR_DEALERSHIP;
GO
USE 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
-- Додавання даних до таблиці Employees
INSERT 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);
-- Додавання даних до таблиці Cars
INSERT 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);
-- Додавання даних до таблиці Customers
INSERT 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_Features
INSERT 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');
-- Додавання даних до таблиці Sales
INSERT 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);
-- Представлення для Employees
CREATE VIEW dbo.EmployeesView AS
SELECT employee_id, first_name, last_name, position
FROM Employees;
-- Представлення для Cars
CREATE VIEW dbo.CarsView AS
SELECT car_id, brand, model, year
FROM Cars;
-- Представлення для Customers
CREATE VIEW dbo.CustomersView AS
SELECT customer_id, first_name, last_name, email
FROM Customers;
-- Представлення для Car_Features
CREATE VIEW dbo.CarFeaturesView AS
SELECT car_id, feature_name
FROM Car_Features;
-- Представлення для Sales
CREATE VIEW dbo.SalesView AS
SELECT sale_id, car_id, employee_id, sale_date
FROM Sales;
ALTER TABLE Sales
ADD created_at DATETIME;
CREATE TRIGGER SetSalesCreatedAt
ON Sales
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Sales
SET created_at = GETDATE()
FROM inserted
WHERE Sales.sale_id = inserted.sale_id;
END;
GO
INSERT INTO Sales (sale_id, car_id, employee_id, sale_date, total_price)
VALUES (11, 1, 1, '2023-06-01', 28999.99);
SELECT *
FROM Sales
WHERE sale_id = 11;
SELECT COUNT(*) AS total_employees
FROM Employees;
SELECT COUNT(*) AS total_employees
FROM Employees;
SELECT AVG(price) AS average_price
FROM Cars;
SELECT MAX(salary) AS max_salary
FROM Employees;
CREATE FUNCTION dbo.GetTotalSales()
RETURNS INT
AS
BEGIN
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);
Висновок: Я отримав навики використання функцій, представлень та тригерів