Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTvizh_CNzh_TW

🍟 Комплексная диаграмма сущность-связь: Интегрированная система операций McDonald’s

(С фокусом на обработку заказов, клиентский опыт и операции магазина)


🔍 Бизнес-контекст

Диаграмма сущность-связь моделирует основные операции вмагазине McDonald’s, с фокусом на:

  • Поток заказа от клиента до оплаты

  • Роли сотрудников и управление магазином

  • Наличие меню и ценообразование

  • Лояльность клиентов и повторное взаимодействие

  • Базовый учёт запасов (для продуктов питания)

Примечание: Это не полноценная корпоративная база данных (например, цепочка поставок или HR), а реалистичная, масштабируемая основа для системы POS в сфере быстрого питания.


📚 Сущности и атрибуты

Сущность Атрибуты
Клиент CustomerID (PK), Имя, Телефон, Email, Баллы лояльности, Статус участия (например, Бронза, Серебро)
Магазин StoreID (PK), Название, Расположение (адрес), ID менеджера (ВН → Сотрудник), Часы работы, Объём продаж (ежемесячно)
Сотрудник EmployeeID (PK), Имя, Должность (Кассир, Повар, Менеджер, Супервайзер), StoreID (ВН), Дата найма, График смен
Пункт меню MenuItemID (PK), Название, Описание, Цена, Категория (Бургер, Напиток, Закуска, Десерт), Активен, URL изображения
Заказ OrderID (PK), Время заказа, Статус (Ожидание → Подготовка → Готово → Выполнен → Отменён), Общая сумма, StoreID (ВН), CustomerID (ВН)
Пункт заказа OrderItemID (PK), OrderID (ВН), MenuItemID (ВН), Количество, Сумма по строке (автоматически рассчитывается)
Оплата PaymentID (PK), Сумма, Способ оплаты (Наличные, Кредитная карта, Мобильный платёж), ID транзакции, OrderID (ВН), Временная метка
Промоакция PromotionID (PK), Код (например, «WELCOME10»), Тип скидки (Процент, Фиксированная), Размер скидки, Дата активации, Дата окончания, Действует для (например, Обед, Все товары)

🔗 Связи (с кардинальностью)

Связь Кардинальность Описание
Клиент → Заказ 1 → 0.. Клиент делает несколько заказов с течением времени.
Заказ → Позиция заказа 1 → 0.. Каждый заказ содержит ноль или более позиций меню.
Заказ → Оплата 1 → 1 Каждый завершенный заказ имеет ровно одну оплату.
Заказ → Магазин 1 → 1 Каждый заказ делается в одном конкретном магазине.
Магазин → Сотрудник 1 → 0.. Магазин нанимает несколько сотрудников (кассиры, повара, менеджеры).
Магазин → Заказ 1 → 0.. Магазин получает много заказов.
Пункт меню → Пункт заказа 1 → 0.. Пункт меню может появляться в нескольких заказах.
Акция → Заказ 0 → 1 Акция может применяться к заказу (например, «Купи 1 Big Mac, получи 1 бесплатно»).
Сотрудник → Магазин 1 → 1 Каждый сотрудник работает в одном магазине.

✅ Необязательно: ДобавитьПрограмма лояльностисущность, если требуется более сложная логика лояльности (например, обмен баллов, вознаграждения).


🔒 Ограничения и бизнес-правила

  • Цена должна быть > 0

  • Статус заказа не может быть «Завершен» при отсутствии оплаты

  • Количество в OrderItem ≥ 1

  • Акции можно применять только при активности и в пределах временного окна

  • Клиент должен быть связан хотя бы с одним заказом, чтобы заработать баллы лояльности

  • Позиции меню помечаются как «Неактивные», если их нет в наличии или они сняты с продажи


📝 Сценарии использования (почему этот ERD важен)

Сценарий использования Выгода
Проектирование системы POS Позволяет отслеживать заказы в реальном времени, проводить оплату и генерировать чеки
Оповещения о наличии товара При частом заказе позиции меню отслеживайте уровень запасов
Программы лояльности Отслеживайте накопление баллов, предлагайте персонализированные скидки
Аналитика магазина Определяйте наиболее продаваемые товары, пиковые часы, популярные акции
Управление персоналом Назначайте роли, отслеживайте смены, управляйте производительностью

📂 Форматы вывода

Вы можете скопировать и вставить любой из следующих элементов в документацию, презентацию или инструменты проектирования баз данных.


✅ 1. Текстовый ERD (для документации)

Сущности:

- Клиент
  - CustomerID (PK)
  - Имя
  - Телефон
  - Email
  - Баллы лояльности
  - Уровень участия

- Магазин
  - StoreID (PK)
  - Имя
  - Расположение
  - ManagerID (FK → Сотрудник)
  - Часы работы
  - Ежемесячные продажи

- Сотрудник
  - EmployeeID (PK)
  - Имя
  - Роль (Кассир, Повар, Менеджер)
  - StoreID (FK)
  - Дата найма

- Позиция меню
  - MenuItemID (PK)
  - Имя
  - Описание
  - Цена
  - Категория
  - Активен

- Заказ
  - OrderID (PK)
  - Время заказа
  - Статус (Ожидание, Подготовка, Готов, Завершен, Отменен)
  - CustomerID (FK)
  - StoreID (FK)
  - Общая сумма

- Позиция заказа
  - OrderItemID (PK)
  - OrderID (FK)
  - MenuItemID (FK)
  - Количество
  - Сумма строки

- Оплата
  - PaymentID (PK)
  - Сумма
  - Способ (Наличные, Кредитная карта, MobilePay)
  - OrderID (FK)
  - Время

