Практика: Основы PostgreSQL — DDL и DML
Онлайн редактор кода для PostgreSQL
Здесь вы можете попробовать свои силы в программировании на языке SQL для работы с PostgreSQL. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.
❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.
Задание 1 — Простая таблица с разными ограничениями
Задание 1: Простая таблица с ограничениями
⏱️ Примерное время: 10-15 минутСоздай таблицу с PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT и CHECK.
Пример полей:
- id SERIAL PRIMARY KEY
- name / title VARCHAR(100–150) NOT NULL
- code / sku / isbn VARCHAR(50) UNIQUE
- created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
- active BOOLEAN DEFAULT TRUE
Требования:
- минимум одно CHECK (например, price > 0, year ≥ 1900, age ≥ 18 и т.п.)
- Вставь 3–4 записи с помощью INSERT ... VALUES
- Попробуй вставить некорректные данные → посмотри ошибки
Задание 2 — Связь один-ко-многим (автор → книги / категория → товары)
Задание 2: Связь 1:N
⏱️ Примерное время: 15-20 минутСоздай две таблицы с FOREIGN KEY и разными ON DELETE.
Требования:
- Родительская таблица: id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE
- Дочерняя таблица: id SERIAL PRIMARY KEY, name VARCHAR(150) NOT NULL, parent_id INTEGER NOT NULL REFERENCES parent(id) ON DELETE ...
- Выбери подходящую стратегию ON DELETE
- Вставь 2 записи в родительскую и по 3–4 в дочернюю
- Попробуй удалить родительскую запись → посмотри, что произошло
Пример:
DELETE FROM authors WHERE author_id = 1;
→ все книги этого автора тоже удалятся (если CASCADE)
Задание 3 — Связь многие-ко-многим (студенты ↔ курсы)
Задание 3: Связь N:N
⏱️ Примерное время: 20-25 минутСоздай связующую таблицу для отношения многие-ко-многим.
Требования:
- Две основные таблицы: id SERIAL PK, name VARCHAR(100) NOT NULL
- Связующая таблица: (left_id, right_id) PRIMARY KEY, FOREIGN KEY ... ON DELETE CASCADE на обе стороны
- Опционально: дата записи, статус и т.п.
- Вставь по 3 записи в каждую основную таблицу и 5–8 связей
Пример связующей таблицы:
CREATE TABLE student_courses (
student_id INTEGER REFERENCES students(student_id) ON DELETE CASCADE,
course_id INTEGER REFERENCES courses(course_id) ON DELETE CASCADE,
enrolled_at DATE DEFAULT CURRENT_DATE,
PRIMARY KEY (student_id, course_id)
);
Задание 4 — INSERT с RETURNING и ON CONFLICT
Задание 4: Продвинутый INSERT
⏱️ Примерное время: 15-20 минутИспользуй RETURNING и ON CONFLICT.
Требования:
- Используй
RETURNING *или конкретные поля - Хотя бы один вариант с
ON CONFLICT DO NOTHING - Хотя бы один с
ON CONFLICT ... DO UPDATE SET ... = EXCLUDED....
Пример:
INSERT INTO products (sku, name, price)
VALUES ('ABC123', 'Телефон', 39990)
ON CONFLICT (sku)
DO UPDATE SET
price = EXCLUDED.price,
updated_at = NOW()
RETURNING product_id, name, price;
Задание 5 — ALTER TABLE: добавление и изменение полей
Задание 5: Изменение структуры таблицы
⏱️ Примерное время: 15-20 минутДобавь поля, ограничения, измени типы.
Требования:
- Сначала создай простую таблицу
- Затем выполни 3–5 команд ALTER TABLE
- После каждого ALTER используй \d для проверки
Пример:
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users ADD CONSTRAINT unique_phone UNIQUE (phone);
ALTER TABLE users ALTER COLUMN email SET NOT NULL;
Задание 6 — Мини-проект: структура интернет-магазина
Задание 6: Полная структура мини-магазина (итоговое)
⏱️ Примерное время: 30-45 минутСоздай 4–5 таблиц с правильными связями и вставь тестовые данные.
Требования:
- users (id, username, email, created_at)
- categories (id, name UNIQUE)
- products (id, name, price NUMERIC CHECK >0, category_id REFERENCES, stock INTEGER DEFAULT 0 CHECK >=0)
- orders (id, user_id REFERENCES, created_at, status VARCHAR DEFAULT 'new' CHECK IN (...))
- order_items (order_id, product_id, quantity CHECK >0, price_at_purchase NUMERIC)
- Все FOREIGN KEY с подходящими ON DELETE
- Вставь по 2–4 записи в каждую таблицу
- Используй RETURNING хотя бы в одном INSERT
После создания используй \dt и \d для проверки структуры.
Ошибки нарушения ограничений — твои лучшие учителя.
Читай их внимательно — они почти всегда объясняют, что именно пошло не так.