Простейшая модель будет выглядеть примерно так:
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