# Структура базы данных интернет-магазина одежды

## Содержание
1. [Пользователи](#пользователи)
2. [Каталог](#каталог)
3. [Заказы](#заказы)
4. [Отзывы](#отзывы)
5. [Контент](#контент)

## Пользователи

### Таблица `users`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| email | String | Email пользователя (уникальный) |
| hashed_password | String | Хешированный пароль |
| first_name | String | Имя пользователя |
| last_name | String | Фамилия пользователя |
| phone | String | Телефон пользователя (опционально) |
| is_active | Boolean | Активен ли пользователь |
| is_admin | Boolean | Является ли пользователь администратором |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `addresses`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| user_id | Integer | Внешний ключ на таблицу users |
| city | String | Город |
| street | String | Улица |
| house | String | Номер дома |
| apartment | String | Номер квартиры (опционально) |
| postal_code | String | Почтовый индекс |
| is_default | Boolean | Является ли адрес адресом по умолчанию |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

## Каталог

### Таблица `collections`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| name | String | Название коллекции |
| slug | String | URL-совместимое имя (уникальное) |
| description | Text | Описание коллекции (опционально) |
| is_active | Boolean | Активна ли коллекция |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `categories`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| name | String | Название категории |
| slug | String | URL-совместимое имя (уникальное) |
| description | Text | Описание категории (опционально) |
| parent_id | Integer | Внешний ключ на родительскую категорию (опционально) |
| is_active | Boolean | Активна ли категория |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `sizes`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| name | String | Название размера (S, M, L, XL и т.д.) |
| code | String | Уникальный код размера |
| description | String | Дополнительная информация о размере (опционально) |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `products`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| name | String | Название продукта |
| slug | String | URL-совместимое имя (уникальное) |
| description | Text | Описание продукта (опционально) |
| price | Float | Базовая цена продукта |
| discount_price | Float | Цена со скидкой (опционально) |
| care_instructions | JSON | Инструкции по уходу и другие детали (опционально) |
| is_active | Boolean | Активен ли продукт |
| category_id | Integer | Внешний ключ на таблицу categories |
| collection_id | Integer | Внешний ключ на таблицу collections (опционально) |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `product_variants`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| product_id | Integer | Внешний ключ на таблицу products |
| size_id | Integer | Внешний ключ на таблицу sizes |
| sku | String | Артикул (уникальный) |
| stock | Integer | Количество на складе |
| is_active | Boolean | Активен ли вариант |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `product_images`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| product_id | Integer | Внешний ключ на таблицу products |
| image_url | String | URL изображения |
| alt_text | String | Альтернативный текст (опционально) |
| is_primary | Boolean | Является ли изображение основным |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

## Заказы

### Таблица `cart_items`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| user_id | Integer | Внешний ключ на таблицу users |
| product_variant_id | Integer | Внешний ключ на таблицу product_variants |
| quantity | Integer | Количество товара |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `orders`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| user_id | Integer | Внешний ключ на таблицу users |
| status | String | Статус заказа (новый, оплачен, отправлен, доставлен, отменен) |
| total_amount | Float | Общая сумма заказа |
| shipping_address_id | Integer | Внешний ключ на таблицу addresses |
| payment_method | String | Способ оплаты |
| tracking_number | String | Номер отслеживания (опционально) |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `order_items`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| order_id | Integer | Внешний ключ на таблицу orders |
| product_variant_id | Integer | Внешний ключ на таблицу product_variants |
| quantity | Integer | Количество товара |
| price | Float | Цена товара на момент заказа |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

## Отзывы

### Таблица `reviews`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| product_id | Integer | Внешний ключ на таблицу products |
| user_id | Integer | Внешний ключ на таблицу users |
| rating | Integer | Оценка (1-5) |
| text | Text | Текст отзыва (опционально) |
| is_approved | Boolean | Одобрен ли отзыв |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

## Контент

### Таблица `pages`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| title | String | Заголовок страницы |
| slug | String | URL-совместимое имя (уникальное) |
| content | Text | Содержимое страницы |
| is_published | Boolean | Опубликована ли страница |
| created_at | DateTime | Дата и время создания |
| updated_at | DateTime | Дата и время обновления |

### Таблица `analytics_logs`
| Поле | Тип | Описание |
|------|-----|----------|
| id | Integer | Первичный ключ |
| event_type | String | Тип события |
| event_data | JSON | Данные события |
| user_id | Integer | Внешний ключ на таблицу users (опционально) |
| ip_address | String | IP-адрес (опционально) |
| user_agent | String | User-Agent (опционально) |
| created_at | DateTime | Дата и время создания |

## Связи между таблицами

1. `users` 1:N `addresses` (один пользователь может иметь несколько адресов)
2. `users` 1:N `cart_items` (один пользователь может иметь несколько товаров в корзине)
3. `users` 1:N `orders` (один пользователь может иметь несколько заказов)
4. `users` 1:N `reviews` (один пользователь может оставить несколько отзывов)

5. `categories` 1:N `categories` (категория может иметь подкатегории)
6. `categories` 1:N `products` (категория может содержать несколько продуктов)

7. `collections` 1:N `products` (коллекция может содержать несколько продуктов)

8. `sizes` 1:N `product_variants` (размер может быть использован в нескольких вариантах продуктов)

9. `products` 1:N `product_variants` (продукт может иметь несколько вариантов)
10. `products` 1:N `product_images` (продукт может иметь несколько изображений)
11. `products` 1:N `reviews` (продукт может иметь несколько отзывов)

12. `product_variants` 1:N `cart_items` (вариант продукта может быть в нескольких корзинах)
13. `product_variants` 1:N `order_items` (вариант продукта может быть в нескольких заказах)

14. `orders` 1:N `order_items` (заказ может содержать несколько товаров)
15. `addresses` 1:N `orders` (адрес может быть использован в нескольких заказах) 