Похожие презентации:
Урок1-23._БАЗЫ_ДАННЫХ._Продолжение-3.ДЗ
1.
Задачи для практикиШаг 1. Создание подключения
Задача:
Создать файл db.js.
Подключиться к базе через Pool с параметрами: user, host, database, password,
port.
Экспортировать пул для использования в других файлах.
Подсказка:
Использовать const { Pool } = require("pg")
Экспортировать объект пула через module.exports.
2.
Задачи для практикиВсё остальное (создание таблицы, добавление, выборка, обновление,
удаление, транзакции) пишем в отдельном файле, например app.js.
В начале файла app.js импортируем пул:
const pool = require("./db");
Запуск кода:
node app.js
3.
Практические задачи: Node.js + PostgreSQLЗадача 1. Перевод зарплаты между сотрудниками
1. Создаём таблицу:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
salary INT
);
2. Заполняем начальными данными:
INSERT INTO employees (name, salary) VALUES
('Ансар', 5000),
('Адам', 3000);
4.
Практические задачи: Node.js + PostgreSQLЗадача 1. Перевод зарплаты между сотрудниками
3. Задание:
Написать функцию transferSalary(fromId, toId, amount), которая переводит
часть зарплаты от одного сотрудника другому.
Если у отправителя не хватает денег → перевод отменяется.
4. Подсказка:
Начать транзакцию (BEGIN)
Проверить баланс отправителя (SELECT salary)
Сделать два UPDATE (минус у отправителя, плюс у получателя)
Завершить COMMIT, иначе → ROLLBACK
5.
Практические задачи: Node.js + PostgreSQLЗадача 2. Массовое добавление сотрудников
3. Задание:
Сделать функцию addEmployees(employees), которая принимает массив
сотрудников и добавляет всех в таблицу одной транзакцией.
Если один сотрудник не вставился → все не должны добавиться.
4. Подсказка:
В цикле вставлять записи с INSERT
Ошибка → ROLLBACK
6.
Практические задачи: Node.js + PostgreSQLЗадача 3. Удаление отдела вместе с сотрудниками
1. Создаём таблицы:
CREATE TABLE departments (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
VARCHAR(50)
); budget INT DEFAULT 0
);
CREATE TABLE employees (
CREATE
id TABLE
SERIALemployees
PRIMARY KEY,
(
name
id
SERIAL
VARCHAR(50),
PRIMARY KEY,
salary
name
VARCHAR(50),
INT,
department_id
salary
INT,
INT REFERENCES departments(id)
); department_id INT REFERENCES departments(id)
);
7.
Практические задачи: Node.js + PostgreSQLЗадача 3. Удаление отдела вместе с сотрудниками
2. Заполняем начальными данными:
INSERT INTO departments (name) VALUES ('HR'), ('IT');
INSERT INTO employees (name, salary, department_id) VALUES
('Саид', 4000, 1),
('Дауд', 5000, 2);
8.
Практические задачи: Node.js + PostgreSQLЗадача 4. Создание заказа
3. Задание:
Создать функцию deleteDepartment
Функция deleteDepartment(deptId) должна:
Удалить всех сотрудников из отдела
Удалить сам отдел
Оба шага должны быть атомарными.
4. Подсказка:
Сначала DELETE FROM employees WHERE department_id=$1
Потом DELETE FROM departments WHERE id=$1
9.
Практические задачи: Node.js + PostgreSQLЗадача 4. Создание заказа
1. Создаём таблицы:
CREATE TABLE orders
departments
(
(
id SERIAL PRIMARY KEY,
name VARCHAR(50)
user_id
INT,
); created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE employees (
CREATE
id TABLE
SERIALorder_items
PRIMARY KEY,
(
name
id
SERIAL
VARCHAR(50),
PRIMARY KEY,
salary INT,
order_id
INT REFERENCES orders(id),
department_idVARCHAR(50),
product_name
INT REFERENCES departments(id)
); quantity INT
);
10.
Практические задачи: Node.js + PostgreSQLЗадача 4. Создание заказа
2. Начальные данные. Для примера добавим пользователей (пусть у нас есть
таблица users):
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO users (name) VALUES
('Мовсар'),
('Мансур');
11.
Практические задачи: Node.js + PostgreSQLО RETURNING
Когда мы вставляем новую запись через INSERT, база автоматически создаёт
id (SERIAL). Чтобы сразу получить этот id после вставки, используем
RETURNING id.
Результат запроса — объект с полем id, который потом можно будет
использовать для вставки товаров, если понадобится:
const res = await client.query(
'INSERT INTO orders (user_id) VALUES ($1) RETURNING id',
[userId]
);
const orderId = res.rows[0].id;
12.
Практические задачи: Node.js + PostgreSQLЗадача 4. Создание заказа
3. Задание:
Создать функцию createOrder(userId, items), которая:
Создаёт заказ для пользователя в таблице orders.
Получает id созданного заказа (через RETURNING).
Добавляет все товары (items) в таблицу order_items.
Если хотя бы одна вставка не удалась → весь заказ отменяется (т.е. не
создаётся ни сам заказ, ни товары).
13.
Практические задачи: Node.js + PostgreSQLЗадача 4. Создание заказа
4. Пример вызова:
await createOrder(1, [
{ product_name: 'Ноутбук', quantity: 1 },
{ product_name: 'Мышка', quantity: 2 }
]);
Результат:
В orders появится заказ для пользователя с id = 1.
В order_items будут добавлены строки с товарами.
14.
Практические задачи: Node.js + PostgreSQLЗадача 5. Перевод бюджета между отделами
2. Заполняем начальными данными:
У нас два отдела — у HR есть 10 000 денег, у IT — 5 000.
INSERT INTO departments (name, budget) VALUES
('HR', 10000),
('IT', 5000);
15.
Практические задачи: Node.js + PostgreSQLЗадача 5. Перевод бюджета между отделами
3. Задание:
Написать функцию transferBudget(fromDept, toDept, amount), которая:
списывает деньги с одного отдела,
добавляет их другому отделу,
если у отдела-отправителя денег недостаточно, то транзакция должна отмениться
(оба изменения не выполняются).
Пример:
await transferBudget(1, 2, 2000);
Если попробовать перевести 20 000 из HR → операция должна отмениться, и
бюджеты останутся без изменений.
Базы данных