- Акция
  - PromotionID (PK)
  - Код
  - Тип скидки
  - Размер скидки
  - Дата активации
  - Дата окончания
  - Применяется к

Связи:
- Клиент "1" -- "0..*" Заказ
- Заказ "1" -- "0..*" Позиция заказа
- Заказ "1" -- "1" Оплата
- Заказ "1" -- "1" Магазин
- Магазин "1" -- "0..*" Сотрудник
- Позиция меню "1" -- "0..*" Позиция заказа
- Акция "0..*" -- "1" Заказ (условно, при активности)

✅ 2. Версия Mermaid.js (для Markdown, Notion, Obsidian)

erDiagram
    CUSTOMER ||--o{ ORDER : "places"
    STORE ||--o{ ORDER : "serves"
    STORE ||--o{ EMPLOYEE : "employs"
    STORE ||--o{ MENU_ITEM : "sells"
    ORDER ||--o{ ORDER_ITEM : "contains"
    ORDER ||--o{ PAYMENT : "has"
    MENU_ITEM ||--o{ ORDER_ITEM : "appears in"
    PROMOTION ||--o{ ORDER : "applies to"

    CUSTOMER {
        int CustomerID PK
        string Name
        string Phone
        string Email
        int LoyaltyPoints
        string MembershipTier
    }

    STORE {
        int StoreID PK
        string Name
        string Location
        int ManagerID FK
        string OpenHours
        decimal MonthlySales
    }

    EMPLOYEE {
        int EmployeeID PK
        string Name
        string Role
        int StoreID FK
        date HireDate
    }

    MENU_ITEM {
        int MenuItemID PK
        string Name
        string Description
        decimal Price
        string Category
        boolean IsActive
    }

    ORDER {
        int OrderID PK
        datetime OrderTime
        string Status
        int CustomerID FK
        int StoreID FK
        decimal TotalAmount
    }

    ORDER_ITEM {
        int OrderItemID PK
        int OrderID FK
        int MenuItemID FK
        int Quantity
        decimal LineTotal
    }

    PAYMENT {
        int PaymentID PK
        decimal Amount
        string Method
        int OrderID FK
        datetime Timestamp
    }

    PROMOTION {
        int PromotionID PK
        string Code
        string DiscountType
        decimal DiscountValue
        datetime ActiveDate
        datetime ExpireDate
        string AppliesTo
    }


✅ 3. Версия PlantUML

' ERD системы заказов McDonald's (PlantUML)

package "Операции McDonald's" {
  entity "Клиент" {
    - CustomerID (PK)
    - Имя
    - Телефон
    - Электронная почта
    - Баллы лояльности
    - Уровень участия
  }

  entity "Магазин" {
    - StoreID (PK)
    - Название
    - Расположение
    - ManagerID (FK → Сотрудник)
    - Часы работы
    - Ежемесячные продажи
  }

  entity "Сотрудник" {
    - EmployeeID (PK)
    - Имя
    - Должность (Кассир, Повар, Менеджер)
    - StoreID (FK → Магазин)
    - Дата найма
  }

  entity "Пункт меню" {
    - MenuItemID (PK)
    - Название
    - Описание
    - Цена
    - Категория (Бургер, Напиток, Закуска)
    - Активен
  }

  entity "Заказ" {
    - OrderID (PK)
    - Время заказа
    - Статус (Ожидает, Готовится, Готов, Завершен)
    - CustomerID (FK → Клиент)
    - StoreID (FK → Магазин)
    - Общая сумма
  }

  entity "Позиция заказа" {
    - OrderItemID (PK)
    - OrderID (FK → Заказ)
    - MenuItemID (FK → Пункт меню)
    - Количество
    - Сумма строки
  }

  entity "Оплата" {
    - PaymentID (PK)
    - Сумма
    - Способ (Наличные, Кредитная карта)
    - OrderID (FK → Заказ)
    - Временная метка
  }

  entity "Акция" {
    - PromotionID (PK)
    - Код (например, WELCOME10)
    - Тип скидки (Процент, Фиксированная)
    - Значение скидки
    - Дата активации
    - Дата окончания
    - Применимо к
  }

  Клиент "1" -- "0..*" Заказ : "делает"
  Заказ "1" -- "0..*" Позиция заказа : "содержит"
  Заказ "1" -- "1" Оплата : "имеет"
  Заказ "1" -- "1" Магазин : "сделан в"
  Магазин "1" -- "0..*" Сотрудник : "нанимает"
  Пункт меню "1" -- "0..*" Позиция заказа : "входит в"
  Акция "0..*" -- "1" Заказ : "применяется к"
}

 


🔍 Будущие расширения (по желанию)

Если вы хотите расширить этот ERD, рассмотрите возможность добавления:

  • Инвентаризация → Отслеживает уровни запасов, точки перезаказа, информацию о поставщике

  • График смен → Ежедневные смены, перерывы, назначение смен

  • Поставщик → Кто поставляет ингредиенты (например, «Поставщик сыра»)

  • Сезонные меню → Специальные акции (например, «Меню летнего барбекю»)

  • Геолокация → Для отслеживания доставки или самовывоза


🚀 Заключительные мысли

Этот ERD —реалистичный, масштабируемый и соответствует операциям McDonald’s — он отражает реальные рабочие процессы POS, роли сотрудников и поведение клиентов.

✅ У вас теперь естьполный, готовый к использованию ERD для системы McDonald’s — будь то школьный проект, бизнес-анализ или техническое проектирование.

Sidebar Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...