CoreData поддерживает порядок отношений - PullRequest
2 голосов
/ 21 июля 2011

У меня довольно простая модель CoreData, выраженная как:

enter image description here

Существует несколько «поездок», которые могут содержать несколько изображений. Кроме того, одно изображение может быть в нескольких поездках.

Моя проблема в том, что я хочу сохранить порядок, в котором они были добавлены в Поездку. Обычно я бы добавил поле к ImageData объекту, который поддерживает его index. Однако, поскольку изображение может быть в любом количестве поездок, это не имеет смысла.

Что такое чистый способ ведения индекса в этом случае?

Ответы [ 2 ]

7 голосов
/ 22 июля 2011

Вы ищете флажок упорядоченных отношений в Xcode 4.

http://i.stack.imgur.com/GZh8f.png

С поддержанием порядка связи требуется высокая производительность, поэтому, если ваш набор данных большой (> 10 тыс. Объектов), вы можете рассмотреть традиционный подход атрибута сортировки + дескриптор сортировки.

В вашем конкретном случае вы, вероятно, получите промежуточную сущность соединения, которая является соединением между Image и Trip, то есть ImageTripOrder, и имеет один-к-одному с Trip, а также один-к-одному с Image .

1 голос
/ 22 июля 2011

Старый способ справиться с этим - предоставить связующий объект, который кодирует порядок.

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 объектов или, если даты отсутствуют, вы можете просмотреть отношения.

В любом случае ваша модель теперь больше похожа на объекты, события или условия реального мира, с которыми имеет дело ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...