|
@@ -1,4 +1,99 @@
|
|
|
# Разбор Модуля 1 предварительного задания демо-экзамена 2026 года
|
|
# Разбор Модуля 1 предварительного задания демо-экзамена 2026 года
|
|
|
|
|
|
|
|
|
|
+## Определение сущностей
|
|
|
|
|
+
|
|
|
|
|
+Напомню описание предметной области (сразу выделив сущности):
|
|
|
|
|
+
|
|
|
>Предприятие производит `продукцию` согласно установленным `спецификациям` и `реализует` готовую продукцию `заказчикам`. Каждая продукция имеет свою цену, зависящую от стоимости материалов.
|
|
>Предприятие производит `продукцию` согласно установленным `спецификациям` и `реализует` готовую продукцию `заказчикам`. Каждая продукция имеет свою цену, зависящую от стоимости материалов.
|
|
|
|
|
|
|
|
|
|
+Цена продукции (и материалов) не является отдельной сущностью - это свойство продукции (материала)
|
|
|
|
|
+
|
|
|
|
|
+Что можно вытащить из данных для импорта:
|
|
|
|
|
+
|
|
|
|
|
+- [Заказ покупателя](../DE09/2026/M1/Заказ%20покупателя.xlsx)
|
|
|
|
|
+
|
|
|
|
|
+ Это данные для уже существующей сущности `реализация` (можем ее назвать `заказы`)
|
|
|
|
|
+
|
|
|
|
|
+ - в `заказе` фигурируют _исполнитель_ и _заказчик_, так как аттрибуты у них скорее всего одинаковые, то можно объединить их в одну сущность - `организации`
|
|
|
|
|
+ - список продукции в заказе это классическая связь многие-ко-многим, которая будет реализована через таблицу связей `продукты_заказа`
|
|
|
|
|
+
|
|
|
|
|
+- [Заказчики](../DE09/2026/M1/Заказчики.json)
|
|
|
|
|
+
|
|
|
|
|
+ Данные для сущности `организации`, новых сущностей нет
|
|
|
|
|
+
|
|
|
|
|
+- [Производство](../DE09/2026/M1/Производство.xlsx)
|
|
|
|
|
+
|
|
|
|
|
+ Данные для сущностей `продукция` и `материалы`
|
|
|
|
|
+
|
|
|
|
|
+- [Расчет стоимости продукции](../DE09/2026/M1/Расчет%20стоимости%20продукции.xlsx)
|
|
|
|
|
+
|
|
|
|
|
+ Описывается связь между продуктами и материалами - связь многие-ко-многим, которая будет реализована через таблицу связей `материалы_продукта`
|
|
|
|
|
+
|
|
|
|
|
+- [Спецификация](../DE09/2026/M1/Спецификация.xlsx)
|
|
|
|
|
+
|
|
|
|
|
+ Здесь повторение предыдущего пункта (для запутывания)
|
|
|
|
|
+
|
|
|
|
|
+- [Цены](../DE09/2026/M1/Цены.xlsx)
|
|
|
|
|
+
|
|
|
|
|
+ Данные для сущностей продукция и материалы (в цену продукции включается не только цена исходных материалов, но и амортизация оборудования и зарплата и прибыль организации)
|
|
|
|
|
+
|
|
|
|
|
+__Итоговый список сущностей (с аттрибутами):__
|
|
|
|
|
+
|
|
|
|
|
+- `Organization` (организация) - производители и заказчики
|
|
|
|
|
+
|
|
|
|
|
+ Аттрибуты описаны в файле [Заказчики](../DE09/2026/M1/Заказчики.json)
|
|
|
|
|
+
|
|
|
|
|
+ - `id: int` - первичный ключ
|
|
|
|
|
+ - `name: varchar(256)`
|
|
|
|
|
+ - `inn: char(11)` - числом хранить нельзя, иначе могут потеряться нули в начале + размер поля фиксированный, поэтому вибираем тип _char_
|
|
|
|
|
+ - `addres: varchar(256)`
|
|
|
|
|
+ - `phone: varchar(20)`
|
|
|
|
|
+ - `saleman: tinyint(1)` - признак что организация является продавцом
|
|
|
|
|
+ - `buyer: tinyint(1)` - признак что организация является покупателем (заказчиком)
|
|
|
|
|
+
|
|
|
|
|
+- `Product` (продукция)
|
|
|
|
|
+
|
|
|
|
|
+ - `id: int` - первичный ключ
|
|
|
|
|
+ - `name: varchar(256)`
|
|
|
|
|
+ - `price: decimal(11, 2)` - итоговая цена за единицу продукции, денежный тип
|
|
|
|
|
+ - `unit: varchar(20)` - единицы измерения
|
|
|
|
|
+ - `quantity: int` - количество на складе (в принципе не обязательно, данных для этого аттрибута нет)
|
|
|
|
|
+ - `organizationId: int` - идентификатор производителя продукции (внешний ключ) - структура нашей модели допускает несколько разных производителей, поэтому нужно учитывать кому принадлежит продукция
|
|
|
|
|
+
|
|
|
|
|
+- `Material` (материал)
|
|
|
|
|
+
|
|
|
|
|
+ - `id: int` - первичный ключ
|
|
|
|
|
+ - `name: varchar(256)`
|
|
|
|
|
+ - `price: decimal(11, 2)` - цена материала, денежный тип
|
|
|
|
|
+ - `unit: varchar(20)` - единицы измерения
|
|
|
|
|
+ - `quantity: int` - количество на складе
|
|
|
|
|
+ - `organizationId: int` - идентификатор производителя продукции (внешний ключ) - структура нашей модели допускает несколько разных производителей, поэтому нужно учитывать кому принадлежит материал
|
|
|
|
|
+
|
|
|
|
|
+- `ProductMaterial` (спецификация) - материалы продукта (таблица связи между продукцией и материалами)
|
|
|
|
|
+
|
|
|
|
|
+ - `productId: int` - идентификатор продукции (внешний ключ)
|
|
|
|
|
+ - `materialId: int` - идентификатор материала (внешний ключ)
|
|
|
|
|
+ - `quantity: decimal(11, 3)` - количество материала для производства продукции (у нас весовые продукты, поэтому количество может быть не целым)
|
|
|
|
|
+
|
|
|
|
|
+- `Order` (реализация) - заказы
|
|
|
|
|
+
|
|
|
|
|
+ - `id: int` - первичный ключ
|
|
|
|
|
+ - `orderNumber: int` - номер заказа, в принципе можно и без него
|
|
|
|
|
+ - `orderDate: datetime`
|
|
|
|
|
+ - `salemanId: int` - идентификатор продавца (внешний ключ)
|
|
|
|
|
+ - `buyerId: int` - идентификатор заказчика (внешний ключ)
|
|
|
|
|
+
|
|
|
|
|
+- `OrderProduct` (продукты_заказа) - таблица связи между заказом и продукцией
|
|
|
|
|
+
|
|
|
|
|
+ - `orderId: int` - идентификатор заказа (внешний ключ)
|
|
|
|
|
+ - `productId: int` - идентификатор продукции (внешний ключ)
|
|
|
|
|
+ - `price: decimal(11, 2)` - цена продукции НА МОМЕНТ ЗАКАЗА (так то цена есть в продукции, но она может измениться, а суммы старых заказов при этом меняться не должны)
|
|
|
|
|
+ - `quantity: decimal(11, 3)` - количество продукции в заказе
|
|
|
|
|
+
|
|
|
|
|
+## "Рисуем" ER-модель в MySql Workbench
|
|
|
|
|
+
|
|
|
|
|
+>По условиям задачи нужна логическая диаграмма, а не физическая (можно не указывать типы данных), то есть ее можно "рисовать" в любом графическом редакторе. Но рисуя сразу физическую модель в MySql Workbench мы сэкономим на следующем шаге - создании базы данных по модели.
|
|
|
|
|
+
|
|
|
|
|
+Сам процесс я описывать не буду, мы это проходили на лекциях. Напомню только, что внешние ключи и таблицы связи руками создавать не нужно - они автоматически создадутся при добавлении соответствующих связей
|
|
|
|
|
+
|
|
|
|
|
+[ER-диаграмма](../img/erd2026.pdf)
|