Базовое отношение данных с предикатами - PullRequest
0 голосов
/ 30 апреля 2011

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

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

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

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

Обновление

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

Car{
  carClass:string
}

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

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

Ответы [ 2 ]

3 голосов
/ 30 апреля 2011

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

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 голос
/ 30 апреля 2011

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

...