Как смоделировать объект отправки, где получателем может быть зарегистрированная компания или внешний клиент?MySql

Форум по Mysql
Ответить
Anonymous
 Как смоделировать объект отправки, где получателем может быть зарегистрированная компания или внешний клиент?

Сообщение Anonymous »

🧠 Описание:
Я создаю систему управления логистикой с использованием Spring Boot и JPA и пытаюсь правильно спроектировать базу данных для отправлений.
Каждая отгрузка создается зарегистрированной компанией (отправителем), а получателем может быть:
Другая зарегистрированная компания в системе (B2B) или
An внешний клиент, не зарегистрированный на платформе (B2C).
Вот моя текущая модель:

Код: Выделить всё

@Entity
public class Shipment {
@Id
private UUID id;

@ManyToOne
@JoinColumn(name = "sender_id")
private Company sender;

@ManyToOne
@JoinColumn(name = "receiver_id")
private Company receiver; // problem: sometimes receiver is external

private String source;
private String destination;
}
❌ Проблема
Когда получатель является внешним, нет записи компании, на которую можно было бы ссылаться.
Позволение приемнику_id иметь значение null или неправильное использование приводит к несогласованности и нарушает нормализацию.
🧩 Цель
Я хочу спроектировать эту таблицу так, чтобы:
Отправитель всегда зарегистрированная компания.
Получателем может быть:
Другая зарегистрированная компания или
Внешний клиент (имя, телефон, адрес).
Модель должна оставаться нормализованной, масштабируемой и совместимой с JPA.
💡 Рассматриваемые варианты
Вариант 1: Полиморфная ассоциация

Код: Выделить всё

@Entity
public class Shipment {
@Id
private UUID id;

@ManyToOne
@JoinColumn(name = "sender_id")
private Company sender;

private Long receiverId;
private String receiverType; // 'COMPANY' or 'EXTERNAL'
}

Код: Выделить всё

@Entity
public class ExternalReceiver {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String phone;
private String address;
}
Тогда я могу решить, к какой таблице присоединиться, в зависимости от типа получателя.
❓ Вопросы
Рекомендуется ли этот подход полиморфной ассоциации для JPA/MySQL?
Существуют ли какие-либо более чистые альтернативы (отображение наследования, таблицы соединения, столбцы дискриминатора и т. д.), используемые в подобных реальных системах?
Как я могу эффективно запрашивать отправления с полной информацией о получателе (внутреннем или внешнем) с помощью Spring Data JPA?
🧰 Tech Stack
Java 17
Spring Boot 3.x
Spring Data JPA (Hibernate)
MySQL 8

Подробнее здесь: https://stackoverflow.com/questions/797 ... stered-com
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»