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

Диаграмма сущность-связь моделирует основные операции вмагазине 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
Акции можно применять только при активности и в пределах временного окна
Клиент должен быть связан хотя бы с одним заказом, чтобы заработать баллы лояльности
Позиции меню помечаются как «Неактивные», если их нет в наличии или они сняты с продажи
| Сценарий использования | Выгода |
|---|---|
| Проектирование системы POS | Позволяет отслеживать заказы в реальном времени, проводить оплату и генерировать чеки |
| Оповещения о наличии товара | При частом заказе позиции меню отслеживайте уровень запасов |
| Программы лояльности | Отслеживайте накопление баллов, предлагайте персонализированные скидки |
| Аналитика магазина | Определяйте наиболее продаваемые товары, пиковые часы, популярные акции |
| Управление персоналом | Назначайте роли, отслеживайте смены, управляйте производительностью |
Вы можете скопировать и вставить любой из следующих элементов в документацию, презентацию или инструменты проектирования баз данных.
Сущности:
- Клиент
- 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" Заказ (условно, при активности)
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
}

' 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 — будь то школьный проект, бизнес-анализ или техническое проектирование.