Отобранные модификации ТС
Отобранные для расчёта модификации ТС: какие модификации справочника «Марка, модель и модификация ТС» участвуют в расчёте расхода топлива.
1. Назначение
Связь «Расчёт ТС → Модификация ТС»: какие модификации справочника участвуют в расчёте.
Базовая норма расхода топлива — среднее базовых норм отобранных модификаций
(секция методики fuel.base_norm).
Связь смоделирована отдельной сущностью, а не коллекцией в
VehicleCalc: у неё две колонки-ключа, и так структура хранения видна явно — без
интерпретации навигационной коллекции в связующую таблицу.
Идентификатор и уникальность. Сущность следует общей инфраструктурной конвенции
(BaseEntity) наравне со всеми остальными доменными сущностями модуля — суррогатный
Id, не композитный ключ из двух FK. Это техническое решение, не бизнес-атрибут связи.
Отдельно, именно как ограничение целостности — пара (VehicleCalc, VehicleModification)
уникальна: одна и та же модификация не может быть отобрана для одного расчёта ТС более
одного раза. Раньше это гарантировал сам композитный первичный ключ; с суррогатным
Id это нужно задавать явно (уникальный индекс на паре колонок), иначе ограничение
пропадёт незаметно.
Связи
classDiagram
direction LR
class SelectedModifications {
+Guid id
+VehicleCalc vehicle_calc_id
+VehicleModification vehicle_modification_id
}
class VehicleCalc
class VehicleModification
SelectedModifications "1" --> "1" VehicleCalc : vehicle_calc_id
SelectedModifications "1" --> "1" VehicleModification : vehicle_modification_id
Структура
| Наименование | Атрибут | Тип | Обязательно для создания | Диапазон / формат | Неизменяемость | Описание |
|---|---|---|---|---|---|---|
| Идентификатор записи | id | Guid | Да | UUID | Да | |
| Расчёт ТС | vehicle_calc_id | VehicleCalc | Да | UUID | Да | Вместе с VehicleModification — уникальная пара (см. «Идентификатор и уникальность» документа) |
| Отобранная модификация ТС | vehicle_modification_id | VehicleModification | Да | UUID | Да | Вместе с VehicleCalc — уникальная пара (см. «Идентификатор и уникальность» документа) |
Исходник
public class SelectedModifications
{
/// <summary>Идентификатор записи</summary>
[DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
public Guid Id { get; set; }
/// <summary>Расчёт ТС</summary>
[Relation]
[DomainField(Alias = "vehicle_calc_id", RequiredOnCreate = true, Range = "UUID", Immutable = true,
Description = "Вместе с VehicleModification — уникальная пара (см. «Идентификатор и уникальность» документа)")]
public VehicleCalc? VehicleCalc { get; set; }
/// <summary>Отобранная модификация ТС</summary>
[Relation]
[DomainField(Alias = "vehicle_modification_id", RequiredOnCreate = true, Range = "UUID", Immutable = true,
Description = "Вместе с VehicleCalc — уникальная пара (см. «Идентификатор и уникальность» документа)")]
public VehicleModification? VehicleModification { get; set; }
}Структурные связи
Использует
- Доменная сущность Марка, модель и модификация ТС
- Доменная сущность Расчёт ТС
Используется
- Доменная сущность Модель входных данных расчёта
- Доменная сущность Расчёт ТС
- Запрос на изменение SelectedModifications приведена к BaseEntity
- Экран Окно подбора модификаций
- BC-модуль Домен ЭНТС
- Epic Расчёт нормативного расхода топлива
- Use Case Получение нормативного расхода топлива по ТС
- Vision Модуль «Эталоны и нормативы потребления автомобильного топлива транспортными средствами ПАО „Россети“»