Универсальная учебная модель из 3 таблиц
Ответы
Отличная идея 👍
Ниже — **универсальная учебная модель из 3 таблиц**, которая **покроет 100% заданий курса**: фильтрация, JOIN, агрегации, подзапросы, оконные функции и аналитика.
---
# Учебная схема БД (3 таблицы)
## 1. Таблица `users` — пользователи
```sql
users (
id INT PRIMARY KEY,
full_name VARCHAR(100),
email VARCHAR(100),
city VARCHAR(50),
age INT,
registered_at DATE
)
```
**Назначение**
* Анализ пользователей
* Фильтрация по возрасту, городу
* Группировка по городам
* Связь с заказами
**Типовые вопросы**
* Сколько пользователей в каждом городе?
* Кто зарегистрировался позже всех?
* Пользователи без заказов
---
## 2. Таблица `orders` — заказы
```sql
orders (
id INT PRIMARY KEY,
user_id INT REFERENCES users(id),
order_date DATE,
amount NUMERIC(10, 2),
status VARCHAR(20)
)
```
**Примеры статусов**
* `new`
* `paid`
* `cancelled`
* `refunded`
**Назначение**
* Финансовая аналитика
* JOIN с пользователями
* Оконные функции
* Подзапросы
**Типовые вопросы**
* Сумма заказов по пользователям
* Средний чек
* Топ клиентов
* Последний заказ пользователя
---
## 3. Таблица `payments` — платежи
```sql
payments (
id INT PRIMARY KEY,
order_id INT REFERENCES orders(id),
payment_date DATE,
payment_type VARCHAR(20),
paid_amount NUMERIC(10, 2)
)
```
**Примеры типов оплаты**
* `card`
* `cash`
* `transfer`
**Назначение**
* JOIN по нескольким таблицам
* Проверка соответствия платежей и заказов
* Более сложная аналитика
**Типовые вопросы**
* Какие заказы оплачены не полностью?
* Каким способом платят чаще?
* Сумма платежей по датам
---
# Связи между таблицами
```
users 1 ────< orders 1 ────< payments
```
* Один пользователь → много заказов
* Один заказ → один или несколько платежей
---
# Почему эта схема идеальна для курса
✔ всего **3 таблицы** — легко держать в голове
✔ покрывает **все темы SQL**
✔ подходит для:
* аналитики
* backend
* собеседований
✔ масштабируется (можно добавить `products`, не ломая курс)
---
## Примеры заданий, которые сразу возможны
* Пользователи без заказов (LEFT JOIN)
* Топ-3 заказа каждого пользователя (оконные функции)
* Клиенты с суммой заказов выше среднего (подзапросы)
* Оплаченные и неоплаченные заказы
* Ранжирование пользователей по выручке
---
Если хочешь, следующим шагом могу:
* ✍️ **написать DDL + тестовые данные (INSERT)**
* 📘 **привязать каждое задание курса к этим таблицам**
* 🎯 **сделать набор задач уровня собеседования**