de2026_1_analysis.md 7.8 KB

Разбор Модуля 1 предварительного задания демо-экзамена 2026 года

Определение сущностей

Напомню описание предметной области (сразу выделив сущности):

Предприятие производит продукцию согласно установленным спецификациям и реализует готовую продукцию заказчикам. Каждая продукция имеет свою цену, зависящую от стоимости материалов.

Цена продукции (и материалов) не является отдельной сущностью - это свойство продукции (материала)

Что можно вытащить из данных для импорта:

  • Заказ покупателя

    Это данные для уже существующей сущности реализация (можем ее назвать заказы)

    • в заказе фигурируют исполнитель и заказчик, так как аттрибуты у них скорее всего одинаковые, то можно объединить их в одну сущность - организации
    • список продукции в заказе это классическая связь многие-ко-многим, которая будет реализована через таблицу связей продукты_заказа
  • Заказчики

    Данные для сущности организации, новых сущностей нет

  • Производство

    Данные для сущностей продукция и материалы

  • Расчет стоимости продукции

    Описывается связь между продуктами и материалами - связь многие-ко-многим, которая будет реализована через таблицу связей материалы_продукта

  • Спецификация

    Здесь повторение предыдущего пункта (для запутывания)

  • Цены

    Данные для сущностей продукция и материалы (в цену продукции включается не только цена исходных материалов, но и амортизация оборудования и зарплата и прибыль организации)

Итоговый список сущностей (с аттрибутами):

  • Organization (организация) - производители и заказчики

    Аттрибуты описаны в файле Заказчики

    • 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: decimal(11, 3) - количество на складе (в принципе не обязательно, данных для этого аттрибута нет)
    • organizationId: int - идентификатор производителя продукции (внешний ключ) - структура нашей модели допускает несколько разных производителей, поэтому нужно учитывать кому принадлежит продукция
  • Material (материал)

    • id: int - первичный ключ
    • name: varchar(256)
    • price: decimal(11, 2) - цена материала, денежный тип
    • unit: varchar(20) - единицы измерения
    • quantity: decimal(11, 3) - количество на складе
    • 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-диаграмма