Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab2

.pdf
Скачиваний:
0
Добавлен:
19.01.2026
Размер:
3.32 Mб
Скачать

home_address: 'г. Самара, Московское

 

phone: '+79218901234'

шоссе, д. 15',

 

})

phone: '+79216789012'

 

 

 

})

 

CREATE (:Customer {

 

 

 

id: 'CLIENT009',

CREATE (:Customer {

 

 

full_name: 'Орлов Михаил Борисович',

id: 'CLIENT007',

 

 

passport_series_number: 'II-987654',

full_name: 'Алексеев Павел Иванович',

 

 

home_address: 'г. Казань, Кремлёвская

passport_series_number: 'GG-789012',

 

улица, д. 45',

home_address: 'г. Ростов-на-Дону,

 

phone: '+79219012345'

Будённовский проспект, д. 30',

 

})

phone: '+79217890123'

 

 

 

})

 

CREATE (:Customer {

 

 

 

id: 'CLIENT010',

CREATE (:Customer {

 

 

full_name: 'Романова Ирина Николаевна',

id: 'CLIENT008',

 

 

passport_series_number: 'JJ-654321',

f u l l _ n a m e : ' Н и ко л а е в а

Т а т ь я н а

home_address: 'г. Нижний Новгород,

Александровна',

 

Большая Покровская улица, д. 25',

passport_series_number: 'HH-345678',

 

 

phone: '+79210123456'

home_address: 'г. Уфа, Проспект Октября,

})

д. 120',

 

 

 

Рисунок 15 - Создание узлов покупателей

Создание узлов продавцов, результат представлен на рисунке 16, а заполнение в

листинге 3.

 

 

Листинг 3. Создание узлов продавцов

 

 

// Создаем узлы-продавцы

 

salary: 60000

CREATE (:Seller {

 

})

id: 'SELLER001',

 

 

full_name: 'Семенов Алексей Петрович',

CREATE (:Seller {

passport_series_number: 'KK-123456',

 

id: 'SELLER003',

phone: '+79211234567',

 

full_name: 'Котов Александр Олегович',

salary: 50000

 

passport_series_number: 'MM-345678',

})

 

phone: '+79213456789',

 

 

salary: 55000

CREATE (:Seller {

 

})

id: 'SELLER002',

 

 

f u l l _ n a m e : ' К о р н е е в а

М а р и н аCREATE (:Seller {

Владимировна',

 

id: 'SELLER004',

passport_series_number: 'LL-789012',

 

full_name: 'Белкин Юрий Николаевич',

phone: '+79212345678',

 

passport_series_number: 'NN-987654',

phone: '+79214567890', salary: 52000

})

CREATE (:Seller { id: 'SELLER005',

full_name: 'Юдина Юлия Андреевна', passport_series_number: 'OO-654321', phone: '+79215678901',

salary: 58000 })

CREATE (:Seller { id: 'SELLER006',

full_name: 'Казаков Денис Александрович', passport_series_number: 'PP-123456', phone: '+79216789012',

salary: 54000 })

CREATE (:Seller { id: 'SELLER007',

full_name: 'Волков Владислав Евгеньевич', passport_series_number: 'QQ-789012', phone: '+79217890123',

salary: 56000

})

CREATE (:Seller { id: 'SELLER008',

full_name: 'Чернова Наталья Игоревна', passport_series_number: 'RR-345678', phone: '+79218901234',

salary: 53000 })

CREATE (:Seller { id: 'SELLER009',

full_name: 'Голубев Игорь Анатольевич', passport_series_number: 'SS-987654', phone: '+79219012345',

salary: 57000 })

CREATE (:Seller { id: 'SELLER010',

f u l l _ n a m e : 'З а х а р ч е н ко О к с а н а Михайловна',

passport_series_number: 'TT-654321', phone: '+79210123456',

salary: 59000 })

Рисунок 16 - Создание узлов продавцов

Создание узлов заказов, результат представлен на рисунке 17, а заполнение в листинге

4.

 

Листинг 4. Создание узлов заказов

 

// Создаем узлы-заказы

id: 'ORDER002',

CREATE (:Order {

purchase_date: '2023-10-05',

id: 'ORDER001',

payment_method: 'Картой',

purchase_date: '2023-10-01',

car_id: 'CAR002',

payment_method: 'Наличные',

client_id: 'CLIENT002',

car_id: 'CAR001',

seller_id: 'SELLER002'

client_id: 'CLIENT001',

})

seller_id: 'SELLER001'

 

})

