МДиСУБД, 353501, Петрожицкая
Проект представляет собой систему управления интернет-магазином автомобилей.
Система включает функциональность для управления пользователями, автомобилями, брендами, моделями, заказами, корзинами, поставщиками и купонами.
-
Авторизация/аутентификация пользователя:
- Регистрация нового пользователя с проверкой уникальности email.
- Вход в систему с использованием email и пароля.
- Выход из системы.
-
Управление пользователями (CRUD):
- Администраторы могут создавать новых пользователей.
- Возможность просмотра списка пользователей с фильтрацией.
- Обновление информации о пользователях (пароль, имя, роль).
- Удаление учетных записей пользователей.
-
Система ролей:
- Клиент (customer).
- Менеджер (manager).
- Администратор (admin).
-
Управление каталогом автомобилей:
- Добавление, редактирование и удаление автомобилей.
- Хранение брендов и моделей.
- Указание характеристик автомобиля: год выпуска, цвет, цена, пробег, статус.
-
Система заказов:
- Добавление автомобилей в корзину.
- Оформление заказа с указанием адреса и купона.
- Возможность нескольких автомобилей в одном заказе.
- Статусы заказов: pending, paid, delivered, cancelled.
-
Корзина:
- Временное хранение выбранных автомобилей перед оформлением заказа.
- Реализована через таблицу
CartItemдля связи многие ко многим междуCartиCar.
-
Система купонов и скидок:
- Купоны на фиксированную скидку.
- Проверка срока действия купона и минимальной суммы заказа.
- Связь пользователей и купонов через
UserCoupon(M:N).
-
Отзывы:
- Пользователь может оставить отзыв о купленном автомобиле.
- Оценка (1–5) и комментарий.
Назначение: хранение информации о клиентах, менеджерах и администраторах.
Поля:
- user_id: int (PK)
- name: string
- email: string (уникальный)
- phone: string
- role: enum (customer, manager, admin)
- profile_picture: string (nullable)
Связи:
- 1:N с
Address,Order,Review,Cart,UserCoupon.
Назначение: хранение адресов доставки пользователей.
Поля:
- address_id: int (PK)
- user_id: int (FK → User)
- city: string
- street: string
- house: string
- apartment: string (nullable)
- is_default: bool
Связи:
- N:1 с
User.
Назначение: справочник брендов автомобилей.
Поля:
- brand_id: int (PK)
- name: string
- country: string
Связи:
- 1:N с
Model.
Назначение: справочник моделей автомобилей.
Поля:
- model_id: int (PK)
- brand_id: int (FK → Brand)
- name: string
- body_type: string
- engine_type: string
Связи:
- N:1 с
Brand. - 1:N с
Car.
Назначение: хранение информации о поставщиках/дилерах автомобилей.
Поля:
- supplier_id: int (PK)
- name: string
- contact_info: string
- rating: decimal
Связи:
- 1:N с
Car.
Назначение: конкретный автомобиль, выставленный на продажу.
Поля:
- car_id: int (PK)
- model_id: int (FK → Model)
- supplier_id: int (FK → Supplier)
- year: int
- color: string
- price: decimal
- mileage: int (nullable)
- status: enum (available, reserved, sold)
Связи:
- N:1 с
Model,Supplier. - M:N с
CartчерезCartItem. - M:N с
OrderчерезOrderItem. - 1:N с
Review.
Назначение: временное хранилище выбранных автомобилей перед заказом.
Поля:
- cart_id: int (PK)
- user_id: int (FK → User)
- created_at: datetime
Связи:
- N:1 с
User. - M:N с
CarчерезCartItem. - 1:N с
Order.
Назначение: реализация связи многие ко многим между корзиной и автомобилями.
Поля:
- cart_item_id: int (PK)
- cart_id: int (FK → Cart)
- car_id: int (FK → Car)
- quantity: int
- added_at: datetime
Связи:
- N:1 с
CartиCar.
Назначение: предоставление скидки на заказ.
Поля:
- coupon_id: int (PK)
- code: string (уникальный)
- discount_amount: decimal
- min_order_amount: decimal
- valid_from: datetime
- valid_until: datetime
- is_active: bool
Связи:
- 1:N с
Order. - M:N с
UserчерезUserCoupon.
Назначение: хранение данных о купонах, использованных пользователями.
Поля:
- user_coupon_id: int (PK)
- user_id: int (FK → User)
- coupon_id: int (FK → Coupon)
- used_at: datetime (nullable)
Связи:
- N:1 с
UserиCoupon.
Назначение: оформление заказа.
Поля:
- order_id: int (PK)
- user_id: int (FK → User)
- cart_id: int (FK → Cart, nullable)
- coupon_id: int (FK → Coupon, nullable)
- total_amount: decimal
- status: enum (pending, paid, delivered, cancelled)
- created_at: datetime
Связи:
- N:1 с
User,Coupon,Cart. - M:N с
CarчерезOrderItem.
Назначение: реализация связи многие ко многим между заказом и автомобилями.
Поля:
- order_item_id: int (PK)
- order_id: int (FK → Order)
- car_id: int (FK → Car)
- price: decimal
Связи:
- N:1 с
OrderиCar.
Назначение: отзывы пользователей об автомобилях.
Поля:
- review_id: int (PK)
- user_id: int (FK → User)
- car_id: int (FK → Car)
- rating: int (1–5)
- comment: string
- created_at: datetime
Связи:
- N:1 с
UserиCar.
| Связь | Тип |
|---|---|
| User – Address | 1:N |
| User – Cart | 1:N |
| User – Order | 1:N |
| User – Review | 1:N |
| User – Coupon | M:N через UserCoupon |
| Brand – Model | 1:N |
| Model – Car | 1:N |
| Supplier – Car | 1:N |
| Cart – Car | M:N через CartItem |
| Order – Car | M:N через OrderItem |
| Coupon – Order | 1:N |