В моей системе версия плана производства (Imalat Plan Revizyonu) может использовать несколько ресурсов, таких как:
Машины (например, пресс-машина)
Персонал (например, Оператор)
Измерительные устройства (например, штангенциркуль)
Каждое из них уже представлено отдельным объектом в системе:
Машина
Измерительное устройство
Пользователь (для персонала)
Теперь я хочу смоделировать общую концепцию под названием «Источник» (или «Ресурс»), которая может представлять собой любой из этих типов объектов при назначении редакции плана производства.
В настоящее время я рассматриваю два возможных подхода:
Вариант 1. Каждый объект представляет собой собственный тип ресурса.
Каждый объект (Машина, Измерительное устройство и т. д.) имеет поле sourceType (например, «Машина», «Устройство», «Человек»).
При создании редакции плана производства я просто выбираю из этих объектов и сохраняю их идентификаторы в таблице соединений, например. Production_revision_source.
Код: Выделить всё
@Table(name = "production_revision_source")
class ProductionRevisionSource {
@ManyToOne
private ProductionRevision revision;
private UUID referenceId; // e.g., Machine.id or Device.id
@ManyToOne
private SourceType sourceType; // e.g., "Machine", "Person", "Device"
private String description; // specific to this revision
}
Простота, легкость для понимания.
Нет необходимости в центральной таблице источников.
Меньше логики синхронизации.
Минусы:
Сложнее перечислить все ресурсы в одном месте.
Для добавления новых типов ресурсов требуются новые объекты.
Вариант 2 – централизованный источник. сущность
Каждая реальная сущность (машина, пользователь, измерительное устройство) автоматически создает соответствующую запись источника:
Код: Выделить всё
@ManyToOne
private SourceType sourceType; // e.g., Machine, Person, Device
private String description;
private UUID referenceId; // points to the real entity (Machine.id, etc.)
}
```Then the revision only references Source:```
class ProductionRevisionSource {
@ManyToOne
private ProductionRevision revision;
@ManyToOne
private Source source;
private String description; // optional per revision
}
Централизовано, масштабируемо для новых типов
Упрощенная отчетность («показать все источники, используемые в системе»)
Минусы:
Необходимо синхронизировать описание источника, если исходный объект изменяется
Немного более сложная логика CRUD
Мой вопрос
Какой подход лучше на практике для производства/систем типа ERP с использованием JPA?
Следует ли мне моделировать все «ресурсы» (машины, персонал, устройства) через центральную исходную таблицу
или позволить каждому объекту действовать как отдельный тип ресурса и просто связываться по типу + referenceId?
Я также был бы признателен за любые реальные примеры или лучшие практики из систем ERP/MES с открытым исходным кодом (например, ERPNext, inoERP и т. д.), которые решают эту проблему моделирования.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -types-mac
Мобильная версия