Связь основных данных с предикатами

#iphone #objective-c #core-data #entity-relationship #nspredicate

#iPhone #objective-c #core-data #сущность-связь #nspredicate

Вопрос:

У меня есть объект Car и сущность Race . У обоих объектов есть атрибут с именем carClass . Моя проблема в том, что я хочу создать связь между ними при объединении с помощью carClass .

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

Мой вопрос в том, возможно ли это создать с помощью Core Data relations , я подумываю о том, чтобы просто добавить NSPredicate к отношению.

Заранее спасибо.

Обновить

Я думаю, что я не объяснил четко, чего я хочу достичь.

 Car{
  carClass:string
}

Race{
 carClass:string
 competitors<-->>cars.carClass == carClass
}
  

И competitors должно быть выбрано автоматически, поэтому мне не нужно добавлять конкурентов вручную, он должен извлечь все подходящие автомобили из модели автомобилей.

Ответ №1:

Простейшая модель выглядела бы примерно так:

 CarClass{
    name:string
    race<-->Race.carClass
    cars<-->>Car.carClass
}

Car{
    name:string
    carClass<<-->CarClass.cars
}

Race{
    name:string
    carClass<-->>CarClass.race
}
  

Не думайте об этом в терминах SQL, думайте об этом в терминах объекта. Каждый объект должен представлять объект реального мира, событие или условие, которое вы хотите смоделировать. Отношения между объектами должны имитировать отношения реального мира. Если и Race , и Car объекты реального мира имеют общую связь с CarClass условием, то вы просто помещаете это в модель.

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

Обновить:

(Смотрите обновление в OP для справки)

Когда вы обнаруживаете, что помещаете одно и то же значение атрибута в два или более разных объекта, это обычно означает, что вам нужно создать новый объект для моделирования этого значения.

В этом случае, хотя с точки зрения данных значение carClass является просто строкой, логически это совершенно отдельная вещь, которая связана как с Race , так и Car с объектами. Итак, чтобы точно смоделировать это, вам нужно предоставить для этого отдельный объект. Кроме того, вам нужно смоделировать конкурентов, поэтому вам нужна модель, которая выглядит примерно так:

 CarClass{
    class:string
    race<-->Race.carClass
    cars<-->>Car.carClass
}

Car{
    name:string
    carClass<<-->CarClass.cars
    competitor<-->>Competitor.car
}

Race{
    name:string
    carClass<-->CarClass.race
}

Competitor{
  name:string
  car<-->Car.competitor
}
  

(Обратите внимание, что эта модель предполагает, что все расы определяются их классом автомобиля, а не отдельными транспортными средствами или водителями.)

Итак, чтобы найти всех участников определенной гонки, вам пришлось бы пройти пешком Race.carClass.cars.competitor .

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

Комментарии:

1. спасибо за ваш ответ, я обновил свой вопрос, потому что, по-моему, я недостаточно хорошо объяснил свою проблему. Спасибо.

2. Если я правильно понимаю, я должен создать класс с именем carClass вместо использования просто строки, и я должен создать связь с Car классом, а также с Race классом. Затем используйте Race.carClass.cars , чтобы получить список автомобилей из этого carClass .

3. Да, это логически свяжет все данные воедино. Конечно, ваша фактическая модель может отличаться в деталях, но вы уловили идею. Когда одно и то же значение отображается в двух существующих объектах, и вы обнаруживаете, что извлекаете оба на основе этого значения, тогда значению, вероятно, нужна своя собственная сущность и отношения.

Ответ №2:

Конечно, это возможно. Но почему бы просто не проверить каждый класс cars при настройке гонки и добавить автомобиль в гонку, если класс совпадает?

Комментарии:

1. Требуется обработать слишком много обращений. Что, если я добавлю больше машин после создания гонки? Я должен снова добавить их вручную. Также это решение не очень согласовано. Но если вы сможете показать мне концепцию доказательства, подобную этой, я буду счастлив. Спасибо.