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

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

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

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

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

Обновить

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

Car{
  carClass:string
}

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

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


person dombesz    schedule 30.04.2011    source источник


Ответы (2)


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

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.

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

person TechZen    schedule 30.04.2011
comment
спасибо за ваш ответ, я обновил свой вопрос, потому что я думаю, что плохо объяснил свою проблему. Спасибо. - person dombesz; 30.04.2011
comment
Если я правильно понимаю, мне нужно создать класс с именем carClass вместо использования просто строки, и я должен создать отношение с классом Car, а также с классом Race. Затем используйте Race.carClass.cars, чтобы получить список автомобилей из этого carClass. - person dombesz; 02.05.2011
comment
Да, это логически свяжет все данные вместе. Конечно, ваша реальная модель может отличаться в деталях, но вы поняли идею. Когда одно и то же значение отображается в двух существующих сущностях, и вы обнаруживаете, что извлекаете обе на основе этого значения, тогда этому значению, вероятно, нужна собственная сущность и отношения. - person TechZen; 02.05.2011

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

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