← Назад к вопросам

Опишите сущности и связи офлайн магазина

2.0 Middle🔥 81 комментариев
#Архитектура и паттерны#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сущности офлайн магазина

Офлайн магазин — это сложная система, которую можно смоделировать через набор взаимосвязанных сущностей. Рассмотрим основные из них и их отношения.

Основные сущности

1. Магазин (Store) Это базовая сущность, которая представляет физическое помещение.

class Store:
    id: UUID
    name: str
    address: str
    city: str
    phone: str
    email: str
    opening_hours: str
    manager_id: UUID
    created_at: datetime
    updated_at: datetime

2. Товар (Product) Физический товар, который продаётся в магазине.

class Product:
    id: UUID
    name: str
    description: str
    category_id: UUID
    sku: str
    manufacturer: str
    price: Decimal
    cost: Decimal
    barcode: str
    created_at: datetime

3. Категория (Category) Организует товары по типам (одежда, электроника и т.д.).

class Category:
    id: UUID
    name: str
    description: str
    parent_category_id: UUID  # для подкатегорий

4. Заказ (Order) Документ о продаже товаров клиентом.

class Order:
    id: UUID
    store_id: UUID
    customer_id: UUID
    order_number: str
    order_date: datetime
    total_amount: Decimal
    tax_amount: Decimal
    status: OrderStatus  # pending, completed, cancelled
    payment_method: str
    cashier_id: UUID

5. Товар в заказе (OrderItem) Прямая связь между заказом и товаром.

class OrderItem:
    id: UUID
    order_id: UUID
    product_id: UUID
    quantity: int
    unit_price: Decimal
    discount_percent: Decimal
    total_price: Decimal

6. Клиент (Customer) Лицо, которое покупает товары.

class Customer:
    id: UUID
    email: str
    phone: str
    first_name: str
    last_name: str
    loyalty_points: int
    registered_date: datetime

7. Сотрудник (Employee) Работник магазина (кассир, менеджер, продавец).

class Employee:
    id: UUID
    store_id: UUID
    first_name: str
    last_name: str
    position: str
    email: str
    hire_date: datetime
    salary: Decimal

8. Инвентарь (Inventory) Количество товара в магазине.

class Inventory:
    id: UUID
    store_id: UUID
    product_id: UUID
    quantity: int
    reorder_level: int
    last_restock_date: datetime

Связи между сущностями

Store (1) ──────── (M) Employee
  │
  ├─── (1) ──────── (M) Inventory
  │
  └─── (1) ──────── (M) Order

Product (1) ──────── (M) OrderItem
   │
   └─── (M) ──────── (1) Category

Product (1) ──────── (M) Inventory

Customer (1) ──────── (M) Order

Order (1) ──────── (M) OrderItem

Employee (1) ──────── (M) Order (как кассир)

Store (1) ──────── (1) Employee (как менеджер)

Типы отношений

  • One-to-Many: Магазин → Заказы, Магазин → Сотрудники, Продукт → Заказы
  • Many-to-Many: Через промежуточную таблицу OrderItem (Заказ ↔ Товар)
  • Self-referencing: Категория → Родительская категория (иерархия)

Ключевые constraint-ы

  • Удаление магазина должно каскадно удалять его заказы и сотрудников
  • Товар нельзя удалить, если на него есть заказы (мягкое удаление)
  • Количество в инвентаре не может быть отрицательным
  • Email и SKU должны быть уникальны
  • Цена товара должна быть больше себестоимости

Эта модель обеспечивает полную картину работы офлайн магазина, отслеживая товары, продажи, персонал и клиентов.