CREATE (:Order {

 

id: 'ORDER003',

CREATE (:Order {

purchase_date: '2023-10-10',

payment_method: 'Кредит', car_id: 'CAR003', client_id: 'CLIENT003', seller_id: 'SELLER003'

})

CREATE (:Order { id: 'ORDER004',

purchase_date: '2023-10-15', payment_method: 'Онлайн оплата', car_id: 'CAR004',

client_id: 'CLIENT004', seller_id: 'SELLER004'

})

CREATE (:Order { id: 'ORDER005',

purchase_date: '2023-10-20', payment_method: 'Банковский перевод', car_id: 'CAR005',

client_id: 'CLIENT005', seller_id: 'SELLER005'

})

CREATE (:Order { id: 'ORDER006',

purchase_date: '2023-10-25', payment_method: 'Наличными', car_id: 'CAR006',

client_id: 'CLIENT006', seller_id: 'SELLER006'

})

CREATE (:Order {

id: 'ORDER007', purchase_date: '2023-10-30', payment_method: 'Картой', car_id: 'CAR007',

client_id: 'CLIENT007', seller_id: 'SELLER007'

})

CREATE (:Order { id: 'ORDER008',

purchase_date: '2023-11-05', payment_method: 'Кредит', car_id: 'CAR008',

client_id: 'CLIENT008', seller_id: 'SELLER008'

})

CREATE (:Order { id: 'ORDER009',

purchase_date: '2023-11-10', payment_method: 'Онлайн оплата', car_id: 'CAR009',

client_id: 'CLIENT009', seller_id: 'SELLER009'

})

CREATE (:Order { id: 'ORDER010',

purchase_date: '2023-11-15', payment_method: 'Банковский перевод', car_id: 'CAR010',

client_id: 'CLIENT010', seller_id: 'SELLER010'

})

Рисунок 17 - Создание узлов заказов

Листинг 6. Создание связей

// Соединяем заказчиков с заказами

MATCH (c:Customer {id: 'CLIENT001'}), (o:Order {id: 'ORDER001'}) MERGE (c)-[:MADE_ORDER]->(o); // Сделал заказ

MATCH (c:Customer {id: 'CLIENT002'}), (o:Order {id: 'ORDER002'})

MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT003'}), (o:Order {id: 'ORDER003'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT004'}), (o:Order {id: 'ORDER004'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT005'}), (o:Order {id: 'ORDER005'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT006'}), (o:Order {id: 'ORDER006'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT007'}), (o:Order {id: 'ORDER007'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT008'}), (o:Order {id: 'ORDER008'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT009'}), (o:Order {id: 'ORDER009'}) MERGE (c)-[:MADE_ORDER]->(o);

MATCH (c:Customer {id: 'CLIENT010'}), (o:Order {id: 'ORDER010'}) MERGE (c)-[:MADE_ORDER]->(o);

// Соединяем продавцов с заказами

MATCH (s:Seller {id: 'SELLER001'}), (o:Order {id: 'ORDER001'}) MERGE (s)-[:HANDLED_ORDER]->(o); // Обработал заказ

MATCH (s:Seller {id: 'SELLER002'}), (o:Order {id: 'ORDER002'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER003'}), (o:Order {id: 'ORDER003'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER004'}), (o:Order {id: 'ORDER004'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER005'}), (o:Order {id: 'ORDER005'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER006'}), (o:Order {id: 'ORDER006'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER007'}), (o:Order {id: 'ORDER007'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER008'}), (o:Order {id: 'ORDER008'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER009'}), (o:Order {id: 'ORDER009'}) MERGE (s)-[:HANDLED_ORDER]->(o);

MATCH (s:Seller {id: 'SELLER010'}), (o:Order {id: 'ORDER010'}) MERGE (s)-[:HANDLED_ORDER]->(o);

// Соединяем заказы с автомобилями

MATCH (o:Order {id: 'ORDER001'}), (c:Car {id: 'CAR001'}) MERGE (o)-[:INCLUDES_CAR]->(c); // Включает автомобиль

MATCH (o:Order {id: 'ORDER002'}), (c:Car {id: 'CAR002'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER003'}), (c:Car {id: 'CAR003'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER004'}), (c:Car {id: 'CAR004'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER005'}), (c:Car {id: 'CAR005'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER006'}), (c:Car {id: 'CAR006'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER007'}), (c:Car {id: 'CAR007'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER008'}), (c:Car {id: 'CAR008'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER009'}), (c:Car {id: 'CAR009'}) MERGE (o)-[:INCLUDES_CAR]->(c);

MATCH (o:Order {id: 'ORDER010'}), (c:Car {id: 'CAR010'}) MERGE (o)-[:INCLUDES_CAR]->(c);

10 запросов разной степени сложности представлены ниже:

Листинг 6. Нахождение всех автомобилей бренда Audi

MATCH (c:Car) WHERE c.brand = 'Audi' RETURN c.id as Id, c.model as Model

Рисунок 18 - Результат выполнения запроса

Листинг 7. Нахождение продавцов с зарплатой больше 55 тысяч рублей

MATCH (s:Seller) WHERE s.salary > 55000 RETURN s.full_name as FullName, s.salary as Salary

Рисунок 19 - Результат выполнения запроса

Листинг 8. Получение всех заказов, оплаченных наличными

MATCH (o:Order) WHERE o.payment_method = 'Наличные' RETURN o.id as OrderId, o.purchase_date as PurchaseDate

Рисунок 20 - Результат выполнения запроса

Листинг 9. Получение всех автомобилей, доступных на складе

MATCH (c:Car) WHERE c.availability = 'Да' RETURN c.id as Id, c.brand as Brand, c.model

as Model

Рисунок 21 - Результат выполнения запроса

Листинг 10. Нахождение всех клиентов, которые совершили покупку автомобиля стоимость

свыше 20 тысяч рублей

MATCH (c:Customer)-[:MADE_ORDER]->(o:Order)-[:INCLUDES_CAR]->(car:Car) WHERE car.price > 20000

RETURN c.full_name AS FullName, car.brand AS Brand, car.model AS Model ORDER BY car.price DESC

Рисунок 22 - Результат выполнения запроса

Листинг 11. Нахождение продавца, обслужившего больше всего заказов

MATCH (s:Seller)-[:HANDLED_ORDER]->(o:Order) RETURN s.full_name AS FullName, COUNT(o) AS NumOrders

ORDER BY NumOrders DESC

LIMIT 1

Рисунок 23 - Результат выполнения запроса

Листинг 12. Нахождение всех автомобилей, включенных в заказы за октябрь 2023. MATCH (o:Order)-[:INCLUDES_CAR]->(c:Car)

WHERE o.purchase_date STARTS WITH '2023-10' RETURN c.brand AS Brand, c.model AS Model ORDER BY c.brand ASC

Рисунок 24 - Результат выполнения запроса

Листинг 13. Получение общего дохода от продажи автомобилей в октябре 2023 года. MATCH (o:Order)-[:INCLUDES_CAR]->(c:Car)

WHERE o.purchase_date STARTS WITH '2023-10' RETURN SUM(c.price) AS TotalIncome

Рисунок 25 - Результат выполнения запроса

Листинг 14. Получение страны, автомобили из которой чаще всего покупают. MATCH (o:Order)-[:INCLUDES_CAR]->(c:Car)

RETURN c.color AS Color, COUNT(*) AS NumPurchases ORDER BY NumPurchases DESC

LIMIT 1

Рисунок 26 - Результат выполнения запроса

Листинг 15. Получение покупателя, сделавшего больше всего заказов. MATCH (c:Customer)-[:MADE_ORDER]->(o:Order)

RETURN c.full_name AS FullName, COUNT(o) AS NumOrders ORDER BY NumOrders DESC

LIMIT 1

Рисунок 27 - Результат выполнения запроса

Листинг 16. Получение самого дорогого транспортного средство среди тех, что включены в

заказы, выполненные сотрудником с самой низкой заработной платой.

MATCH (s:Seller)

WITH MIN(s.salary) AS min_salary

MATCH (s:Seller)-[:HANDLED_ORDER]->(o:Order)-[:INCLUDES_CAR]->(c:Car) WHERE s.salary = min_salary

RETURN c.brand AS Brand, c.model AS Model, c.price AS Price ORDER BY c.price DESC

LIMIT 1

Рисунок 28 - Результат выполнения запроса

Вывод

Реализация графовой базы данных для автосалона оказалась эффективной и удобной для анализа данных и построения сложных связей между объектами. Графовые структуры позволяют быстро искать связи между клиентами, заказами, автомобилями и продавцами,

значительно облегчая выполнение бизнес-задач. С помощью предложенной схемы и примеров запросов становится возможным получение детальной аналитики, необходимой для эффективного управления бизнесом и принятия решений.

Таким образом, проект успешно демонстрирует преимущества использования графовых технологий в бизнесе и служит хорошим примером применения теории графов на практике.

Соседние файлы в предмете Программная инженерия