Старый способ справиться с этим - предоставить связующий объект, который кодирует порядок.
Trip{
//...various attributes
images<-->>TripToImage.trip
}
Image{
//...various attributes
trips<-->>TripToImage.image
}
TripToImage{
trip<<-->Trip.images
image<<-->Image.trips
previous<-->TripToImage.next
next<-->TripToImage.previous
}
Связывающая сущность расширяет моделирование отношений. Вы можете создать произвольный порядок поездок или изображений.
Тем не менее, такой порядок обычно может быть излишним из-за лучшего дизайна модели. В этом случае, если изображения имеют конкретные даты и места, как они могут быть частью более чем одной поездки? Вы моделируете агентство путешествий во времени? ; -)
Базовые данные должны имитировать / моделировать реальные объекты, события и условия, с которыми работает ваше приложение. У реальных изображений и путешествий есть атрибуты, которые однозначно описывают их в пространстве и времени. Если ваши сущности точно фиксируют все эти данные, то упорядочение их по атрибутам становится тривиальным.
Как правило, вам нужно использовать связывающую сущность только тогда, когда вам нужно смоделировать произвольный порядок, такой как рейтинг избранного пользователя или другой субъективный порядок.
Обновление:
Он берет изображения мест, которые вы хотели бы видеть, и помещает их в список
для поездки. То есть не изображения, которые вы лично сделали.
Ваша текущая модель громоздка, потому что вы недостаточно тщательно моделируете свою проблему.
Вы действительно создаете маршрут, который представляет собой серию местоположений и времен, но вы пытаетесь косвенно смоделировать эту информацию, объединяя объекты Trip
и Image
в сложные отношения.
Вместо этого вам нужен объект, который специально моделирует маршрут.
ItineraryStop{
name:string
arrivalTime:date
departureTime:date
location<<-->Location.stops
image<<-->Image.stop
trip<<-->Trip.stop
previousStop<-->IteneraryStop.nextStop
nextStop<-->InteneraryStop.previousStop
}
Теперь все, все просто становится на свои места. Чтобы получить все остановки, необходимые для конкретной поездки, вы можете либо выбрать поездку, и отсортировать ее по прибытию, вы можете отсортировать любые конкретные остановки Trip
объектов или, если даты отсутствуют, вы можете просмотреть отношения.
В любом случае ваша модель теперь больше похожа на объекты, события или условия реального мира, с которыми имеет дело ваше приложение.